Kuidas vältida SQL -i süstimist PHP -s (piltidega)

Sisukord:

Kuidas vältida SQL -i süstimist PHP -s (piltidega)
Kuidas vältida SQL -i süstimist PHP -s (piltidega)

Video: Kuidas vältida SQL -i süstimist PHP -s (piltidega)

Video: Kuidas vältida SQL -i süstimist PHP -s (piltidega)
Video: 3 KANAMAKSAPASTEEDI RETSEPTI!! KÜLALISED SAAVAD ŠOKKI!! TOIDUSAade 2024, Mai
Anonim

See wikiHow õpetab teile, kuidas vältida SQL -i süstimist, kasutades PHP -s ettevalmistatud avaldusi. SQL -i süstimine on tänapäeval üks levinumaid haavatavusi veebirakendustes. Ettevalmistatud avaldused kasutavad seotud parameetreid ja ei ühenda muutujaid SQL -stringidega, mistõttu ründajal on võimatu muuta SQL -avaldust.

Ettevalmistatud avaldused ühendavad muutuja koostatud SQL -lausega, nii et SQL ja muutujad saadetakse eraldi. Muutujaid tõlgendatakse seejärel lihtsalt stringidena, mitte SQL -lause osana. Kasutades allpool toodud meetodeid, ei pea te kasutama muid SQL -i süstimise filtreerimistehnikaid, näiteks mysql_real_escape_string ().

Sammud

Osa 1 /2: SQL -i sisestamise mõistmine

Samm 1. SQL -i süstimine on SQL -andmebaasi kasutavate rakenduste haavatavuse tüüp

Haavatavus tekib siis, kui kasutaja sisendit kasutatakse SQL -i avalduses:

$ name = $ _GET ['kasutajanimi']; $ query = "VALI parool FROM tbl_user WHERE name = '$ name'";

Samm 2. Väärtus, mille kasutaja sisestab URL -i muutuja kasutajanimi, määratakse muutujale $ name

Seejärel paigutatakse see otse SQL -avaldusse, võimaldades kasutajal SQL -avaldust redigeerida.

$ name = "admin" VÕI 1 = 1 - "; $ query = "VALI parool FROM tbl_user WHERE name = '$ name'";

Samm 3. Seejärel saab SQL -andmebaas SQL -avalduse järgmiselt:

VALI parool FROM tbl_users WHERE nimi = 'admin' VÕI 1 = 1 - '

  • See on kehtiv SQL, kuid selle asemel, et tagastada kasutajale üks parool, tagastab lause kõik tabelis tbl_user olevad paroolid. See pole midagi, mida soovite oma veebirakendustes kasutada.

    Osa 2 /2: MySQLi kasutamine koostatud avalduste loomiseks

    2542820 1
    2542820 1

    Samm 1. Looge päring mySQLi SELECT

    Kasutage allolevat koodi, et valida tabelist andmeid, kasutades mySQLi ettevalmistatud avaldusi.

    $ name = $ _GET ['kasutajanimi']; if ($ stmt = $ mysqli-> prep ("VALI parool FROM tbl_users WHERE nimi =?")) {// Seo parameetrile muutuja stringina. $ stmt-> bind_param ("s", $ nimi); // Käivita avaldus. $ stmt-> käivita (); // Hankige muutujad päringust. $ stmt-> bind_result ($ pass); // Andmete toomine. $ stmt-> tuua (); // Kuva andmed. printf ("Kasutaja %s parool on %s / n", $ nimi, $ pass); // Sule koostatud avaldus. $ stmt-> sulge (); }

    Märkus. Muutuja $ mysqli on mySQLi ühenduse objekt

    2542820 2
    2542820 2

    Samm 2. Looge päring mySQLi INSERT

    Kasutage allolevat koodi, et sisestada andmed tabelisse, kasutades mySQLi ettevalmistatud avaldusi.

    $ name = $ _GET ['kasutajanimi']; $ password = $ _GET ['parool']; if ($ stmt = $ mysqli-> prep ("INSERT INTO tbl_users (nimi, parool) VÄÄRTUSED (?,?)")) {// Seo muutujad parameetriks stringidena. $ stmt-> bind_param ("ss", $ nimi, $ parool); // Käivita avaldus. $ stmt-> käivita (); // Sulgege ettevalmistatud avaldus. $ stmt-> sulge (); }

    Märkus. Muutuja $ mysqli on mySQLi ühenduse objekt

    2542820 3
    2542820 3

    Samm 3. Looge mySQLi UPDATE päring

    Kasutage allolevat koodi, et värskendada tabelis olevaid andmeid, kasutades mySQLi ettevalmistatud avaldusi.

    $ name = $ _GET ['kasutajanimi']; $ password = $ _GET ['parool']; if ($ stmt = $ mysqli-> prep ("UPDATE tbl_users SET password =? WHERE name =?")) {// Seo muutujad parameetriks stringidena. $ stmt-> bind_param ("ss", $ parool, $ nimi); // Käivita avaldus. $ stmt-> käivita (); // Sule koostatud avaldus. $ stmt-> sulge (); }

    Märkus. Muutuja $ mysqli on mySQLi ühenduse objekt

    2542820 4
    2542820 4

    Samm 4. Looge päring mySQLi DELETE

    Allpool olev skript kirjeldab andmete kustutamist tabelist, kasutades mySQLi ettevalmistatud avaldusi.

    $ name = $ _GET ['kasutajanimi']; $ password = $ _GET ['parool']; if ($ stmt = $ mysqli-> prep ("DELETE FROM tbl_users WHERE name =?")) {// Seo muutuja parameetriks stringina. $ stmt-> bind_param ("s", $ nimi); // Käivita avaldus. $ stmt-> käivita (); // Sule koostatud avaldus. $ stmt-> sulge (); }

Soovitan: