SQL injection
A bevezetése SQL-kód (angol SQL injection.) - az egyik leggyakoribb módja, hogy csapkod weboldalak és programok, dolgozó adatbázisok alapján bevezetése tetszőleges SQL-kód kérése.
SQL injection, attól függően, hogy milyen típusú adatbázis és bevezetése feltételek révén egy támadó tetszőleges lekérdezést az adatbázisban (például, hogy olvassa el a tartalmát minden asztalra, távolítsa el, változás, vagy add adatok), hogy képes legyen olvasni és / vagy írni a helyi fájlokat és végrehajtani tetszőleges parancsokat a cél kiszolgálón.
SQL végrehajtási típusú támadás lehetséges oka a helytelen feldolgozását használt beviteli adatok SQL-lekérdezés.
Fejlesztő alkalmazásokat és dolgozik adatbázisokkal, tisztában kell lenniük a biztonsági réseket, és hogy ellenintézkedéseket SQL végrehajtás.
SQL injekciós támadás elv
Tegyük szerver szoftver, bemenő paraméter id, arra használja, hogy hozzon létre SQL-lekérdezés. Tekintsük ezt a PHP-script:
Így változik a bemeneti paraméterek hozzáadásával, hogy az SQL nyelvi konstrukciók változást okoz a logika SQL-lekérdezés (ebben a példában, ahelyett, hogy a hírek minden megadott azonosító az adatbázisban tárolt választják ki a hír, hiszen a kifejezés 1 = 1 mindig igaz).
A bevezetés a húr paraméterek
Tegyük szerver szoftver iránti kérelmet kap az adatok visszanyerését a hírekben SEARCH_TEXT opciót, akkor a következő SQL-lekérdezés (paraméterek megszökött idézetek itt):
De bevezetésével paraméter keresett_szöveg idézőjelet (amelyet a lekérdezés), akkor gyökeresen megváltoztatja a viselkedését az SQL-lekérdezést. Például, átadva a paraméter értéke keresett_szöveg) + és + (news_id_author = '1 hívjuk kérést végrehajtani:
Az Unió
SQL nyelv lehetővé teszi, hogy összekapcsolják az eredmények több lekérdezés segítségével UNION operátor. Ez ad a támadók jogosulatlan hozzáférést az adatokhoz.
Fontolja meg hírek script (ID hírek a megjeleníteni kívánt továbbítjuk az id paraméter):
Ha egy támadó át paraméterként id tervezés -1 UNION SELECT 1, felhasználónév, jelszó, 1. admin, hogy hatására a végrehajtását SQL-lekérdezés
Mivel hírek azonosító -1 nyilván nem létezik, az asztal, a hírek kiválasztott hangfelvételt, de csökkenni fog az eredmény bejegyzések jogosulatlan választott admin asztal kapott SQL injection.
Használata UNION + group_concat ()
Egyes esetekben a támadó indítson támadást, de nem tudta, hogy több mint egy oszlop. Ha egy támadó használhatja a MySQL funkció: amely egyesíti több oszlop egy. Például egy példa a fenti függvény hívás:
Védő farok lekérdezés
Hasító SQL lekérdezés
Elválasztásához parancsokat az SQL nyelv által használt karakter; (Pontosvessző), bemutatva a karakter a kérést, a támadó képes végrehajtani egy parancs egyetlen lekérdezés, de nem az összes SQL nyelvjárások támogatja ezt a funkciót.
Például, ha a paraméterek a script keresztül továbbított szerkezet, amely pontosvesszővel, például 12; INSERT INTO admin (felhasználónév, jelszó) ÉRTÉKEK ( „Hacker”, „asztal”); majd ugyanabban a lekérdezés kerül bemutatásra és 2 csapat a táblázatban admin bekerül a jogosulatlan belépés Hacker.
A végrehajtás módszerei típusú támadás SQL-kódot
Keresés a szkriptek téve a támadásoknak
Ebben a szakaszban a behatoló vizsgálták szerver script viselkedés manipuláció bemeneti paraméterek kimutatására rendellenes viselkedést. Manipuláció történik minden lehetséges paraméterek:- Keresztül továbbított adatokat a POST és GET módszerek
- Értékek [HTTP-Cookie]
- Http_referer (a szkriptek)
- AUTH_USER és AUTH_PASSWORD (használatával hitelesítés)
Rendellenes viselkedés olyan viselkedést, amely beérkezett oldalak előtt és után helyettesítési idézetek, különböző (és nem jelenik meg az oldalon rossz paraméter formátum).
A leggyakoribb példák abnormális viselkedés:- Egy üzenet jelenik meg a különböző hibák;
- amikor kérés adatok (pl híreket vagy a termék lista) a kért adatok nem jelennek meg minden, bár az oldal jelenik meg
Védelmet e típusú támadás kell, hogy alaposan szűrni a bemeneti paraméterek, amelyeket használni fognak a konstrukció az SQL-lekérdezést.
Szűréssel-paramétereket
Tegyük fel, hogy a kódot generál kérés (Pascal programozás), az alábbiak szerint:
Ahhoz, hogy a bevezetése a kód nem volt lehetséges, valamilyen DBMS beleértve a MySQL, meg kell idézett összes paramétereket tartalmaz. A paraméter helyére a jegyzéseket „aposztróf a \„backslash a \\ (ez az úgynevezett”szűrés speciális karakterek") Lehetséges, hogy egy ilyen kódot .:
szűrés lehet olyan, hogy a PHP:
Szűrés egész szám paramétereket
Vegyünk egy másik kérdés:
Ebben az esetben az id mező numerikus típus, és ez nem lehet hivatkozni. Ezért „idézve” és cseréje speciális karakterek escape-szekvenciák nem megy át. Ebben az esetben ellenőrizze a típusú segítséget; id, ha a változó értéke nem szám, a kérelmet nem kell elvégezni egyáltalán.
Például Delphi ellensúlyozásához injekció segít kód:
Hiba esetén StrToInt EConvertError funkció okoz kivételt, és megjelenít egy hibaüzenetet, hogy a kezelő. Kettős konverzió biztosítja a helyes válasz a számként $ 132AB (hexadecimális számrendszer). Egy szabványos Pascal, aki nem tudja kezelni a kivétel, a kód egy kicsit bonyolultabb.
PHP, ez a módszer a következőképpen néz ki:
Csonkolása a bemeneti paraméterek
Ahhoz, hogy a változások logikája SQL-lekérdezés felhívások bevezetése megfelelően hosszú szálakat. Így a minimális hossza a string hajtják végre a fenti példákban 8 karakter ( „1 vagy 1 = 1”). Ha a maximális hossza a helyes paraméter értéke alacsony, az egyik a védelmi módszereket lehet maximum csonkolása bemeneti paraméterek értékeit.
Például, ha tudjuk, hogy az id mező a fenti példában lehet állítani, hogy nem több, mint 9999, akkor „vágni az extra” karakterek, így legfeljebb négy:
Használata paraméteres lekérdezések
Sok adatbázis szerver támogatja a képesség, hogy küldjön paraméteres lekérdezések. A paraméterek a külső eredetű küldeni a szerver külön kérés vagy automatikusan leárnyékolja a kliens könyvtár. Erre a célra,- Delphi - TQuery.Params tulajdon;