Je, MySQL inazuiaje sindano ya sql? Kanuni ya sindano ya SQL na kuzuia

MySQLJinsi ya kuzuia sindano ya sql? Kanuni ya sindano ya SQL na kuzuia

MySQL na sindano ya SQL

Ukichukua data iliyoingizwa na mtumiaji kupitia ukurasa wa wavuti na kuiingiza kwenye aHifadhidata ya MySQL, basi kunaweza kuwa na matatizo ya usalama ya sindano ya SQL.

Sura hii itakujulisha jinsi ya kuzuia sindano ya SQL na kutumia hati kuchuja herufi zilizodungwa katika SQL.

Kinachojulikana sindano ya SQL ni kuhadaa seva kutekeleza amri hasidi za SQL kwa kuingiza amri za SQL kwenye fomu ya wavuti ili kuwasilisha au kuingiza safu ya hoja ya jina la kikoa au ombi la ukurasa.

Hatupaswi kamwe kuamini ingizo la mtumiaji, ni lazima tuchukulie kuwa data ya ingizo ya mtumiaji si salama, na sote tunahitaji kuchuja data ya ingizo la mtumiaji.

Katika mfano ufuatao, jina la mtumiaji lililoingizwa lazima liwe mchanganyiko wa herufi, nambari, na mistari chini, na jina la mtumiaji lazima liwe na urefu wa kati ya vibambo 8 na 20:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Wacha tuangalie hali ya SQL ambayo hufanyika wakati hakuna herufi maalum zinazochujwa:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Katika taarifa ya sindano iliyo hapo juu, hatukuchuja tofauti ya $name, na taarifa ya SQL ambayo hatuitaji imeingizwa kwenye $name, ambayo itafuta data yote katika jedwali la watumiaji.

mysqli_query() katika PHP hairuhusiwi kutekeleza taarifa nyingi za SQL, lakini katika SQLite na PostgreSQL, taarifa nyingi za SQL zinaweza kutekelezwa kwa wakati mmoja, kwa hivyo tunahitaji kuthibitisha data ya watumiaji hawa.

Ili kuzuia sindano ya SQL, tunahitaji kuzingatia mambo yafuatayo:

  • 1. Usiamini kamwe ingizo la mtumiaji.Angalia ingizo la mtumiaji, unaweza kutumia misemo ya kawaida, au kupunguza urefu; kubadilisha nukuu moja na mara mbili "-", nk.
  • 2. Kamwe usitumie sql ya kuunganisha inayobadilika, unaweza kutumia sql iliyo na vigezo au utumie moja kwa moja taratibu zilizohifadhiwa kwa hoja na ufikiaji wa data.
  • 3. Kamwe usitumie miunganisho ya hifadhidata na haki za msimamizi, tumia miunganisho tofauti ya hifadhidata na upendeleo mdogo kwa kila programu.
  • 4. Usihifadhi taarifa za siri moja kwa moja, usimbe kwa njia fiche au uharakishe manenosiri na taarifa nyeti.
  • 5. Taarifa ya ubaguzi wa programu inapaswa kutoa vidokezo vichache iwezekanavyo, na ni bora kutumia maelezo ya hitilafu maalum ili kufunga maelezo ya awali ya hitilafu.
  • 6. Mbinu ya kugundua ya sindano sql kwa ujumla inachukua msaidiziProgramuAu jukwaa la tovuti la kugundua, programu kwa ujumla hutumia zana ya kugundua sindano ya sql jsky, jukwaa la tovuti lina zana ya kugundua jukwaa la usalama la tovuti ya Yisi. MDCSOFT SCAN et al.Kutumia MDCSOFT-IPS kunaweza kulinda dhidi ya sindano ya SQL, mashambulizi ya XSS, nk.

Zuia Sindano ya SQL

Katika lugha za uandishi kama vile Perl na PHP unaweza kuepuka data iliyoingizwa na mtumiaji ili kuzuia sindano ya SQL.

Kiendelezi cha MySQL cha PHP hutoa kazi ya mysqli_real_escape_string() ili kuepuka herufi maalum za ingizo.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Sindano katika Taarifa Kama

Wakati wa kuuliza kama, ikiwa mtumiaji ataingiza thamani na "_" na "%", hii itafanyika: mtumiaji alitaka kuuliza "abcd_", lakini matokeo ya hoja ni pamoja na "abcd_", "abcde", na "abcdf". " Nk.; tatizo pia hutokea wakati mtumiaji anataka kuuliza "30%" (kumbuka: asilimia thelathini).

Katika hati ya PHP tunaweza kutumia kazi ya addcslashes() kushughulikia hali iliyo hapo juu, kama ilivyo katika mfano ufuatao:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

Kitendaji cha addcslashes() kinaongeza kurudi nyuma kabla ya herufi maalum.

Umbizo la sintaksia:

addcslashes(string,characters)
参数描述
stringInahitajika.Inabainisha mfuatano wa kukagua.
wahusikaHiari.Hubainisha herufi au safu ya herufi zilizoathiriwa na addcslash ().

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) ilishirikiwa "Je, MySQL inazuiaje sindano ya sql? sql kanuni ya sindano na kuzuia", itakusaidia.

Karibu kushiriki kiungo cha makala hii:https://www.chenweiliang.com/cwl-500.html

Karibu kwenye chaneli ya Telegramu ya blogu ya Chen Weiliang ili kupata masasisho mapya zaidi!

🔔 Kuwa wa kwanza kupata "Mwongozo wa Matumizi ya Zana ya AI ya Uuzaji wa Maudhui ya ChatGPT" katika saraka ya juu ya kituo! 🌟
📚 Mwongozo huu una thamani kubwa, 🌟Hii ni fursa adimu, usiikose! ⏰⌛💨
Share na like ukipenda!
Kushiriki kwako na kupenda kwako ndio motisha yetu inayoendelea!

 

发表 评论

Anwani yako ya barua pepe haitachapishwa. 必填 项 已 用 * 标注

tembeza juu