Cum de a evita o injecție SQL în PHP

Cu acest ghid wikiHow veți învăța cum să evitați o injecție SQL folosind propoziții pregătite în PHP. În zilele noastre, injecțiile SQL sunt una dintre cele mai frecvente vulnerabilități ale aplicațiilor web. Instrucțiunile Ready folosesc parametrii corelați și nu combină variabilele cu șiruri SQL, ceea ce face imposibil ca un atacator să modifice o instrucțiune SQL.

Instrucțiunile pregătite combină variabilele cu instrucțiunile SQL compilate. În acest fel, instrucțiunile SQL și variabilele sunt trimise separat. Variabilele sunt apoi interpretate ca șiruri simple și nu ca parte a unei instrucțiuni SQL. Dacă se aplică metodele din etapele explicate mai jos, nu este necesar să folosiți orice alt tip de tehnică de filtrare prin injecție SQL, cum ar fi mysql_real_escape_string ().

pași

Partea 1
Înțelegeți ce este injecția SQL

1
Injecția SQL este un tip de vulnerabilitate în aplicațiile care utilizează o bază de date SQL. Vulnerabilitățile apar atunci când intrările unui utilizator sunt folosite într-o instrucțiune SQL.
$ name = $ _GET [`nume de utilizator`] - $ query = "SELECT parola din tbl_user WHERE nume = `$ name` "-
  • 2
    Valoarea pe care utilizatorul o introduce în variabila URL Nume de utilizator este atribuită variabilei $ nume. Apoi este plasat direct în instrucțiunea SQL, făcând astfel utilizatorului posibilitatea de a edita instrucțiunea SQL.
    $ name = "admin `OR 1 = 1 - "- $ query = "SELECT parola din tbl_user WHERE nume = `$ name` "-
  • 3
    Ca o consecință, baza de date SQL va primi următoarea instrucțiune SQL:
    SELECT parola din tbl_users WHERE nume = `admin` SAU 1 = 1 - `
  • Aceasta este o instrucțiune SQL validă, dar în loc să returneze o parolă pentru utilizator, instruciunea returnează toate parolele din tabel tbl_user. Nimeni nu vrea ca acest lucru să vi se întâmple în aplicația dvs. web.
  • Partea 2
    Utilizați mySQLi pentru a crea declarații pregătite

    Imagine cu denumirea 2542820 1
    1


    Creați o interogare SELECT cu mySQLi.
    Utilizați codul de mai jos pentru a selecta (SELECT) datele dintr-o tabelă folosind o instrucțiune pregătită cu mySQLi.

    $ nume = $ _GET [`username`] - dacă ($ stmt = $ mysqli->pregăti ("SELECTARE parolă FROM tbl_users WHERE name =?")) {// Alăturați-vă unei variabile cu parametrul ca șir $ stmt->bind_param ("s", $ name) - // Executați propoziția $ stmt->execute () - // Obțineți variabilele interogării $ stmt->bind_result ($ pass) - // Găsiți datele $ stmt->fetch () - // Afișează dataprintf ("Parola utilizatorului% s este% s n", $ name, $ pass) - // Închideți instrucțiunea pregătită $ stmt->close () -}


    • Notă: variabila $ mysqli este obiectul de conectare al mySQLi.
  • Imaginea intitulată 2542820 2
    2
    Creați o interogare INSERT cu MySQLi. Utilizați codul de mai jos pentru a insera datele (INSERT) într-un tabel folosind instrucțiunile pregătite cu mySQLi.

    $ nume = $ _GET [`username`] - $ password = $ _GET [`parola`] - if ($ stmt = $ mysqli->pregăti ("INSERTAȚI ÎN tbl_users (nume, parolă) VALUES (?,?)")) {// Legați variabilele la parametru ca șiruri de caractere $ stmt->bind_param ("ss", $ name, $ password) - // Executați propoziția $ stmt->execute () - // Închideți instrucțiunea pregătită $ stmt->close () -}


  • Notă: variabila $ mysqli este obiectul de conectare al mySQLi.
  • Imaginea intitulată 2542820 3
    3
    Creați o interogare UPDATE cu mySQLi. Utilizați codul de mai jos pentru a actualiza datele (UPDATE) ale unei tabele folosind instrucțiunile pregătite cu mySQLi.

    $ nume = $ _GET [`username`] - $ password = $ _GET [`parola`] - if ($ stmt = $ mysqli->pregăti ("UPDATE tbl_users SET parola =? WHERE nume =?")) {// Legați variabilele la parametru ca șiruri de caractere $ stmt->bind_param ("ss", $ password, $ name) - // Executa teza $ stmt->execute () - // Închideți instrucțiunea pregătită $ stmt->close () -}

  • Notă: variabila $ mysqli este obiectul de conectare al mySQLi.
  • Imaginea intitulată 2542820 4
    4
    Creați o interogare DELETE cu mySQLi. Codul de mai jos arată cum să ștergeți (DELETE) datele dintr-o tabelă folosind instrucțiunile pregătite cu mySQLi.

    $ nume = $ _GET [`username`] - $ password = $ _GET [`parola`] - if ($ stmt = $ mysqli->pregăti ("Șterge din tbl_users WHERE name =?")) {// Alăturați-vă unei variabile cu parametrul ca șir $ stmt->bind_param ("s", $ name) - // Executați propoziția $ stmt->execute () - // Închideți instrucțiunea pregătită $ stmt->close () -}


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

    înrudit
    Cum se creează și se invocă funcții în PHPCum se creează și se invocă funcții în PHP
    Cum să înțelegeți programarea orientată pe obiecteCum să înțelegeți programarea orientată pe obiecte
    Cum se scrie un program în Java pentru a calcula mediaCum se scrie un program în Java pentru a calcula media
    Cum se face un cub în OpenGLCum se face un cub în OpenGL
    Cum se face un script PHPCum se face un script PHP
    Cum se instalează Qt SDK în Microsoft WindowsCum se instalează Qt SDK în Microsoft Windows
    Cum se introduc datele în SPSSCum se introduc datele în SPSS
    Cum sa faci o banda de cap de hippieCum sa faci o banda de cap de hippie
    Cum să aplicați o injecție intramuscularăCum să aplicați o injecție intramusculară
    Cum se aplică o injecție B12Cum se aplică o injecție B12
    » » Cum de a evita o injecție SQL în PHP

    © 2011—2020 ertare.com