itholoinfo.com.com

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

Acest articol vă va învăța cum să evitați atacurile de tip SQL folosind instrucțiunile pregătite de PHP. Injecția SQL este una dintre cele mai frecvente tipuri de vulnerabilități întâlnite în aplicațiile Web de astăzi, dar instrucțiunile pregătite utilizează parametri care nu se potrivesc cu variabilele cu șiruri SQL, ceea ce face imposibil ca atacatorul să modifice instrucțiunea SQL.

Instrucțiunile pregătite combină variabilele cu instrucțiunea SQL precompilată, iar acest lucru face ca codul SQL și variabilele să fie trimise separat. Apoi, variabilele sunt interpretate ca simple șiruri, nu ca parte a instrucțiunii SQL. Folosind metodele de mai jos, nu va trebui să folosiți alte tehnici de filtrare a atacurilor SQL, cum ar fi mysql_real_escape_string ().

pași

Partea 1
Înțelegerea unei injecții SQL

  1. 1
    O injecție SQL este un tip de vulnerabilitate exploatat în aplicațiile care utilizează o bază de date SQL. Vulnerabilitatea apare atunci când o intrare de utilizator este folosită într-o instrucțiune SQL:
    $ nume = $ _GET [`username`] - $ query = "SELECT parola din tbl_user WHERE nume = `$ name`" -
  2. 2
    Ce tip scrie utilizatorul în variabila URL Nume de utilizator va fi atribuită variabilei $ nume. Apoi este folosit direct în instrucțiunea SQL, permițând utilizatorului să modifice declarația.
    $ name = "admin" SAU 1 = 1 - "- $ query =" SELECT parola FROM tbl_user WHERE nume = `$ name` "-
  3. 3
    Astfel, baza de date SQL va primi instrucțiunea după cum urmează:
    SELECT parola din tbl_users WHERE nume = `admin` SAU 1 = 1 - `
    • Acesta este codul SQL valid, dar în loc să returneze parola unui utilizator, această declarație va returna parola tuturor parolelor din tabel tbl_user. Cu siguranță, nu veți dori acest tip de vulnerabilitate în programele dvs.

Partea 2
Folosind mySQLi pentru a crea declarații pregătite

Imaginea intitulată 2542820 1
1
Creați o cerere SELECT în MySQLi.
Utilizați codul de mai jos pentru a selecta (SELECT) datele dintr-o tabelă folosind instrucțiunile pregătite de la mySQLi.



$ Nume = $ _GET [ `username`] - în cazul în care ($ STMT = $ mysqli-> pregăti ( "SELECT FROM tbl_users parola WHERE name =")) {// Ia parametrul ca un șir de caractere variabilă. stmt- $> bind_param ( "s", nume $). - // executa instrucțiunea $ stmt-> execute () - // extragem variabilele de cerere $ stmt-> bind_result ($ pass) -. // Preluați $ stmt-> fetch () - // Afișează data.printf ("Parola pentru utilizator% s este% s n", $ name, $ pass) - // Close statement prepared $ stmt-> close () -}


  • Notă: variabila $ mysqli este obiectul de conectare mySQLi.
  • Imaginea intitulată 2542820 2
    2
    Crearea unei cereri INSERT în MySQLi. Utilizați codul de mai jos pentru a insera (INSERT) datele în tabel folosind instrucțiunile pregătite de la mySQLi.

    $ Nume = $ _GET [ `username`] - $ parola = $ _GET [ `parola`] - în cazul în care ($ STMT = $ mysqli-> pregăti () "INSERT INTO tbl_users (nume, parola) VALORI (,)?" ) {// Legați variabilele parametrului ca șiruri de caractere. $ Stmt-> bind_param ( "ss", numele $, $ parola) - // executa instrucțiunea stmt- $> execute (). - // Închideți declarația pregătită $ stmt-> close () -.}


    • Notă: variabila $ mysqli este obiectul de conectare mySQLi.
  • Imaginea intitulată 2542820 3
    3
    Crearea unei solicitări UPDATE în MySQLi. Utilizați codul de mai jos pentru a actualiza (UPDATE) datele dintr-un tabel folosind instrucțiunile pregătite de la mySQLi.

    $ nume = $ _GET [`username`] - $ password = $ _GET [`parola`] - if ($ stmt = $ mysqli-> prepare ("UPDATE tbl_users SET password = Se potrivesc variabilele cu parametrul ca siruri de caractere. $ Stmt-> bind_param ( "ss", $ parola, numele $) - // executa instrucțiunea stmt- $> execute (). - // Închideți declarația pregătită $ stmt-> close () -.}

    • Notă: variabila $ mysqli este obiectul de conectare al mySQLi.
  • Imaginea intitulată 2542820 4
    4
    Crearea unei cereri DELETE în MySQLi. Utilizați scriptul de mai jos pentru a șterge (DELETE) datele dintr-o tabelă folosind instrucțiunile pregătite de la mySQLi.

    $ Nume = $ _GET [ `username`] - $ parola = $ _GET [ `parola`] - în cazul în care ($ STMT = $ mysqli-> prepare () "șterge din tbl_users unde nume =?") {// Ia variabila la parametru ca șir. $ stmt-> bind_param ("s", $ name) - // Executați instrucțiunea $ 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 apelează funcțiile PHPCum se creează și se apelează funcțiile PHP
    Cum se scrie Script-uri PHPCum se scrie Script-uri PHP
    Cum se instalează SDK-ul Qt pe WindowsCum se instalează SDK-ul Qt pe Windows
    Cum să preveni atacurile CSRF în PHPCum să preveni atacurile CSRF în PHP
    Cum se programează în VBScriptCum se programează în VBScript
    Cum se administrează o injecțieCum se administrează o injecție
    Cum se rezolvă ecuațiile cu variabile bidirecționaleCum se rezolvă ecuațiile cu variabile bidirecționale
    Cum să găsiți înălțimea unui triunghiCum să găsiți înălțimea unui triunghi
    Cum se combină termeni similariCum se combină termeni similari
    Cum de a desena graficaCum de a desena grafica
    » » Cum de a evita o injecție SQL în PHP
    © 2021 itholoinfo.com.com