Împiedicați injectarea SQL în PHP

În acest wikiCum vă vom arăta cum să evitați injectările SQL cu instrucțiuni pregătite în PHP. Injecțiile SQL sunt cele mai frecvente vulnerabilități din aplicațiile web de astăzi. Declarații preparate utilizează parametri legați și combină toate variabilele cu siruri de caractere SQL, ceea ce face imposibil pentru un atacator pentru a modifica 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, mai degrabă decât ca parte a instrucțiunii SQL. Folosind pașii de mai jos, nu trebuie să utilizați alte tehnici de filtrare pentru SQL Injections, cum ar fi mysql_real_escape_string ().

metodă

Partea 1
Înțelegerea injecțiilor SQL

  1. 1
    Injecțiile SQL sunt o vulnerabilitate în aplicațiile care utilizează o bază de date SQL. Vulnerabilitatea apare când intrarea utilizatorului este utilizată într-o declarație SQL:
    $ Nume = $ _ GET [ `username`] - $ query = "SELECT parola de la tbl_user WHERE nume = `$ nume`" -
  2. 2
    Valoarea pe care un utilizator o introduce în variabila URL Nume de utilizator intră, devine variabila numele $ alocate. Acesta este apoi plasat direct în instrucțiunea SQL, permițând utilizatorului să schimbe instrucțiunea SQL.
    $ Nume = `admin` OR 1 = 1 - "- $ query =" SELECT parola de la tbl_user WHERE nume = `$ nume` „-
  3. 3
    Baza de date SQL primește apoi instrucțiunea SQL după cum urmează:
    SELECT parola din tbl_users WHERE nume = `admin` SAU 1 = 1 - `
    • Acesta este un SQL valid, dar în loc să returneze o parolă pentru utilizator, instruciunea returnează toate parolele din tabel tbl_user înapoi. Acest lucru nu este ceva ce doriți în aplicațiile dvs. web.

Partea 2
Creați declarații pregătite cu MySQLi

Imagine cu denumirea 2542820 1
1
Creați interogarea mySQLi SELECT.
Utilizați codul de mai jos pentru a selecta datele dintr-o tabelă utilizând instrucțiunile pregătite de MySQLi.



$ Nume = $ _ GET [ `username`] - în cazul în care ($ STMT = $ mysqli-> pregăti ( "SELECT parola de la tbl_users WHERE nume =?")) {Conectați o variabilă cu parametrul ca un șir de caractere //. $ Stmt-> bind_param ( "s", nume $) - // executa instrucțiunea $ stmt-> execute () - .. // Variabilele sunt legate de interogare $ stmt-> bind_result ($ pass) - // Date Obțineți $ stmt-> fetch (). - // anzeigen.printf date ( "parola utilizatorului% s% s n", numele $, $ pass) -. închide declaratie // $ stmt-> close ( ) -}


  • Notă: variabila $ mysqli este obiectul de conectare mySQLi.
  • Imaginea intitulată 2542820 2
    2
    Creați interogarea mySQLI INSERT. Utilizați codul de mai jos pentru a insera datele într-o tabelă utilizând instrucțiunile pregătite de mySQLi.

    $ Nume = $ _ GET [ `username`] - $ parola = $ _ GET [ `parola`] - în cazul în care ($ STMT = $ mysqli-> pregăti ( "INSERT INTO tbl_users (nume,) VALORI parola (,)?") ) {// conectarea unei variabile la parametru ca șir. $ Stmt-> bind_param ( "ss", numele $, $ parola) - // executa instrucțiunea $ stmt-> execute (). - // Închide declaratie $ stmt-> close () -.}


    • Notă: variabila $ mysqli este obiectul de conectare mySQLi.
  • Imaginea intitulată 2542820 3
    3
    Creați interogarea mySQLi UPDATE. Utilizați codul de mai jos pentru a actualiza datele dintr-un tabel cu declarațiile pregătite de MySQLi.

    $ Nume = $ _ GET [ `username`] - $ parola = $ _ GET [ `parola`] - în cazul în care ($ STMT = $ mysqli-> pregăti () "? Tbl_users UPDATE SET parola = UNDE name =") {// Conectați o variabilă la parametru ca un șir. $ Stmt-> bind_param ( "ss", $ parola, numele $) - // executa instrucțiunea $ stmt-> execute (). - // statement preparat includ $ stmt-> close () -.}

    • Notă: variabila $ mysqli este obiectul de conectare mySQLi.
  • Imaginea intitulată 2542820 4
    4
    Creați interogarea mySQLi DELETE. Scriptul de mai jos prezintă modul de utilizare a declarațiilor pregătite de MySQLi pentru a șterge datele dintr-o tabelă.

    $ Nume = $ _ GET [ `username`] - $ parola = $ _ GET [ `parola`] - în cazul în care ( "? DELETE FROM tbl_users WHERE name =" $ STMT = $ mysqli-> pregăti ()) {// Conectați-vă la o variabilă cu parametrul ca un șir. $ Stmt-> bind_param ( "s", nume $) - // executa instrucțiunea $ stmt-> execute (). - // statement preparat includ $ stmt-> close () -.}


    • Notă: variabila $ mysqli este obiectul de conectare mySQLi.
  • Distribuiți pe rețelele sociale:

    înrudit