WikiHow inafundisha jinsi ya kuzuia sindano ya SQL ukitumia Taarifa Tayari katika PHP. SQL sindano ni moja ya udhaifu wa kawaida katika matumizi ya Wavuti leo. Kauli zilizoandaliwa hutumia vigezo vilivyofungwa na haziunganishi vigeuzi na nyuzi za SQL, na kuifanya iwezekane kwa mshambuliaji kurekebisha taarifa ya SQL.
Kauli zilizotayarishwa zinachanganya kutofautisha na taarifa iliyokusanywa ya SQL, ili SQL na vigeuzi vimetumwa tofauti. Vigeuzi hutafsiriwa kama kamba tu na sio sehemu ya taarifa ya SQL. Kutumia njia katika hatua zilizo hapa chini, hautahitaji kutumia mbinu zingine za kuchuja sindano ya SQL kama vile mysql_real_escape_string ().
Hatua
Sehemu ya 1 ya 2: Kuelewa SQL sindano
Hatua ya 1. SQL sindano ni aina ya mazingira magumu katika programu zinazotumia hifadhidata ya SQL
Hatari hutokea wakati pembejeo ya mtumiaji inatumiwa katika Taarifa ya SQL:
$ name = $ _GET ['jina la mtumiaji']; $ swala = "CHAGUA nenosiri KUTOKA kwa tbl_user WAPI jina = '$ name'";
Hatua ya 2. Thamani ambayo mtumiaji huingia kwenye jina la mtumiaji la URL litatengwa kwa jina la $ variable
Halafu imewekwa moja kwa moja kwenye taarifa ya SQL, na kuiwezesha mtumiaji kuhariri taarifa ya SQL.
$ name = "admin 'AU 1 = 1 -"; $ swala = "CHAGUA nenosiri KUTOKA kwa tbl_user WAPI jina = '$ name'";
Hatua ya 3. Hifadhidata ya SQL itapokea taarifa ya SQL kama ifuatavyo:
Chagua nywila kutoka kwa watumiaji wa tbl WAPI jina = 'admin' AU 1 = 1 - '
-
Hii ni halali SQL, lakini badala ya kurudisha nywila moja kwa mtumiaji, taarifa hiyo itarudisha nywila zote kwenye meza tbl_user. Hiki sio kitu unachotaka katika programu tumizi za wavuti.
Sehemu ya 2 ya 2: Kutumia mySQLi Kuunda Taarifa Tayari
Hatua ya 1. Unda swala la kuchagua la MySQLi
Tumia nambari iliyo hapa chini KUCHAGUA data kutoka kwa meza ukitumia Taarifa Zilizotayarishwa za mySQLi.
$ name = $ _GET ['jina la mtumiaji']; ikiwa ($ stmt = $ mysqli-> andaa ("CHAGUA nenosiri KUTOKA kwa watumiaji wa tbl WAPI jina =?")) $ stmt-> bind_param ("s", $ jina); // Tekeleza taarifa hiyo. $ stmt-> kutekeleza (); // Pata vigeuzi kutoka kwa swala. $ stmt-> bind_result ($ kupita); // Leta data. $ stmt-> kuleta (); // Onyesha data. printf ("Nenosiri la mtumiaji% s ni% s / n", jina la $, $ pass); // Funga taarifa iliyoandaliwa. $ stmt-> karibu (); }
Kumbuka: $ mysqli inayobadilika ni kitu cha Uunganisho cha mySQLi
Hatua ya 2. Unda Swala la UWEKEZAJI wa mySQLi
Tumia nambari iliyo hapa chini kuingiza data kwenye jedwali ukitumia Taarifa Zilizotayarishwa za MySQLi.
$ name = $ _GET ['jina la mtumiaji']; Nenosiri la $ = $ _GET ['password']; ikiwa ($ stmt = $ mysqli-> andaa ("INSERT INTO tbl_users (jina, nywila) MAADILI (?,?)")) {// Funga vigeuzi kwenye parameta kama kamba. $ stmt-> bind_param ("ss", jina la $, $ password); // Tekeleza taarifa hiyo. $ stmt-> kutekeleza (); // Funga taarifa iliyoandaliwa. $ stmt-> karibu (); }
Kumbuka: $ mysqli inayobadilika ni kitu cha Uunganisho cha mySQLi
Hatua ya 3. Unda swala la mySQLi UPDATE
Tumia nambari iliyo hapa chini kusasisha data kwenye jedwali ukitumia Tamko zilizoandaliwa za MySQLi.
$ name = $ _GET ['jina la mtumiaji']; Nenosiri la $ = $ _GET ['password']; ikiwa ($ stmt = $ mysqli-> andaa ("UPDATE tbl_users SET password =? WAPI jina =?")) {// Funga vigeuzi kwenye parameta kama kamba. $ stmt-> bind_param ("ss", nywila ya $, jina la $); // Tekeleza taarifa hiyo. $ stmt-> kutekeleza (); // Funga taarifa iliyoandaliwa. $ stmt-> karibu (); }
Kumbuka: $ mysqli inayobadilika ni kitu cha Uunganisho cha mySQLi
Hatua ya 4. Unda swala la mySQLi DELETE
Hati iliyo hapo chini ni jinsi ya KUFUTA data kutoka kwa meza ukitumia Taarifa Zilizotayarishwa za MySQLi.
$ name = $ _GET ['jina la mtumiaji']; Nenosiri la $ = $ _GET ['password']; ikiwa ($ stmt = $ mysqli-> jitayarisha ("FUTA KUTOKA tbl_users WAPI jina =?")) {// Funga ubadilishaji kwa parameta kama kamba. $ stmt-> bind_param ("s", $ jina); // Tekeleza taarifa hiyo. $ stmt-> kutekeleza (); // Funga taarifa iliyoandaliwa. $ stmt-> karibu (); }