Funzione di sicurezza PHP: strip_tags, filter_var, Md5 e sha1
Potenziali minacce alla sicurezza
Sono fondamentalmente due gruppi di persone che possono attaccare il tuo sistema
- Hacker: con l'intento di ottenere l'accesso a dati non autorizzati o interrompere l'applicazione
- Utenti: possono inserire in modo innocuo parametri errati nei moduli che possono avere effetti negativi su un sito Web o un'applicazione Web.
Di seguito sono elencati i tipi di attacchi a cui dobbiamo fare attenzione.
SQL Injection โ Questo tipo di attacco aggiunge codice dannoso SQL dichiarazioni.
Questa operazione viene eseguita utilizzando moduli di input dell'utente o URL che utilizzano variabili.
Il codice aggiunto commenta la condizione nella clausola WHERE di un'istruzione SQL. Il codice allegato puรฒ anche;
- inserire una condizione che sarร sempre vera
- eliminare i dati da una tabella
- aggiornare i dati in una tabella
- Questo tipo di attacco viene solitamente utilizzato per ottenere l'accesso non autorizzato a un'applicazione.
Cross Site Scripting - questo tipo di attacco solitamente inserisce codice dannoso JavaScript. Questo viene fatto usando moduli di input utente come i moduli di contatto e commenti. Questo viene fatto per;
- Recuperare informazioni sensibili come dati dei cookie
- Reindirizzare l'utente a un URL diverso.
- Altre minacce possono includere: iniezione di codice PHP, iniezione di shell, iniezione di email, divulgazione del codice sorgente dello script, ecc.
PHP Application Security migliori pratiche
Diamo ora un'occhiata ad alcune delle migliori pratiche di sicurezza PHP che dobbiamo considerare quando sviluppiamo le nostre applicazioni.
strip_tag PHP
Le funzioni strip_tags rimuovono HTML, JavaCopione o tag PHP da una stringa.
Questa funzione รจ utile quando dobbiamo proteggere la nostra applicazione da attacchi come il cross site scripting.
Consideriamo un'applicazione che accetta commenti dagli utenti.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Supponendo che tu abbia salvato comments.php nella cartella phptuts, cerca l'URLhttp://localhost/phptuts/comments.php
Supponiamo che tu riceva quanto segue come input utente alert(โYour site sucks!โ);
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo "<h4>My Commenting System</h4>";
echo $user_input;
?>
Passare all'URL http://localhost/phptuts/comments.php
Proteggiamo ora la nostra applicazione da tali attacchi utilizzando la funzione strip_tags.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo strip_tags($user_input);
?>
Passare all'URL http://localhost/phptuts/comments.php
Funzione PHP filter_var
La funzione filter_var viene utilizzata per convalidare e disinfettare i dati.
La convalida controlla se i dati sono del tipo corretto. Un controllo di convalida numerica su una stringa restituisce un risultato falso.
La sanificazione sta rimuovendo i caratteri illegali da a stringa.
Controllare questo collegamento per il riferimento completo filtro_var
Il codice รจ per il sistema di commenti.
Utilizza la funzione filter_var e la costante FILTER_SANITIZE_STRIPPED per rimuovere i tag.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
?>
Produzione:
alert('Your site sucks!');
Funzione mysqli_real_escape_string Questa funzione viene utilizzata per proteggere un'applicazione dall'SQL injection.
Supponiamo di avere la seguente istruzione SQL per convalidare l'ID utente e la password.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Un utente malintenzionato puรฒ immettere il seguente codice nella casella di testo dell'ID utente. ' O 1 = 1 โ E 1234 nella casella di testo della password Codifichiamo il modulo di autenticazione
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Il risultato finale sarร
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
QUI,
- โSELECT * FROM users WHERE user_id = โโ verifica un ID utente vuoto
- โ' OR 1 = 1 โ รจ una condizione che sarร sempre vera
- "-" commenta la parte che verifica la password.
La query precedente restituirร tutti gli utenti. Usiamo ora la funzione mysqli_real_escape_string per proteggere il nostro modulo di accesso.
<?php
$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");
$pwd = mysqli_real_escape_string("1234");
$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";
echo $sql;
?>
Verrร visualizzato il codice precedente
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Note: per noi รจ stato eseguito l'escape della seconda virgoletta singola, verrร trattata come parte dell'ID utente e la password non verrร commentata.
PHP Md5 e PHP sha1
Md5 รจ l'acronimo di Message Digest 5 e sha1 รจ l'acronimo di Secure Hash Algorithm 1.
Entrambi sono usati per crittografare le stringhe.
Una volta che una stringa รจ stata crittografata, รจ noioso decrittografarla.
Md5 e sha1 sono molto utili quando si memorizzano le password nel database.
Il codice seguente mostra l'implementazione di md5 e sha1
<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>
Supponendo che tu abbia salvato il file hash.php nella cartella phptuts, cerca l'URL
Come puoi vedere dagli hash sopra, se un utente malintenzionato avesse accesso al tuo database, non conoscerebbe comunque le password per accedere.
Sintesi
- La sicurezza si riferisce alle misure messe in atto per proteggere un'applicazione da attacchi accidentali e dannosi.
- La funzione strip_tags viene utilizzata per rimuovere tag come dai dati di input
- La funzione filter_var convalida e php disinfetta i dati di input
- mysqli_real_escape_string viene utilizzato per disinfettare l'istruzione SQL. Rimuove i caratteri dannosi dalle dichiarazioni
- sia MD5 che SHA1 vengono utilizzati per crittografare la password.




