Mysql
 sql >> Database >  >> RDS >> Mysql

PHP / MySQLi:come prevenire l'iniezione SQL su INSERT (codice parzialmente funzionante)

Nel Nuovo codice PHP snippet, sei ancora vulnerabile alle iniezioni.
Stai usando un'istruzione preparata nella parte dell'inserto, ma in realtà non stai usando correttamente i dosaggi delle preparazioni.

Quando crei un'istruzione preparata, crei una query in cui aggiungi segnaposto invece dei valori grezzi:

$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");

I punti interrogativi sono i segnaposto e vengono successivamente sostituiti utilizzando il bind_param metodo:

$stmt->bind_param('ss', $email, $pw);

Il ss parte della chiamata bind dice al db mysql che le sue due stringhe che vengono passate al database (s per string , io per int ecc).
Stai vincolando un parametro ($name ) ma non ha segnaposto né alcun tipo di riferimento nella query..?

La tua istruzione select, d'altra parte, è ancora pericolosa e aperta a vulnerabilità.
Probabilmente userei una dichiarazione preparata lì, proprio come con la parte di inserimento.

Vuoi sempre assicurarti che l'input dell'utente sia "sicuro" per il database, se concate una stringa di query e aggiungi l'input dell'utente, il database non sfuggirà alle stringhe, lo eseguirà semplicemente.

Usa solo query standard chiamate al metodo quando scrivi tu stesso la query completa, senza parametri di input e soprattutto senza parametri di input passati dall'utente!