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!