Protecție împotriva injectare sql în php
![Protecție la injecții sql pe php (injecție) Protecție împotriva injectare sql în php](https://webp.images-on-off.com/8/69/434x216_qkgc86tl62zgmhlm5y47.webp)
Buna ziua. Astăzi considerăm opțiunile deoarece poate fi pusă în aplicare de protecție împotriva SQL injection.
![Protecție la injecții SQL pe php (protecție) Protecție împotriva injectare sql în php](https://webp.images-on-off.com/8/69/434x216_vh8q9ilz6za5rqbqdd0h.webp)
În primul rând, să se ocupe cu întrebarea ce este un SQL-injectare. Cuvântul în sine injecție implică faptul că este introdus ceva străin undeva. De fapt, este. În cazul în care codul de pe PHP (sau o altă limbă), datele primite de la browser-ul introdus imediat în interogarea MySQL, fără tratare prealabilă, apoi în jos de scurgere. Acest lucru înseamnă că un atacator ar putea lua potențial în jos întregul tabel (dar se poate face mai mult și mai rău decât atât), chiar dacă a efectuat o interogare SELECT normală. Iată un exemplu:
Aceasta este, $ variabila de căutare, derivată din _GET $ cade imediat în interogare a bazei de date, iar atacatorul poate trece ceva de genul:
Aceasta este configurația standard a serverului MySQL (în care un separator între diferite cereri - aceasta este virgulă), și prin substituirea interogarea ar fi:
În primul rând, desigur, va alege tot ceea ce este în acest tabel cu câmp = 1 (deci pentru a executa o interogare SELECT), apoi masa este pur și simplu șters (desigur, dacă aveți drepturile bazei de date de utilizator, dar cele mai multe dintre ele lipsesc).
Atenție! Exemplul de mai sus - doar pentru scopuri educaționale, nu este necesar să-l folosească pentru rău intenționate.
Care sunt metodele? Protecție împotriva injectare sql PHP
Cel mai important lucru - să nu introducă variabila martor direct într-o interogare SQL. Cel mai bine este să-l treacă printr-un procesor special.
În cazul MySQL și PHP are două opțiuni. Mai întâi un pic mai în vârstă (ca să spunem așa „antediluviene“), iar celălalt un modern și orientat obiect. Alegerea metodei depinde de modul în care transferul de date MySQL. Dacă utilizați funcția mysql_query depășite - se va apropia de prima metodă, în cazul în care o clasă modernă și de încredere PHP DOP - al doilea.
Luați în considerare prima metodă de protecție sql PHP prin injecție mysql_query
Dacă utilizați în continuare toate funcțiile vechi mysql_connect, mysql_select_db și mysql_query, ajutorul în funcție de protecție împotriva formă de injecție sql: mysql_real_escape_string.
Esența acestei funcții este activă în concluzie automată a variabilei transmise în ghilimele. S-ar părea că atât de greu, dar de cele mai multe cereri în care această funcție este utilizată pentru a proteja cu succes de injecție SQL. Într-un caz extrem, interogarea are ca rezultat o eroare pe serverul de baze de date, dar apar schimbări catastrofale.
Luați în considerare exemplul nostru:
În final totul va fi bine. Interogarea MySQL va următorul cod:
A doua metodă: protecția împotriva injectare sql PHP și DOP
DOP - un built-in clasa PHP, care oferă o conexiune modernă la baza de date, abordarea orientată pe obiecte și protecție integrată de preparate injectabile.
DOP are o funcție integrată din pregăti, se pregătește o cerere de punere în aplicare, având în vedere parametrii estimați și executarea funcției, pe care o puteți trece parametri la interogare.
Luați în considerare următorul exemplu:
Cred că din cod și totul este clar, dar voi explica.
În primul rând, vom crea o interogare împotriva bazei de date (atâta timp cât este doar obiect în PHP) - $ PreparedStatement. Când creați (folosind pregăti), am subliniat faptul că cererea va fi implicat un singur parametru: coloană (parametru poate fi orice număr, dar este important ca declararea acestor parametri în interogare începe cu două puncte.
Apoi vom efectua cererea, care trece o serie de parametri pentru a substitui în interogare cu funcția executa. În acest caz, toate variabilele sunt trecute la interogarea cu funcții Execută automat protejate împotriva SQL injection.
În general vorbind, în cazul în care versiunea PHP permite utilizarea de DOP nu este doar mai sigură, dar, de asemenea, mult mai convenabil din punct de vedere al codului, și mai rapid în termeni de interogare (au un mecanism încorporat pentru a lucra cu tranzacții, interogări, și multe altele). Dar utilizarea DOP în următoarele ediții.
Vă mulțumesc pentru atenție, sper că aceste exemple vă va ajuta cu protecție de la injecții SQL de pe site-urile dumneavoastră.
Sunt sigur că această informație expert în techpixel.com. și aplicate cu succes pentru a proteja împotriva SQL Injection în proiectele lor pe site.
- interogare MySQL cu suma în WHERE
- MySQL se alăture
- Introducerea înregistrărilor în MySQL ... ocolirea