Cum să preveniți injecția SQL în PHP (cu imagini)

Cuprins:

Cum să preveniți injecția SQL în PHP (cu imagini)
Cum să preveniți injecția SQL în PHP (cu imagini)

Video: Cum să preveniți injecția SQL în PHP (cu imagini)

Video: Cum să preveniți injecția SQL în PHP (cu imagini)
Video: Copil de 13 ani cere foc sa fumeze | Experiment Social 2024, Mai
Anonim

Acest wikiHow vă învață cum să preveniți injecția SQL folosind Instrucțiuni pregătite în PHP. Injecția SQL este una dintre cele mai frecvente vulnerabilități în aplicațiile Web de astăzi. Instrucțiunile pregătite folosesc parametri legați și nu combină variabile cu șiruri SQL, ceea ce face imposibil pentru un atacator să modifice instrucțiunea SQL.

Instrucțiunile pregătite combină variabila cu instrucțiunea SQL compilată, astfel încât SQL și variabilele să fie trimise separat. Variabilele sunt apoi interpretate ca simple șiruri și nu fac parte din instrucțiunea SQL. Folosind metodele din pașii de mai jos, nu va trebui să utilizați alte tehnici de filtrare prin injecție SQL, cum ar fi mysql_real_escape_string ().

Pași

Partea 1 din 2: Înțelegerea injecției SQL

Pasul 1. Injecția SQL este un tip de vulnerabilitate în aplicațiile care utilizează o bază de date SQL

Vulnerabilitatea apare atunci când o intrare de utilizator este utilizată într-o instrucțiune SQL:

$ nume = $ _GET ['nume de utilizator']; $ query = "SELECTARE PAROLĂ DIN tbl_user WHERE nume = '$ nume'";

Pasul 2. Valoarea introdusă de un utilizator în numele de utilizator al variabilei URL va fi atribuită variabilei $ name

Apoi este plasat direct în instrucțiunea SQL, făcând posibil ca utilizatorul să editeze instrucțiunea SQL.

$ nume = "administrator 'SAU 1 = 1 -"; $ query = "SELECTARE PAROLĂ DIN tbl_user WHERE nume = '$ nume'";

Pasul 3. Baza de date SQL va primi apoi instrucțiunea SQL după cum urmează:

ALEGEȚI parola DE LA tbl_users WHERE nume = 'admin' SAU 1 = 1 - '

  • Acesta este SQL valid, dar în loc să returneze o parolă pentru utilizator, instrucțiunea va returna toate parolele din tabelul tbl_user. Acest lucru nu este ceva ce doriți în aplicațiile dvs. web.

    Partea 2 din 2: Utilizarea mySQLi pentru a crea declarații pregătite

    2542820 1
    2542820 1

    Pasul 1. Creați interogarea mySQLi SELECT

    Utilizați codul de mai jos pentru a SELEGE datele dintr-un tabel folosind instrucțiunile pregătite mySQLi.

    $ nume = $ _GET ['nume de utilizator']; if ($ stmt = $ mysqli-> prepare ("SELECT parola FROM tbl_users WHERE name =?")) {// Legați o variabilă la parametru ca un șir. $ stmt-> bind_param ("s", $ nume); // Executați instrucțiunea. $ stmt-> execute (); // Obțineți variabilele din interogare. $ stmt-> bind_result ($ pass); // Aduceți datele. $ stmt-> fetch (); // Afișați datele. printf ("Parola pentru utilizatorul% s este% s / n", $ name, $ pass); // Închideți declarația pregătită. $ stmt-> close (); }

    Notă: Variabila $ mysqli este obiectul de conexiune mySQLi

    2542820 2
    2542820 2

    Pasul 2. Creați interogarea mySQLi INSERT

    Utilizați codul de mai jos pentru a INSERA datele într-un tabel folosind declarațiile pregătite mySQLi.

    $ nume = $ _GET ['nume de utilizator']; $ parola = $ _GET ['parola']; if ($ stmt = $ mysqli-> prepare ("INSERT INTO tbl_users (name, password) VALUES (?,?)")) {// Legați variabilele la parametru ca șiruri. $ stmt-> bind_param ("ss", $ nume, $ parolă); // Executați instrucțiunea. $ stmt-> execute (); // Închideți declarația pregătită. $ stmt-> close (); }

    Notă: Variabila $ mysqli este obiectul de conexiune mySQLi

    2542820 3
    2542820 3

    Pasul 3. Creați interogarea mySQLi UPDATE

    Utilizați codul de mai jos pentru a ACTUALIZA datele într-un tabel utilizând declarațiile pregătite mySQLi.

    $ nume = $ _GET ['nume de utilizator']; $ parolă = $ _GET ['parolă']; if ($ stmt = $ mysqli-> prepare ("UPDATE tbl_users SET password =? WHERE name =?")) {// Legați variabilele la parametru ca șiruri. $ stmt-> bind_param ("ss", $ parolă, $ nume); // Executați instrucțiunea. $ stmt-> execute (); // Închideți declarația pregătită. $ stmt-> close (); }

    Notă: Variabila $ mysqli este obiectul de conexiune mySQLi

    2542820 4
    2542820 4

    Pasul 4. Creați interogarea mySQLi DELETE

    Scriptul de mai jos este modul de ȘTERGERE a datelor dintr-un tabel folosind instrucțiunile pregătite mySQLi.

    $ nume = $ _GET ['nume de utilizator']; $ parolă = $ _GET ['parolă']; if ($ stmt = $ mysqli-> prepare ("DELETE FROM tbl_users WHERE name =?")) {// Legați variabila de parametru ca un șir. $ stmt-> bind_param ("s", $ nume); // Executați instrucțiunea. $ stmt-> execute (); // Închideți declarația pregătită. $ stmt-> close (); }

Recomandat: