Hogyan lehet megakadályozni az SQL -befecskendezést PHP -ben (képekkel)

Tartalomjegyzék:

Hogyan lehet megakadályozni az SQL -befecskendezést PHP -ben (képekkel)
Hogyan lehet megakadályozni az SQL -befecskendezést PHP -ben (képekkel)

Videó: Hogyan lehet megakadályozni az SQL -befecskendezést PHP -ben (képekkel)

Videó: Hogyan lehet megakadályozni az SQL -befecskendezést PHP -ben (képekkel)
Videó: Így Gyorsítsd fel a NETED! / A Legjobb Internet beállítások 2024, Április
Anonim

Ez a wikiHow megtanítja, hogyan lehet megakadályozni az SQL -befecskendezést a PHP -ben lévő Kész kimutatások használatával. Az SQL -befecskendezés napjaink egyik leggyakoribb biztonsági rése a webes alkalmazásokban. Az előkészített utasítások kötött paramétereket használnak, és nem kombinálják a változókat az SQL karakterláncokkal, ami lehetetlenné teszi a támadó számára az SQL utasítás módosítását.

Az elkészített utasítások kombinálják a változót az összeállított SQL utasítással, így az SQL és a változók külön kerülnek elküldésre. A változókat ezután puszta karakterláncként értelmezik, és nem az SQL utasítás részét. Az alábbi lépésekben leírt módszerek használatával nem kell más SQL befecskendezési szűrési technikákat használni, mint például a mysql_real_escape_string ().

Lépések

Rész 1 /2: Az SQL befecskendezés értelmezése

1. lépés: Az SQL -befecskendezés az SQL -adatbázist használó alkalmazások biztonsági rése

A biztonsági rés akkor jelentkezik, amikor egy felhasználói bevitelt használnak egy SQL utasításban:

$ name = $ _GET ['felhasználónév']; $ query = "SELECT password from FROM tbl_user WHERE name = '$ name'";

2. lépés. A felhasználó által a felhasználónév URL -változóba beírt értéket hozzárendeli a $ name változóhoz

Ezután közvetlenül az SQL utasításba kerül, lehetővé téve a felhasználó számára az SQL utasítás szerkesztését.

$ name = "admin" VAGY 1 = 1 - "; $ query = "SELECT password from FROM tbl_user WHERE name = '$ name'";

3. lépés. Az SQL -adatbázis a következőképpen fogadja az SQL -utasítást:

Jelszó kiválasztása a tbl_users webhelyről WHERE name = 'admin' VAGY 1 = 1 - '

  • Ez érvényes SQL, de ahelyett, hogy egy jelszót adna vissza a felhasználónak, a utasítás visszaadja a tbl_user táblázat összes jelszavát. Ez nem az, amit szeretne a webes alkalmazásokban.

    2. rész a 2 -ből: A MySQLi használata kész kimutatások létrehozásához

    2542820 1
    2542820 1

    1. lépés: Hozza létre a mySQLi SELECT lekérdezést

    Az alábbi kóddal válassza ki az adatokat a táblázatból a mySQLi Prepared Statements segítségével.

    $ name = $ _GET ['felhasználónév']; if ($ stmt = $ mysqli-> előkészíteni ("SELECT password from FROM tbl_users WHERE name =?")) {// Egy változót karakterláncként köt a paraméterhez. $ stmt-> bind_param ("s", $ név); // Végezze el a nyilatkozatot. $ stmt-> végrehajtás (); // A változók lekérése a lekérdezésből. $ stmt-> bind_result ($ pass); // Az adatok lekérése. $ stmt-> fetch (); // Az adatok megjelenítése. printf (" %s felhasználó jelszava %s / n", $ name, $ pass); // Zárja be az elkészített nyilatkozatot. $ stmt-> bezár (); }

    Megjegyzés: A $ mysqli változó a mySQLi Connection Object

    2542820 2
    2542820 2

    2. lépés. Hozza létre a mySQLi INSERT lekérdezést

    Az alábbi kóddal illessze be az adatokat táblázatba a mySQLi Prepared Statements segítségével.

    $ name = $ _GET ['felhasználónév']; $ password = $ _GET ['jelszó']; if ($ stmt = $ mysqli-> előkészít ("INSERT INTO tbl_users (név, jelszó) VALUES (?,?)")) {// A változókat karakterláncként kösse a paraméterhez. $ stmt-> bind_param ("ss", $ név, $ jelszó); // Végezze el a nyilatkozatot. $ stmt-> végrehajtás (); // Zárja be az elkészített nyilatkozatot. $ stmt-> bezár (); }

    Megjegyzés: A $ mysqli változó a mySQLi Connection Object

    2542820 3
    2542820 3

    3. lépés. Hozza létre a mySQLi UPDATE lekérdezést

    Használja az alábbi kódot a táblázat adatainak frissítéséhez a mySQLi Prepared Statements használatával.

    $ name = $ _GET ['felhasználónév']; $ password = $ _GET ['jelszó']; if ($ stmt = $ mysqli-> előkészít ("UPDATE tbl_users SET password =? WHERE name =?")) {// A változókat karakterláncként kösse össze a paraméterrel. $ stmt-> bind_param ("ss", $ jelszó, $ név); // Végezze el a nyilatkozatot. $ stmt-> végrehajtás (); // Zárja be az elkészített nyilatkozatot. $ stmt-> bezár (); }

    Megjegyzés: A $ mysqli változó a mySQLi Connection Object

    2542820 4
    2542820 4

    4. lépés. Hozza létre a mySQLi DELETE lekérdezést

    Az alábbi parancsfájl bemutatja, hogyan lehet adatokat törölni egy táblázatból a mySQLi Prepared Statements használatával.

    $ name = $ _GET ['felhasználónév']; $ password = $ _GET ['jelszó']; if ($ stmt = $ mysqli-> előkészítés ("DELETE FROM tbl_users WHERE name =?")) {// A változót karakterláncként kösse össze a paraméterrel. $ stmt-> bind_param ("s", $ név); // Végezze el a nyilatkozatot. $ stmt-> végrehajtás (); // Zárja be az elkészített nyilatkozatot. $ stmt-> bezár (); }

Ajánlott: