Kaip užkirsti kelią SQL injekcijai PHP (su paveikslėliais)

Turinys:

Kaip užkirsti kelią SQL injekcijai PHP (su paveikslėliais)
Kaip užkirsti kelią SQL injekcijai PHP (su paveikslėliais)

Video: Kaip užkirsti kelią SQL injekcijai PHP (su paveikslėliais)

Video: Kaip užkirsti kelią SQL injekcijai PHP (su paveikslėliais)
Video: Kaip pagreitinti ANDROID telefoną? Paprastas būdas suteikti IŠMANIAJAM sparnus 2024, Gegužė
Anonim

Šis „wikiHow“moko jus, kaip užkirsti kelią SQL įvedimui naudojant paruoštus pareiškimus PHP. SQL įpurškimas šiandien yra vienas iš labiausiai paplitusių interneto programų pažeidžiamumų. Paruoštuose pareiškimuose naudojami susieti parametrai ir nekombinuojami kintamieji su SQL eilutėmis, todėl užpuolikas negali pakeisti SQL sakinio.

Paruošti teiginiai sujungia kintamąjį su sudarytu SQL sakiniu, todėl SQL ir kintamieji siunčiami atskirai. Tada kintamieji interpretuojami kaip eilutės, o ne SQL sakinio dalis. Naudodami toliau nurodytus veiksmus, jums nereikės naudoti jokių kitų SQL įpurškimo filtravimo metodų, tokių kaip mysql_real_escape_string ().

Žingsniai

1 dalis iš 2: SQL įpurškimo supratimas

1 žingsnis. SQL įpurškimas yra pažeidžiamumo tipas programose, kuriose naudojama SQL duomenų bazė

Pažeidžiamumas atsiranda, kai vartotojo įvestis naudojama SQL pareiškime:

$ name = $ _GET ['naudotojo vardas']; $ query = "PASIRINKITE slaptažodį iš tbl_user WHERE name = '$ name'";

Žingsnis 2. Vertė, kurią vartotojas įveda į URL kintamąjį naudotojo vardas, bus priskirtas kintamajam $ name

Tada jis dedamas tiesiai į SQL sakinį, kad vartotojas galėtų redaguoti SQL sakinį.

$ name = "admin" ARBA 1 = 1 - "; $ query = "PASIRINKITE slaptažodį iš tbl_user WHERE name = '$ name'";

3 žingsnis. Tada SQL duomenų bazė gaus SQL sakinį taip:

PASIRINKITE slaptažodį iš tbl_users WHERE name = 'admin' AR 1 = 1 - '

  • Tai galioja SQL, tačiau užuot grąžinęs vieną vartotojo slaptažodį, pareiškimas grąžins visus lentelėje tbl_user esančius slaptažodžius. Tai nėra kažkas, ko norite savo žiniatinklio programose.

    2 dalis iš 2: „MySQLi“naudojimas parengtoms ataskaitoms kurti

    2542820 1
    2542820 1

    1 žingsnis. Sukurkite „mySQLi SELECT“užklausą

    Naudokite žemiau esantį kodą, kad pasirinktumėte duomenis iš lentelės naudodami „mySQLi“paruoštus pareiškimus.

    $ name = $ _GET ['vartotojo vardas']; if ($ stmt = $ mysqli-> pasiruošti ("SELECT password FROM tbl_users WHERE name =?")) {// Susieti kintamąjį su parametru kaip eilutę. $ stmt-> bind_param ("s", $ pavadinimas); // Vykdyti teiginį. $ stmt-> vykdyti (); // Gaukite kintamuosius iš užklausos. $ stmt-> bind_result ($ pass); // Gauti duomenis. $ stmt-> atnešti (); // Rodyti duomenis. printf ("Vartotojo %s slaptažodis yra %s / n", $ name, $ pass); // Uždarykite paruoštą pareiškimą. $ stmt-> uždaryti (); }

    Pastaba: kintamasis $ mysqli yra mySQLi ryšio objektas

    2542820 2
    2542820 2

    Žingsnis 2. Sukurkite „mySQLi INSERT“užklausą

    Naudokite žemiau esantį kodą, kad įterptumėte duomenis į lentelę naudodami „mySQLi“paruoštus pareiškimus.

    $ name = $ _GET ['vartotojo vardas']; $ password = $ _GET ['slaptažodis']; if ($ stmt = $ mysqli-> pasiruošti ("INSERT INTO tbl_users (vardas, slaptažodis) VALUES (?,?)")) {// Susieti kintamuosius su parametru kaip eilutes. $ stmt-> bind_param ("ss", $ vardas, $ slaptažodis); // Vykdyti teiginį. $ stmt-> vykdyti (); // Uždarykite paruoštą pareiškimą. $ stmt-> uždaryti (); }

    Pastaba: kintamasis $ mysqli yra mySQLi ryšio objektas

    2542820 3
    2542820 3

    Žingsnis 3. Sukurkite „mySQLi UPDATE Query“

    Naudokite žemiau esantį kodą, kad atnaujintumėte lentelės duomenis naudodami „mySQLi“paruoštas ataskaitas.

    $ name = $ _GET ['naudotojo vardas']; $ password = $ _GET ['slaptažodis']; if ($ stmt = $ mysqli-> pasiruošti ("UPDATE tbl_users SET password =? WHERE name =?")) {// Susieti kintamuosius su parametru kaip eilutes. $ stmt-> bind_param ("ss", $ slaptažodis, $ vardas); // Vykdyti teiginį. $ stmt-> vykdyti (); // Uždarykite paruoštą pareiškimą. $ stmt-> uždaryti (); }

    Pastaba: kintamasis $ mysqli yra mySQLi ryšio objektas

    2542820 4
    2542820 4

    Žingsnis 4. Sukurkite „mySQLi DELETE“užklausą

    Žemiau pateiktame scenarijuje aprašoma, kaip Ištrinti duomenis iš lentelės naudojant „MySQLi“paruoštus pareiškimus.

    $ name = $ _GET ['naudotojo vardas']; $ password = $ _GET ['slaptažodis']; if ($ stmt = $ mysqli-> pasiruošti ("DELETE FROM tbl_users WHERE name =?")) {// Susieti kintamąjį su parametru kaip eilutę. $ stmt-> bind_param ("s", $ pavadinimas); // Vykdyti teiginį. $ stmt-> vykdyti (); // Uždarykite paruoštą pareiškimą. $ stmt-> uždaryti (); }

Rekomenduojamas: