Cómo prevenir la inyección de SQL en PHP (con imágenes)

Tabla de contenido:

Cómo prevenir la inyección de SQL en PHP (con imágenes)
Cómo prevenir la inyección de SQL en PHP (con imágenes)

Video: Cómo prevenir la inyección de SQL en PHP (con imágenes)

Video: Cómo prevenir la inyección de SQL en PHP (con imágenes)
Video: DIY como OCULTAR los CABLES del TELEVISOR, (muy fácil) 2024, Mayo
Anonim

Este wikiHow te enseñará cómo prevenir la inyección de SQL usando declaraciones preparadas en PHP. La inyección de SQL es una de las vulnerabilidades más comunes en las aplicaciones web en la actualidad. Las declaraciones preparadas utilizan parámetros vinculados y no combinan variables con cadenas SQL, lo que hace imposible que un atacante modifique la declaración SQL.

Las declaraciones preparadas combinan la variable con la declaración SQL compilada, de modo que el SQL y las variables se envían por separado. Luego, las variables se interpretan como simples cadenas y no como parte de la declaración SQL. Usando los métodos en los pasos a continuación, no necesitará usar ninguna otra técnica de filtrado de inyección SQL como mysql_real_escape_string ().

Pasos

Parte 1 de 2: Comprensión de la inyección SQL

Paso 1. La inyección de SQL es un tipo de vulnerabilidad en aplicaciones que utilizan una base de datos SQL

La vulnerabilidad surge cuando se utiliza una entrada de usuario en una declaración SQL:

$ nombre = $ _GET ['nombre de usuario']; $ query = "SELECCIONAR contraseña DE tbl_user DONDE nombre = '$ nombre'";

Paso 2. El valor que un usuario ingresa en la variable URL nombre de usuario se asignará a la variable $ nombre

Luego se coloca directamente en la declaración SQL, lo que permite al usuario editar la declaración SQL.

$ nombre = "admin 'OR 1 = 1 -"; $ query = "SELECCIONAR contraseña DE tbl_user DONDE nombre = '$ nombre'";

Paso 3. La base de datos SQL recibirá la declaración SQL de la siguiente manera:

SELECCIONE la contraseña DE tbl_users DONDE nombre = 'admin' O 1 = 1 - '

  • Esto es SQL válido, pero en lugar de devolver una contraseña para el usuario, la declaración devolverá todas las contraseñas en la tabla tbl_user. Esto no es algo que desee en sus aplicaciones web.

    Parte 2 de 2: Uso de mySQLi para crear declaraciones preparadas

    2542820 1
    2542820 1

    Paso 1. Cree la consulta SELECT de mySQLi

    Use el siguiente código para SELECCIONAR datos de una tabla usando declaraciones preparadas de mySQLi.

    $ nombre = $ _GET ['nombre de usuario']; if ($ stmt = $ mysqli-> prepare ("SELECT password FROM tbl_users WHERE name =?")) {// Vincular una variable al parámetro como una cadena. $ stmt-> bind_param ("s", $ nombre); // Ejecuta la sentencia. $ stmt-> ejecutar (); // Obtiene las variables de la consulta. $ stmt-> bind_result ($ pase); // Obtener los datos. $ stmt-> fetch (); // Muestra los datos. printf ("La contraseña para el usuario% s es% s / n", $ nombre, $ contraseña); // Cierre la declaración preparada. $ stmt-> cerrar (); }

    Nota: La variable $ mysqli es el objeto de conexión mySQLi

    2542820 2
    2542820 2

    Paso 2. Cree la consulta INSERT de mySQLi

    Use el código siguiente para INSERTAR datos en una tabla usando declaraciones preparadas de mySQLi.

    $ nombre = $ _GET ['nombre de usuario']; $ contraseña = $ _GET ['contraseña']; if ($ stmt = $ mysqli-> prepare ("INSERT INTO tbl_users (nombre, contraseña) VALUES (?,?)")) {// Vincular las variables al parámetro como cadenas. $ stmt-> bind_param ("ss", $ nombre, $ contraseña); // Ejecuta la sentencia. $ stmt-> ejecutar (); // Cierre la declaración preparada. $ stmt-> cerrar (); }

    Nota: La variable $ mysqli es el objeto de conexión mySQLi

    2542820 3
    2542820 3

    Paso 3. Cree la consulta de ACTUALIZACIÓN de mySQLi

    Use el siguiente código para ACTUALIZAR los datos en una tabla usando declaraciones preparadas de mySQLi.

    $ nombre = $ _GET ['nombre de usuario']; $ contraseña = $ _GET ['contraseña']; if ($ stmt = $ mysqli-> prepare ("ACTUALIZAR tbl_users SET password =? WHERE name =?")) {// Vincular las variables al parámetro como cadenas. $ stmt-> bind_param ("ss", $ contraseña, $ nombre); // Ejecuta la sentencia. $ stmt-> ejecutar (); // Cierre la declaración preparada. $ stmt-> cerrar (); }

    Nota: La variable $ mysqli es el objeto de conexión mySQLi

    2542820 4
    2542820 4

    Paso 4. Cree la consulta DELETE de mySQLi

    El siguiente script muestra cómo ELIMINAR datos de una tabla usando declaraciones preparadas de mySQLi.

    $ nombre = $ _GET ['nombre de usuario']; $ contraseña = $ _GET ['contraseña']; if ($ stmt = $ mysqli-> prepare ("ELIMINAR DE tbl_users WHERE name =?")) {// Vincular la variable al parámetro como una cadena. $ stmt-> bind_param ("s", $ nombre); // Ejecuta la sentencia. $ stmt-> ejecutar (); // Cierre la declaración preparada. $ stmt-> cerrar (); }

Recomendado: