Paano Maiiwasan ang SQL Injection sa PHP (na may Mga Larawan)

Talaan ng mga Nilalaman:

Paano Maiiwasan ang SQL Injection sa PHP (na may Mga Larawan)
Paano Maiiwasan ang SQL Injection sa PHP (na may Mga Larawan)

Video: Paano Maiiwasan ang SQL Injection sa PHP (na may Mga Larawan)

Video: Paano Maiiwasan ang SQL Injection sa PHP (na may Mga Larawan)
Video: Gawin Mo Ito At Mapupuyat Siya Sa Kaka Isip SAYO 2024, Mayo
Anonim

Itinuturo sa iyo ng wikiHow na ito kung paano maiiwasan ang SQL injection gamit ang mga Inihanda na Pahayag sa PHP. Ang SQL injection ay isa sa mga pinaka-karaniwang kahinaan sa mga aplikasyon sa Web ngayon. Ang mga Inihanda na Pahayag ay gumagamit ng mga nakatali na parameter at hindi pagsamahin ang mga variable sa mga string ng SQL, na ginagawang imposible para sa isang umaatake na baguhin ang pahayag ng SQL.

Ang mga Inihanda na Pahayag ay pinagsasama ang variable sa naipon na pahayag ng SQL, upang ang SQL at ang mga variable ay maipapadala nang magkahiwalay. Ang mga variable ay pagkatapos ay binibigyang kahulugan bilang mga string lamang at hindi bahagi ng pahayag ng SQL. Gamit ang mga pamamaraan sa mga hakbang sa ibaba, hindi mo kakailanganing gumamit ng iba pang mga diskarte sa pag-filter ng iniksiyon na SQL tulad ng mysql_real_escape_string ().

Mga hakbang

Bahagi 1 ng 2: Pag-unawa sa SQL Injection

Hakbang 1. Ang SQL injection ay isang uri ng kahinaan sa mga application na gumagamit ng isang SQL database

Lumilitaw ang kahinaan kapag ginamit ang isang input ng gumagamit sa isang SQL Statement:

$ name = $ _GET ['username']; $ query = "SELECT password MULA sa tbl_user WHERE name = '$ name'";

Hakbang 2. Ang halagang ipinasok ng isang gumagamit sa variable ng username ng URL ay itatalaga sa variable na $ pangalan

Pagkatapos ay inilalagay ito nang direkta sa pahayag ng SQL, na ginagawang posible para sa gumagamit na mai-edit ang pahayag ng SQL.

$ name = "admin 'O 1 = 1 -"; $ query = "SELECT password MULA sa tbl_user WHERE name = '$ name'";

Hakbang 3. Matatanggap ng database ng SQL ang pahayag ng SQL tulad ng sumusunod:

PUMILI ng password MULA sa tbl_users WHERE name = 'admin' O 1 = 1 - '

  • Ito ay wastong SQL, ngunit sa halip na ibalik ang isang password para sa gumagamit, ibabalik ng pahayag ang lahat ng mga password sa tbl_user ng talahanayan. Hindi ito isang bagay na nais mo sa iyong mga web application.

Bahagi 2 ng 2: Paggamit ng mySQLi upang Lumikha ng Inihanda na Mga Pahayag

2542820 1
2542820 1

Hakbang 1. Lumikha ng mySQLi SELECT Query

Gamitin ang code sa ibaba upang PUMILI ng data mula sa isang talahanayan gamit ang mySQLi Inihanda na Mga Pahayag.

$ name = $ _GET ['username']; kung ($ stmt = $ mysqli-> ihanda ("SELECT password MULA sa tbl_users WHERE name =?")) {// Bind a variable to the parameter as a string. $ stmt-> bind_param ("s", $ name); // Isagawa ang pahayag. $ stmt-> magpatupad (); // Kunin ang mga variable mula sa query. $ stmt-> bind_result ($ pass); // Fetch the data. $ stmt-> kunin (); // Ipakita ang data. printf ("Ang password para sa gumagamit% s ay% s / n", $ name, $ pass); // Isara ang nakahandang pahayag. $ stmt-> malapit (); }

Tandaan: Ang variable na $ MySQL ay ang mySQLi Connection Object

2542820 2
2542820 2

Hakbang 2. Lumikha ng mySQLi INSERT Query

Gamitin ang code sa ibaba upang MAG-INSERT ng data sa isang talahanayan gamit ang mySQLi Inihanda na Mga Pahayag.

$ name = $ _GET ['username']; $ password = $ _GET ['password']; kung ($ stmt = $ mysqli-> ihanda ("INSERT INTO tbl_users (pangalan, password) VALUES (?,?)")) {// Bind ang mga variable sa parameter bilang mga string. $ stmt-> bind_param ("ss", $ name, $ password); // Isagawa ang pahayag. $ stmt-> magpatupad (); // Isara ang nakahandang pahayag. $ stmt-> malapit (); }

Tandaan: Ang variable na $ mysqli ay ang mySQLi Connection Object

2542820 3
2542820 3

Hakbang 3. Lumikha ng mySQLi UPDATE Query

Gamitin ang code sa ibaba upang I-UPDATE ang data sa isang talahanayan gamit ang mySQLi Inihanda na Mga Pahayag.

$ name = $ _GET ['username']; $ password = $ _GET ['password']; kung ($ stmt = $ mysqli-> ihanda ("I-UPDATE tbl_users SET password =? SAAN pangalan =?")) {// Bind ang mga variable sa parameter bilang mga string. $ stmt-> bind_param ("ss", $ password, $ name); // Isagawa ang pahayag. $ stmt-> magpatupad (); // Isara ang nakahandang pahayag. $ stmt-> malapit (); }

Tandaan: Ang variable na $ MySQL ay ang mySQLi Connection Object

2542820 4
2542820 4

Hakbang 4. Lumikha ng mySQLi DELETE Query

Ang script sa ibaba ay kung paano Tanggalin ang data mula sa isang talahanayan gamit ang mySQLi Inihanda na Mga Pahayag.

$ name = $ _GET ['username']; $ password = $ _GET ['password']; kung ($ stmt = $ mysqli-> ihanda ("TANGGALIN SA tbl_users WHERE name =?")) {// Bind ang variable sa parameter bilang isang string. $ stmt-> bind_param ("s", $ name); // Isagawa ang pahayag. $ stmt-> magpatupad (); // Isara ang nakahandang pahayag. $ stmt-> malapit (); }

Inirerekumendang: