Hvernig kemur MySQL í veg fyrir sql innspýtingu? SQL innspýting meginregla og forvarnir

MySQLHvernig á að koma í veg fyrir sql innspýtingu? SQL innspýting meginregla og forvarnir

MySQL og SQL innspýting

Ef þú tekur gögnin sem notandinn hefur slegið inn í gegnum vefsíðu og setur þau inn í aMySQL gagnagrunnur, þá gæti verið SQL innspýting öryggisvandamál.

Þessi kafli mun kynna hvernig á að koma í veg fyrir SQL innspýtingu og sía inndældu stafi í SQL í gegnum forskriftir.

Svokölluð SQL innspýting er til að blekkja þjóninn til að framkvæma skaðlegar SQL skipanir með því að setja SQL skipanir inn á vefformið til að senda inn eða setja inn fyrirspurnarstreng lénsins eða síðubeiðnarinnar.

Við ættum aldrei að treysta inntak notenda, við verðum að gera ráð fyrir að inntaksgögn notenda séu óörugg og við þurfum öll að sía inntaksgögn notenda.

Í eftirfarandi dæmi verður notandanafnið sem slegið er inn að vera sambland af bókstöfum, tölustöfum og undirstrikum og notandanafnið verður að vera á milli 8 og 20 stafir að lengd:

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

Við skulum kíkja á SQL aðstæðurnar sem eiga sér stað þegar engir sérstafir eru síaðir:

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

Í ofangreindri innspýtingaryfirlýsingu síuðum við ekki breytuna af $name. SQL setningin sem við þurfum ekki er sett inn í $name, sem mun eyða öllum gögnum í notendatöflunni.

mysqli_query() í PHP er ekki leyft að keyra margar SQL staðhæfingar, en í SQLite og PostgreSQL er hægt að keyra margar SQL staðhæfingar á sama tíma, þannig að við þurfum að sannreyna nákvæmlega gögn þessara notenda.

Til að koma í veg fyrir SQL innspýtingu þurfum við að borga eftirtekt til eftirfarandi atriði:

  • 1. Treystu aldrei inntak notenda.Athugaðu innslátt notandans, þú getur notað reglubundnar orðasambönd, eða takmarkað lengdina; umbreyttu stökum gæsalappir og tvöfaldar „-“ o.s.frv.
  • 2. Aldrei nota dynamic assembly sql, þú getur notað parameterized sql eða notað beint geymdar aðferðir fyrir gagnafyrirspurn og aðgang.
  • 3. Notaðu aldrei gagnagrunnstengingar með stjórnandaréttindi, notaðu aðskildar gagnagrunnstengingar með takmörkuðum réttindum fyrir hvert forrit.
  • 4. Ekki geyma trúnaðarupplýsingar beint, dulkóða eða hash út lykilorð og viðkvæmar upplýsingar.
  • 5. Undantekningarupplýsingar forritsins ættu að gefa eins fáar vísbendingar og mögulegt er og best er að nota sérsniðnar villuupplýsingar til að vefja upprunalegu villuupplýsingarnar
  • 6. Uppgötvunaraðferðin við sql innspýtingu samþykkir almennt aukabúnaðHugbúnaðurEða vefsíðuvettvangurinn til að greina, hugbúnaðurinn notar almennt sql innspýtingarskynjunartólið jsky og vefsvæðið er með Yisi vefsíðuöryggisvettvangsgreiningartólinu. MDCSOFT SCAN o.fl.Notkun MDCSOFT-IPS getur í raun varið gegn SQL innspýtingu, XSS árásum osfrv.

Koma í veg fyrir SQL innspýting

Í forskriftarmálum eins og Perl og PHP geturðu sloppið við gögnin sem notandinn hefur slegið inn til að koma í veg fyrir SQL innspýtingu.

MySQL viðbótin fyrir PHP býður upp á mysqli_real_escape_string() aðgerðina til að komast undan sérstökum innsláttarstöfum.

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

Innspýting í eins yfirlýsingum

Þegar spurt er eins og, ef notandinn slær inn gildi með "_" og "%", mun þetta gerast: notandinn vildi upphaflega spyrja "abcd_", en niðurstöður fyrirspurnarinnar innihalda "abcd_", "abcde" og "abcdf" " O.s.frv.; vandamálið kemur einnig upp þegar notandinn vill spyrja "30%" (athugið: þrjátíu prósent).

Í PHP handritinu getum við notað addcslashes() aðgerðina til að takast á við ofangreindar aðstæður, eins og í eftirfarandi dæmi:

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

Addcslashes() aðgerðin bætir við bakskástu á undan tilgreindum staf.

Setningafræði snið:

addcslashes(string,characters)
参数lýsing
bandÁskilið.Tilgreinir strenginn sem á að athuga.
stafirValfrjálst.Tilgreinir staf eða svið stafa sem hafa áhrif á addcslashes().

Hope Chen Weiliang blogg ( https://www.chenweiliang.com/ ) deildi „Hvernig kemur MySQL í veg fyrir sql innspýtingu? sql innspýtingarreglu og forvarnir“, mun það hjálpa þér.

Velkomið að deila tengli þessarar greinar:https://www.chenweiliang.com/cwl-500.html

Velkomin á Telegram rásina á bloggi Chen Weiliang til að fá nýjustu uppfærslurnar!

🔔 Vertu fyrstur til að fá dýrmæta „ChatGPT Content Marketing AI Notkunarleiðbeiningar“ í efstu möppu rásarinnar! 🌟
📚 Þessi handbók inniheldur mikið gildi, 🌟Þetta er sjaldgæft tækifæri, ekki missa af því! ⏰⌛💨
Deildu og likeðu ef þú vilt!
Deiling þín og líkar við eru stöðug hvatning okkar!

 

发表 评论

Netfangið þitt verður ekki birt. Nauðsynlegir reitir eru notaðir * Merkimiði

flettu efst