SQL injekció, mind a kezdő hacker ingyenes programok hackelés, video tutorials
SQL injection - ez az egyik legolcsóbb módja, hogy csapkod a helyszínen.
A lényeg az ilyen injekciók - bevezetése adatok (átutalásra GET, POST kérések vagy cookie-értékek) tetszőleges SQL kód. Ha egy webhely sebezhető és végre ilyen injekciót, Valójában lehetséges, hogy egy adatbázis létrehozása (leggyakrabban MySQL) semmit.
Hogyan számítható ki a biztonsági rést, amely lehetővé teszi, hogy vezessenek be SQL injection?
Változás a GET kérést az? Detail = 1 \ „vagy? Részlet = 1 " Ezután próbálja átadni azokat a kéréseket a szerver, azaz megy test.ru/? Részlet = 1 \" vagy natest.ru /? Részletes = 1 \" .
Ha a hiba jelenik meg a belépési oldal adatait, a webhely sebezhető SQL injekció.
Példa felmerülő hibák a sérülékenység ellenőrzés
Gyakorlat. Options hacker honlapon sebezhetőség az SQL injekciós
Tehát, már említettük a helyszínen test.ru. Az adatbázis tárolja 4 hírek, ebből 3 jelenik meg. Engedélyt kiadni hírek függ parmetra nyilvános (ha a paraméter tartalmazza az 1 értéket, majd a hír megjelent).
Tesztek az alábbi lehetőségek közül:
test.ru/?detail=4+OR+1
test.ru/?detail=4+-
test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4
A végén, a szerencse és két kérelmet (első és harmadik) visszatért hozzánk egy részletes leírást a negyedik hírek
Elemzés a belsejében példa
A részletes leírást a hír reagál blokk kód:
$ Detail_id = $ _ GET [\ 'részlet \'];
$ Zapros = "SELECT * FROM` $ table_news` WHERE` public` = \ '1 \' AND` id` = $ detail_id ORDER BY `position` DESC";
Sőt, van beállítva, hogy $ detail_id kezelés nélkül, így is építeni `id` = $ detail_id írt görbe, akkor jobb, ha kibír to` id` = \„$ detail_id \”(vagyis az összehasonlítási értéket kell írni egyenes aposztróf).
Keresi a kérésére kapott belépni az oldalra keresztül test.ru/?detail=4+OR+1
SELECT * FROM `news` WHERE` public` = \ '1 \' AND` id` = 4 vagy 1 ORDER BY` position` DESC
Ez teljesen világossá válik, hogy miért megjelenítéséhez 4. híreket. Az a tény, hogy a lekérdezés összes rekordját a hír asztalra, csökkenő sorrendben felülről. És így a 4. hírek volt a legelső, ez ugyanaz, mint a részletes és kikelt. Azaz csak egy véletlen egybeesés.
Elemzési generált kérelem elérésekor keresztül test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4.
Itt az a tábla neve a hírek (ebben az esetben a hírt) vitték logikai felsorolás.
Tehát, lekérdezés SELECT * FROM `news` WHERE` public` = \ '1 \' AND` id` = 4 UNION SELECT * FROM WHERE id = hírek 4 ORDER BY` position` DESC. Ahhoz, hogy a nulla eredményt az első része a kérelem (akár UNION) csatlakozott eredményeként a második rész (miután UNION), visszatérve részletes leírása 4. híreket.
Elleni védelem SQL injekció (SQL megvalósítások)
Betörés elleni védelem csökken az alapvető szabályt a „bizalom, hanem ellenőrzi.” Be kell, hogy ellenőrizze, mindent - számok, karakterláncok, dátumok, adatok speciális formátumban.
Annak ellenőrzésére, a változó, egy számérték használt függvény is_numeric (n);, amely visszatér igaz, ha az n paraméter - száma és egyébként false.
Nem lehet ellenőrizni az érték a számát és típusát a kézi vezérlést. Itt egy példa, hogy felülbírálja a értéke $ id, kapott a $ _GET [\ „id_news \”] értékre egész szám jellegű (egész szám):
$ Id = (int) $ _ GET [\ 'id_news \'];
A legtöbb betörés fordul elő keresztül SQL miatt felfüggeszti a sorok a „tisztázatlan” idézőjelbe aposztróf és egyéb speciális karaktereket. Az ilyen ártalmatlanítás szükséges funkció használatához addslashes ($ str);, amely visszaadja a string $ str a hozzáadott backslash (\\) előtt minden speciális karaktert. Ezt a folyamatot nevezzük az adaptáció során.
$ A = „például szöveges hiányjellel \»«;
echo addslashes ($ a); // jelenik meg: egy példa a szöveg hiányjellel \\\ '
Ezen kívül van két funkció létre kifejezetten a film adaptációja a vonalakat használt SQL.
Ez mysql_escape_string ($ str); és mysql_real_escape_string ($ str);.
Az első figyelmen kívül hagyja a kapcsolatot kódolás egy adatbázist, és lehet megkerülni, de a második figyelembe veszi, és teljesen biztonságos. mysql_real_escape_string ($ str); visszaad egy string $ str egy backslash hozzá a következő karaktereket: \\ x00 \\ n \\ r \\ \”,„és \\ X1A.
Mágikus idézetek
Mágikus idézetek - hatás automatikus csere idézetek a backslash (\\), és erről a I / O műveleteket. Néhány konfigurációban ez az opció engedélyezett a PHP, és néhány nem. Annak érdekében, hogy elkerüljék a kettős ekranizirovaniya karakter zaekranizirovat adatok normál végig mysql_real_escape_string ($ str); el kell távolítania az automatikus elhelyezett rep (ha magic idézetek szerepelnek).
Ellenőrzés vklyuchonnosti magic idézetek érkező adatok GET, POST vagy Kukov rendelnie get_magic_quotes_gpc () függvény; (Garancia: 1 - magic quotes ha van benne, 0 - ha letiltva).
Ha magic idézetek vkyucheny (azaz a visszaperjelek dobavlyaeyutsya), és gyakoribb, azokat el kell távolítani. Mindez a függvény stripslashes ($ str); (Visszaadja a string $ str nélkül fordított törtvonal közvetlen idézetek és aposztróf).
A zakyuchenii idézik olvasható teljes alkalmazkodás sorok rögzítésére DB
ha (get_magic_quotes_gpc () == 1)
$ Element_title = stripslashes (trim ($ _ POST [ "element_title"]));
$ Element_text = stripslashes (trim ($ _ POST [ "element_text"]));
$ Element_date = stripslashes (trim ($ _ POST [ "element_date"]));
>
más
$ Element_title = trim ($ _ POST [ "element_title"]);
$ Element_text = trim ($ _ POST [ "element_text"]);
$ Element_date = trim ($ _ POST [ "element_date"]);
>
$ Element_title = mysql_real_escape_string ($ element_title);
$ Element_text = mysql_real_escape_string ($ element_text);
$ Element_date = mysql_real_escape_string ($ element_date);
SQL injection - ez az egyik legolcsóbb módja, hogy csapkod a helyszínen.
A lényeg az ilyen injekciók - bevezetése adatok (átutalásra GET, POST kérések vagy cookie-értékek) tetszőleges SQL kód. Ha egy webhely sebezhető és végre ilyen injekciót, Valójában lehetséges, hogy egy adatbázis létrehozása (leggyakrabban MySQL) semmit.
Hogyan számítható ki a biztonsági rést, amely lehetővé teszi, hogy vezessenek be SQL injection?
Változás a GET kérést az? Detail = 1 \ „vagy? Részlet = 1 " Ezután próbálja átadni azokat a kéréseket a szerver, azaz megy test.ru/? Részlet = 1 \" vagy natest.ru /? Részletes = 1 \" .
Ha a hiba jelenik meg a belépési oldal adatait, a webhely sebezhető SQL injekció.
Példa felmerülő hibák a sérülékenység ellenőrzés
Gyakorlat. Options hacker honlapon sebezhetőség az SQL injekciós
Tehát, már említettük a helyszínen test.ru. Az adatbázis tárolja 4 hírek, ebből 3 jelenik meg. Engedélyt kiadni hírek függ parmetra nyilvános (ha a paraméter tartalmazza az 1 értéket, majd a hír megjelent).
Tesztek az alábbi lehetőségek közül:
test.ru/?detail=4+OR+1
test.ru/?detail=4+-
test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4
A végén, a szerencse és két kérelmet (első és harmadik) visszatért hozzánk egy részletes leírást a negyedik hírek
Elemzés a belsejében példa
A részletes leírást a hír reagál blokk kód:
$ Detail_id = $ _ GET [\ 'részlet \'];
$ Zapros = "SELECT * FROM` $ table_news` WHERE` public` = \ '1 \' AND` id` = $ detail_id ORDER BY `position` DESC";
Sőt, van beállítva, hogy $ detail_id kezelés nélkül, így is építeni `id` = $ detail_id írt görbe, akkor jobb, ha kibír to` id` = \„$ detail_id \”(vagyis az összehasonlítási értéket kell írni egyenes aposztróf).
Keresi a kérésére kapott belépni az oldalra keresztül test.ru/?detail=4+OR+1
SELECT * FROM `news` WHERE` public` = \ '1 \' AND` id` = 4 vagy 1 ORDER BY` position` DESC
Ez teljesen világossá válik, hogy miért megjelenítéséhez 4. híreket. Az a tény, hogy a lekérdezés összes rekordját a hír asztalra, csökkenő sorrendben felülről. És így a 4. hírek volt a legelső, ez ugyanaz, mint a részletes és kikelt. Azaz csak egy véletlen egybeesés.
Elemzési generált kérelem elérésekor keresztül test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4.
Itt az a tábla neve a hírek (ebben az esetben a hírt) vitték logikai felsorolás.
Tehát, lekérdezés SELECT * FROM `news` WHERE` public` = \ '1 \' AND` id` = 4 UNION SELECT * FROM WHERE id = hírek 4 ORDER BY` position` DESC. Ahhoz, hogy a nulla eredményt az első része a kérelem (akár UNION) csatlakozott eredményeként a második rész (miután UNION), visszatérve részletes leírása 4. híreket.
Elleni védelem SQL injekció (SQL megvalósítások)
Betörés elleni védelem csökken az alapvető szabályt a „bizalom, hanem ellenőrzi.” Be kell, hogy ellenőrizze, mindent - számok, karakterláncok, dátumok, adatok speciális formátumban.
Annak ellenőrzésére, a változó, egy számérték használt függvény is_numeric (n);, amely visszatér igaz, ha az n paraméter - száma és egyébként false.
Nem lehet ellenőrizni az érték a számát és típusát a kézi vezérlést. Itt egy példa, hogy felülbírálja a értéke $ id, kapott a $ _GET [\ „id_news \”] értékre egész szám jellegű (egész szám):
$ Id = (int) $ _ GET [\ 'id_news \'];
A legtöbb betörés fordul elő keresztül SQL miatt felfüggeszti a sorok a „tisztázatlan” idézőjelbe aposztróf és egyéb speciális karaktereket. Az ilyen ártalmatlanítás szükséges funkció használatához addslashes ($ str);, amely visszaadja a string $ str a hozzáadott backslash (\\) előtt minden speciális karaktert. Ezt a folyamatot nevezzük az adaptáció során.
$ A = „például szöveges hiányjellel \»«;
echo addslashes ($ a); // jelenik meg: egy példa a szöveg hiányjellel \\\ '
Ezen kívül van két funkció létre kifejezetten a film adaptációja a vonalakat használt SQL.
Ez mysql_escape_string ($ str); és mysql_real_escape_string ($ str);.
Az első figyelmen kívül hagyja a kapcsolatot kódolás egy adatbázist, és lehet megkerülni, de a második figyelembe veszi, és teljesen biztonságos. mysql_real_escape_string ($ str); visszaad egy string $ str egy backslash hozzá a következő karaktereket: \\ x00 \\ n \\ r \\ \”,„és \\ X1A.
Mágikus idézetek
Mágikus idézetek - hatás automatikus csere idézetek a backslash (\\), és erről a I / O műveleteket. Néhány konfigurációban ez az opció engedélyezett a PHP, és néhány nem. Annak érdekében, hogy elkerüljék a kettős ekranizirovaniya karakter zaekranizirovat adatok normál végig mysql_real_escape_string ($ str); el kell távolítania az automatikus elhelyezett rep (ha magic idézetek szerepelnek).
Ellenőrzés vklyuchonnosti magic idézetek érkező adatok GET, POST vagy Kukov rendelnie get_magic_quotes_gpc () függvény; (Garancia: 1 - magic quotes ha van benne, 0 - ha letiltva).
Ha magic idézetek vkyucheny (azaz a visszaperjelek dobavlyaeyutsya), és gyakoribb, azokat el kell távolítani. Mindez a függvény stripslashes ($ str); (Visszaadja a string $ str nélkül fordított törtvonal közvetlen idézetek és aposztróf).
A zakyuchenii idézik olvasható teljes alkalmazkodás sorok rögzítésére DB
ha (get_magic_quotes_gpc () == 1)
$ Element_title = stripslashes (trim ($ _ POST [ "element_title"]));
$ Element_text = stripslashes (trim ($ _ POST [ "element_text"]));
$ Element_date = stripslashes (trim ($ _ POST [ "element_date"]));
>
más
$ Element_title = trim ($ _ POST [ "element_title"]);
$ Element_text = trim ($ _ POST [ "element_text"]);
$ Element_date = trim ($ _ POST [ "element_date"]);
>
$ Element_title = mysql_real_escape_string ($ element_title);
$ Element_text = mysql_real_escape_string ($ element_text);
$ Element_date = mysql_real_escape_string ($ element_date);