Elleni védelem sql injekció php

Hello. Ma tartjuk a lehetőséget, mert lehet végrehajtani elleni védelem SQL injection.

Először is nézzük foglalkozik azzal a kérdéssel, ami egy SQL-injection. Maga a szó azt jelenti, hogy valami injekciót külföldi vezetünk valahol. Sőt, ez az. Ha a kód PHP (vagy más nyelven) kapott adatokat a böngésző azonnal behelyezzük a MySQL lekérdezés, előkezelés nélkül, majd a lefolyóba. Ez azt jelenti, hogy a támadó esetleg vegye le az egész táblát (de lehet, hogy többet és ami még rosszabb), még akkor is, ha végzett egy normális lekérdezés SELECT. Itt egy példa:
Vagyis a változó $ kereső, nyert a $ _GET azonnal beleesik a lekérdezést az adatbázisnak, és a támadó is eltelhet, valami ilyesmit:
Ez a standard konfigurációt a MySQL szerver (amelyben egy elválasztó különböző kérelmek között - ez a pontosvessző), és helyettesítjük a lekérdezés lenne:
Először is, persze, majd válassza ki az összes, hogy ebben az asztal mező = 1 (azaz, hogy végre egy SELECT lekérdezés), majd az asztal egyszerűen hagyni (persze, ha van a jogokat a felhasználói adatbázis, de a legtöbbjük hiányzik).
Figyelem! A fenti példa - az oktatási célokat szolgál, nem szükséges, hogy használja azt a rossz szándékú.
Mik a módszerek? Elleni védelem sql PHP injekció
A legfontosabb dolog - ne illesszék üres változót közvetlenül egy SQL lekérdezés. A legjobb, hogy adja át egy speciális processzor.
Abban az esetben, MySQL és a PHP két lehetősége van. Először egy kicsit idősebb (úgymond „aggastyán”), a másik egy modern és objektumorientált. A választott módszer attól függ, hogyan adatátvitel MySQL. Ha elavult funkció mysql_query - meg fogja közelíteni az első módszer, ha egy modern és megbízható PHP PDO osztály - második.
Vegyük az első védelmi módszer sql PHP injekció útján mysql_query
Ha még mindig használja a régi funkciók mysql_connect, mysql_select_db és mysql_query, a támogatás elleni védelem SQL injection fit funkció: mysql_real_escape_string.
Ennek lényege, hogy a funkció aktív automatikus lezárása a továbbított változó idézetek. Úgy tűnik, hogy annyira kemény, de a legtöbb a kéréseket, amelyek ezt a funkciót használják sikerrel védve SQL injection. Szélsőséges esetben, a lekérdezés hibát eredményez: az adatbázis szerver, de a katasztrofális változások történnek.
Tekintsük a példát:
A végén minden rendben lesz. A lekérdezés a MySQL a következő kódot:
A második módszer: elleni védelem sql PHP-befecskendezés és OEM
PDO - beépített PHP osztályt, ami egy modern kapcsolatot az adatbázis, objektum-orientált megközelítés és a beépített védelmet az injekciót.
Az OEM van egy beépített függvény az előkészítése, készül egy kérést végrehajtani, tekintettel a becsült paraméterek és az execute funkció, amelynek segítségével paramétereket adnak át a lekérdezést.
Tekintsük a következő példát:
Azt hiszem, a kódot, és minden világos, de nem fogom elmagyarázni.
Először létrehozunk egy lekérdezést az adatbázisból (mindaddig, amíg ez az egyetlen tárgy, PHP) - $ PreparedStatement. Létrehozásakor (a készít), akkor rámutatott, hogy a kérelmet az érintett az egyik paraméter: oszlop (paraméter bármennyi lehet, de fontos, hogy a nyilatkozat ezeket a paramétereket a lekérdezés kezdődik vastagbélben.
Ezután elvégezzük a kérést, múló tömb paraméter helyettesítheti a lekérdezés a végrehajtani a függvényt. Ebben az esetben az összes változó kerülnek az lekérdezés funkció automatikusan végrehajtásra védeni SQL injection.
Általánosságban elmondható, hogy ha a PHP verzió lehetővé teszi a használatát OEM nem csak biztonságosabb, hanem sokkal kényelmesebb a szempontból a kódot, és gyorsabb szempontjából lekérdezés (van egy beépített mechanizmus dolgozni tranzakciók, lekérdezések és még sokan mások). De használja az OEM a következő kiadásokban.
Köszönöm a figyelmet, remélem, ezek a példák segítségével, amelyek védelmet nyújtanak az SQL injekció webhelyeken.
Biztos vagyok benne, hogy ezt az információt jártas techpixel.com. és sikeresen alkalmazzák, hogy megvédje SQL injekció a projektek a helyszínen.
- MySQL lekérdezés az összeg a WHERE
- MySQL csatlakozzon
- Behelyezése bejegyzések MySQL kiiktatás ...