mysql_real_escape_string NON è sufficiente. È inoltre necessario prendere in considerazione come strutturare la query. Si consideri il seguente script di accesso semplice:
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$sql = "SELECT * FROM users WHERE username = $username AND password = $password";
senza virgolette intorno $username
e $password
, l'iniezione è ancora possibile. (Si consideri un nome utente = test, gli utenti DROP TABLE; - Bye bye dati :(
mysql_real_escape_string è sufficiente da un punto di sanificazione SE si struttura la query correttamente Per una query ben costruito, questo funziona bene
.!..
Una domanda migliore è "cosa stai cercando di impedire?" Dovresti anche essere a conoscenza di XSS (cross-site-scripting) memorizzato e riflesso Se stai memorizzando input dagli utenti nel tuo database e che i dati sono resi nel browser, ti consigliamo di rimuovere i tag <script>
.
Ci sono molti filtri e codici disponibili in linea per questo a seconda della lingua. Se utilizzi Rails o Cod eIgniter, è fatto per te.
Per quanto riguarda questo tipo di sicurezza è interessato, mi consiglia di utilizzare il seguente:
- scaricare e installare damn vulnerable web app.la sua un'applicazione progettata per insegnare i pro ei contro di web hacking (basato su PHP)
- sempre tenta di inviare caratteri di un set di caratteri diverso
- sempre tenta di inviare il byte NULL
- evitare di passare troppi parametri nella querystring (può dare via la tua struttura dei dati)
- guardare i registri delle
- scaricare burpsuite - non avrai mai guardare a un sito web allo stesso modo nuovo
- orologio essendo loquace. I messaggi di errore di mysql sono ottimi per il debug, ma danno via un sacco di informazioni - spesso le volte rivelano l'intera query!
linea di fondo - se proviene dall'utente, è non può fidarsi di!
Per staccare html, utilizzare htmlspecialchars() invece. –