sql >> Base de Datos >  >> RDS >> Mysql

PHP / MySQLi:cómo evitar la inyección de SQL en INSERT (el código funciona parcialmente)

En el Nuevo código PHP fragmento, todavía es vulnerable a las inyecciones.
Está usando una declaración preparada en la parte del inserto, pero en realidad no está usando las concentraciones de las preparaciones correctamente.

Al crear una declaración preparada, crea una consulta en la que agrega marcadores de posición en lugar de los valores sin procesar:

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

Los signos de interrogación son los marcadores de posición y luego se reemplazan usando el bind_param método:

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

El ss parte de la llamada de vinculación le dice a mysql db que sus dos cadenas se pasan a la base de datos (s para string , yo para int etc).
Está vinculando un parámetro ($name ) pero no tiene marcador de posición ni ningún tipo de referencia en la consulta..?

Su declaración de selección, por otro lado, aún no es segura y está abierta a vulnerabilidades.
Probablemente usaría una declaración preparada allí, al igual que con la parte de inserción.

Siempre desea asegurarse de que la entrada del usuario sea "segura" para la base de datos, si concatena una cadena de consulta y agrega la entrada del usuario, la base de datos no escapará de las cadenas, simplemente la ejecutará.

Utilice únicamente query estándar llama al método cuando escribe la consulta completa usted mismo, sin ningún parámetro de entrada, y especialmente sin parámetros de entrada que el usuario haya pasado.