Kako spriječiti ubrizgavanje SQL -a u PHP (sa slikama)

Sadržaj:

Kako spriječiti ubrizgavanje SQL -a u PHP (sa slikama)
Kako spriječiti ubrizgavanje SQL -a u PHP (sa slikama)

Video: Kako spriječiti ubrizgavanje SQL -a u PHP (sa slikama)

Video: Kako spriječiti ubrizgavanje SQL -a u PHP (sa slikama)
Video: Moja omiljena veličina Pe***a 2024, Svibanj
Anonim

Ovaj wikiHow vas uči kako spriječiti ubrizgavanje SQL -a pomoću pripremljenih izjava u PHP -u. SQL injekcija jedna je od najčešćih ranjivosti današnjih web aplikacija. Pripremljene izjave koriste vezane parametre i ne kombiniraju varijable sa SQL nizovima, što onemogućuje napadaču izmjenu SQL izraza.

Pripremljeni izrazi kombiniraju varijablu s prevedenom SQL naredbom, tako da se SQL i varijable šalju zasebno. Varijable se tada tumače samo kao nizovi, a ne kao dio SQL izraza. Koristeći metode u koracima u nastavku, nećete morati koristiti bilo koju drugu tehniku filtriranja SQL injekcija, poput mysql_real_escape_string ().

Koraci

1. dio 2: Razumijevanje SQL ubrizgavanja

Korak 1. SQL Injection je vrsta ranjivosti u aplikacijama koje koriste SQL bazu podataka

Ranjivost nastaje kada se korisnički unos koristi u SQL izrazu:

$ name = $ _GET ['korisničko ime']; $ query = "SELECT password FROM tbl_user WHERE name = '$ name'";

Korak 2. Vrijednost koju korisnik unese u URL varijable korisničko ime bit će dodijeljena varijabli $ name

Zatim se stavlja izravno u SQL izraz, što korisniku omogućuje uređivanje SQL izraza.

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

Korak 3. SQL baza podataka tada će primiti SQL izraz na sljedeći način:

ODABERITE lozinku OD tbl_users WHERE name = 'admin' ILI 1 = 1 - '

  • Ovo je valjani SQL, ali umjesto da vrati jednu lozinku za korisnika, izraz će vratiti sve lozinke u tablici tbl_user. To nije nešto što želite u svojim web aplikacijama.

    Dio 2 od 2: Korištenje mySQLi za stvaranje pripremljenih izjava

    2542820 1
    2542820 1

    Korak 1. Izradite upit za SELECT mySQLi

    Upotrijebite donji kôd za ODABIR podataka iz tablice pomoću pripremljenih izjava mySQLi.

    $ name = $ _GET ['korisničko ime']; if ($ stmt = $ mysqli-> pripremiti ("SELECT password FROM tbl_users WHERE name =?")) {// Vezite varijablu na parametar kao niz. $ stmt-> bind_param ("s", $ name); // Izvršite naredbu. $ stmt-> izvrši (); // Dohvaćanje varijabli iz upita. $ stmt-> bind_result ($ pass); // Dohvaćanje podataka. $ stmt-> fetch (); // Prikaz podataka. printf ("Zaporka za korisnika %s je %s / n", $ name, $ pass); // Zatvorite pripremljenu izjavu. $ stmt-> close (); }

    Napomena: Varijabla $ mysqli je objekt povezivanja mySQLi

    2542820 2
    2542820 2

    Korak 2. Izradite mySQLi INSERT upit

    Upotrijebite donji kod za UMETANJE podataka u tablicu pomoću pripremljenih izjava mySQLi.

    $ name = $ _GET ['korisničko ime']; $ password = $ _GET ['lozinka']; if ($ stmt = $ mysqli-> pripremiti ("INSERT INTO tbl_users (name, password) VALUES (?,?)"))) {// Vezite varijable za parametar kao nizove. $ stmt-> bind_param ("ss", $ name, $ lozinka); // Izvršite naredbu. $ stmt-> izvrši (); // Zatvorite pripremljenu izjavu. $ stmt-> close (); }

    Napomena: Varijabla $ mysqli je objekt povezivanja mySQLi

    2542820 3
    2542820 3

    Korak 3. Izradite upit za ažuriranje mySQLi

    Upotrijebite donji kod za ažuriranje podataka u tablici pomoću pripremljenih izjava mySQLi.

    $ name = $ _GET ['korisničko ime']; $ password = $ _GET ['lozinka']; if ($ stmt = $ mysqli-> pripremiti ("UPDATE tbl_users SET password =? WHERE name =?")) {// Vezite varijable za parametar kao nizove. $ stmt-> bind_param ("ss", $ lozinka, $ name); // Izvršite naredbu. $ stmt-> izvrši (); // Zatvorite pripremljenu izjavu. $ stmt-> close (); }

    Napomena: Varijabla $ mysqli je objekt povezivanja mySQLi

    2542820 4
    2542820 4

    Korak 4. Izradite mySQLi DELETE upit

    Sljedeća skripta prikazuje način BRIŠENJA podataka iz tablice pomoću pripremljenih izjava mySQLi.

    $ name = $ _GET ['korisničko ime']; $ password = $ _GET ['lozinka']; if ($ stmt = $ mysqli-> pripremiti ("DELETE FROM tbl_users WHERE name =?")) {// Vezati varijablu s parametrom kao niz. $ stmt-> bind_param ("s", $ name); // Izvršite naredbu. $ stmt-> izvršiti (); // Zatvorite pripremljenu izjavu. $ stmt-> close (); }

Preporučeni: