Si të parandaloni injektimin SQL në PHP (me fotografi)

Përmbajtje:

Si të parandaloni injektimin SQL në PHP (me fotografi)
Si të parandaloni injektimin SQL në PHP (me fotografi)

Video: Si të parandaloni injektimin SQL në PHP (me fotografi)

Video: Si të parandaloni injektimin SQL në PHP (me fotografi)
Video: Gjerat Me Te Cuditshme Dhe Qesharake Te Kapura Ne Kamera ! 2024, Mund
Anonim

Ky wikiHow ju mëson se si të parandaloni injektimin SQL duke përdorur Deklaratat e Përgatitura në PHP. Injeksioni SQL është një nga dobësitë më të zakonshme në aplikacionet në internet sot. Deklaratat e përgatitura përdorin parametra të lidhur dhe nuk kombinojnë variablat me vargjet SQL, duke e bërë të pamundur që një sulmues të modifikojë deklaratën SQL.

Deklaratat e përgatitura kombinojnë ndryshoren me deklaratën e përpiluar SQL, në mënyrë që SQL dhe variablat të dërgohen veçmas. Variablat pastaj interpretohen si vargje të thjeshta dhe jo pjesë e deklaratës SQL. Duke përdorur metodat në hapat e mëposhtëm, nuk do të keni nevojë të përdorni ndonjë teknikë tjetër filtrimi të injektimit SQL siç është mysql_real_escape_string ().

Hapa

Pjesa 1 nga 2: Kuptimi i injeksionit SQL

Hapi 1. Injektimi SQL është një lloj dobësie në aplikacionet që përdorin një bazë të dhënash SQL

Dobësia lind kur një hyrje e përdoruesit përdoret në një Deklaratë SQL:

$ name = $ _GET ['username']; $ query = "SELECT fjalëkalimin NGA tbl_user WHERE name = '$ name'";

Hapi 2. Vlera që një përdorues fut në emrin e përdoruesit të ndryshores URL do t'i caktohet emrit të ndryshores $

Pastaj vendoset drejtpërdrejt në deklaratën SQL, duke bërë të mundur që përdoruesi të redaktojë deklaratën SQL.

$ name = "admin 'OR 1 = 1 -"; $ query = "SELECT fjalëkalimin NGA tbl_user WHERE name = '$ name'";

Hapi 3. Baza e të dhënave SQL do të marrë deklaratën SQL si më poshtë:

ZGJIDH fjalëkalimin NGA tbl_users KU emri = 'admin' OR 1 = 1 - '

  • Kjo është SQL e vlefshme, por në vend që të kthejë një fjalëkalim për përdoruesin, deklarata do të kthejë të gjitha fjalëkalimet në tabelën tbl_user. Kjo nuk është diçka që dëshironi në aplikacionet tuaja në internet.

Pjesa 2 nga 2: Përdorimi i mySQLi për të krijuar deklarata të përgatitura

2542820 1
2542820 1

Hapi 1. Krijoni pyetjen mySQLi SELECT

Përdorni kodin më poshtë për të SELEKTUAR të dhënat nga një tabelë duke përdorur deklaratat e përgatitura të mySQLi.

$ name = $ _GET ['username']; nëse ($ stmt = $ mysqli-> përgatis ("ZGJIDH fjalëkalimin NGA tbl_users KU emri =?")) {// Lidh një ndryshore me parametrin si një varg. $ stmt-> bind_param ("s", $ name); // Ekzekutoni deklaratën. $ stmt-> ekzekuto (); // Merrni ndryshoret nga pyetja. $ stmt-> bind_result ($ pass); // Merrni të dhënat. $ stmt-> marr (); // Shfaq të dhënat. printf ("Fjalëkalimi për përdoruesin %s është %s / n", $ name, $ pass); // Mbyllni deklaratën e përgatitur. $ stmt-> mbyll (); }

Shënim: Ndryshorja $ mysqli është objekti i lidhjes mySQLi

2542820 2
2542820 2

Hapi 2. Krijoni pyetjen mySQLi INSERT

Përdorni kodin më poshtë për të futur të dhënat në një tabelë duke përdorur deklaratat e përgatitura të mySQLi.

$ name = $ _GET ['username']; $ password = $ _GET ['password']; nëse ($ stmt = $ mysqli-> përgatis ("INSERT INTO tbl_users (name, password) VLERAT (?,?)")) {// Lidh variablat me parametrin si vargje. $ stmt-> bind_param ("ss", $ name, $ password); // Ekzekutoni deklaratën. $ stmt-> ekzekuto (); // Mbyllni deklaratën e përgatitur. $ stmt-> mbyll (); }

Shënim: Ndryshorja $ mysqli është objekti i lidhjes mySQLi

2542820 3
2542820 3

Hapi 3. Krijoni pyetjen mySQLi UPDATE

Përdorni kodin e mëposhtëm për të PPRDITSUAR të dhënat në një tabelë duke përdorur deklaratat e përgatitura të mySQLi.

$ name = $ _GET ['username']; $ password = $ _GET ['password']; if ($ stmt = $ mysqli-> përgatis ("PPRDITSO tbl_users SET password =? KU emri =?")) {// Lidh variablat me parametrin si vargje. $ stmt-> bind_param ("ss", $ password, $ name); // Ekzekutoni deklaratën. $ stmt-> ekzekuto (); // Mbyllni deklaratën e përgatitur. $ stmt-> mbyll (); }

Shënim: Ndryshorja $ mysqli është objekti i lidhjes mySQLi

2542820 4
2542820 4

Hapi 4. Krijoni pyetjen mySQLi DELETE

Skenari i mëposhtëm është se si të fshihen të dhënat nga një tabelë duke përdorur deklaratat e përgatitura të mySQLi.

$ name = $ _GET ['username']; $ password = $ _GET ['password']; nëse ($ stmt = $ mysqli-> përgatis ("FSHIJ NGA tbl_users WHERE name =?")) {// Lidh ndryshoren me parametrin si një varg. $ stmt-> bind_param ("s", $ name); // Ekzekutoni deklaratën. $ stmt-> ekzekuto (); // Mbyllni deklaratën e përgatitur. $ stmt-> mbyll (); }

Recommended: