Com evitar la injecció SQL en PHP (amb imatges)

Taula de continguts:

Com evitar la injecció SQL en PHP (amb imatges)
Com evitar la injecció SQL en PHP (amb imatges)

Vídeo: Com evitar la injecció SQL en PHP (amb imatges)

Vídeo: Com evitar la injecció SQL en PHP (amb imatges)
Vídeo: La tabla de multiplicar del 3 | Vídeos Educativos para Niños 2024, Maig
Anonim

Aquest wikiHow us ensenya a prevenir la injecció SQL mitjançant instruccions preparades en PHP. La injecció SQL és una de les vulnerabilitats més habituals a les aplicacions web actuals. Les instruccions preparades fan servir paràmetres lligats i no combinen variables amb cadenes SQL, cosa que fa impossible que un atacant modifiqui la sentència SQL.

Les instruccions preparades combinen la variable amb la sentència SQL compilada, de manera que l'SQL i les variables s'envien per separat. Les variables s'interpreten llavors com a simples cadenes i no formen part de la sentència SQL. Mitjançant els mètodes dels passos següents, no cal que utilitzeu cap altra tècnica de filtratge d'injecció SQL, com ara mysql_real_escape_string ().

Passos

Part 1 de 2: Comprensió de la injecció SQL

Pas 1. La injecció SQL és un tipus de vulnerabilitat en les aplicacions que utilitzen una base de dades SQL

La vulnerabilitat sorgeix quan s'utilitza una entrada d'usuari en una sentència SQL:

$ name = $ _GET ['nom d'usuari']; $ query = "SELECCIÓ de contrasenya FROM tbl_user WHERE name = '$ name'";

Pas 2. El valor que un usuari introdueix al nom d'usuari de la variable URL s'assignarà a la variable $ name

A continuació, es col·loca directament a la sentència SQL, cosa que permet a l'usuari editar la sentència SQL.

$ name = "admin 'OR 1 = 1 -"; $ query = "SELECCIÓ de contrasenya FROM tbl_user WHERE name = '$ name'";

Pas 3. La base de dades SQL rebrà la sentència SQL de la següent manera:

SELECCIONA la contrasenya DE tbl_users WHERE nom = "administrador" O 1 = 1 -"

  • Això és SQL vàlid, però en lloc de retornar una contrasenya per a l'usuari, la sentència retornarà totes les contrasenyes de la taula tbl_user. Això no és el que vulgueu a les vostres aplicacions web.

    Part 2 de 2: Ús de mySQLi per crear sentències preparades

    2542820 1
    2542820 1

    Pas 1. Creeu la consulta mySQLi SELECT

    Utilitzeu el codi següent per SELECCIONAR dades d’una taula amb instruccions preparades de mySQLi.

    $ name = $ _GET ['nom d'usuari']; if ($ stmt = $ mysqli-> prepare ("SELECCIONA la contrasenya DE tbl_users WHERE nom =?")) {// Enllaça una variable al paràmetre com una cadena. $ stmt-> bind_param ("s", $ nom); // Executeu la sentència. $ stmt-> execute (); // Obteniu les variables de la consulta. $ stmt-> bind_result ($ pass); // Recupereu les dades. $ stmt-> fetch (); // Mostra les dades. printf ("La contrasenya per a l'usuari% s és% s / n", $ name, $ pass); // Tanca la declaració preparada. $ stmt-> close (); }

    Nota: La variable $ mysqli és l'objecte de connexió mySQLi

    2542820 2
    2542820 2

    Pas 2. Creeu la consulta INSERT mySQLi

    Utilitzeu el codi següent per INSERTAR dades en una taula amb instruccions preparades de mySQLi.

    $ name = $ _GET ['nom d'usuari']; $ contrasenya = $ _GET ['contrasenya']; if ($ stmt = $ mysqli-> prepare ("INSERT INTO tbl_users (name, password) VALUES (?,?)")) {// Enllaça les variables al paràmetre com a cadenes. $ stmt-> bind_param ("ss", $ nom, $ contrasenya); // Executeu la sentència. $ stmt-> execute (); // Tanca la declaració preparada. $ stmt-> close (); }

    Nota: La variable $ mysqli és l'objecte de connexió mySQLi

    2542820 3
    2542820 3

    Pas 3. Creeu la consulta d'actualització mySQLi

    Utilitzeu el codi següent per ACTUALITZAR les dades d’una taula amb instruccions preparades de mySQLi.

    $ name = $ _GET ['nom d'usuari']; $ contrasenya = $ _GET ['contrasenya']; if ($ stmt = $ mysqli-> prepare ("UPDATE tbl_users SET password =? WHERE name =?")) {// Enllaça les variables al paràmetre com a cadenes. $ stmt-> bind_param ("ss", $ contrasenya, $ nom); // Executeu la sentència. $ stmt-> execute (); // Tanqueu la declaració preparada. $ stmt-> close (); }

    Nota: La variable $ mysqli és l'objecte de connexió mySQLi

    2542820 4
    2542820 4

    Pas 4. Creeu la consulta mySQLi DELETE

    A continuació, es mostra com esborrar dades d'una taula mitjançant instruccions preparades per mySQLi.

    $ name = $ _GET ['nom d'usuari']; $ contrasenya = $ _GET ['contrasenya']; if ($ stmt = $ mysqli-> prepare ("ELIMINA DE tbl_users WHERE nom =?")) {// Enllaça la variable al paràmetre com una cadena. $ stmt-> bind_param ("s", $ nom); // Executeu la sentència. $ stmt-> execute (); // Tanqueu la declaració preparada. $ stmt-> close (); }

Recomanat: