Conas a chuireann MySQL cosc ​​​​ar instealladh sql? Prionsabal instealladh SQL agus cosc

MySQLConas instealladh sql a chosc? Prionsabal instealladh SQL agus cosc

MySQL agus instealladh SQL

Má ghlacann tú na sonraí a d'iontráil an t-úsáideoir trí leathanach gréasáin agus cuir isteach i aBunachar sonraí MySQL saor in aisce,, ansin d'fhéadfadh go mbeadh fadhbanna slándála instealladh SQL.

Tabharfar isteach sa chaibidil seo duit conas instealladh SQL a chosc agus scripteanna a úsáid chun carachtair insteallta a scagadh i SQL.

Is é an t-instealladh SQL mar a thugtar air ná an freastalaí a mhealladh chun orduithe SQL mailíseach a fhorghníomhú trí orduithe SQL a chur isteach san fhoirm ghréasáin chun teaghrán ceiste an ainm fearainn nó an iarratais leathanaigh a chur isteach nó a ionchur.

Níor cheart go mbeadh muinín againn as ionchur úsáideora riamh, ní mór dúinn glacadh leis go bhfuil sonraí ionchuir úsáideoirí neamhshábháilte, agus ní mór dúinn go léir sonraí ionchuir úsáideora a scagadh.

Sa sampla seo a leanas, caithfidh an t-ainm úsáideora iontrála a bheith ina mheascán de litreacha, d’uimhreacha, agus de bhunphointí, agus caithfidh an t-ainm úsáideora a bheith idir 8 agus 20 carachtar ar fad:

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

Breathnaímid ar chás SQL a tharlaíonn nuair nach ndéantar aon charachtair speisialta a scagadh:

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

Sa ráiteas insteallta thuas, níor scagamar an athróg de $name.Cuirtear an ráiteas SQL nach bhfuil ag teastáil uainn isteach i $name, rud a scriosfaidh na sonraí go léir sa tábla úsáideoirí.

mysqli_query() i PHP ní cheadaítear ráitis SQL iolracha a fhorghníomhú, ach is féidir le SQLite agus PostgreSQL ráitis iomadúla SQL a fhorghníomhú ag an am céanna, mar sin ní mór dúinn sonraí na n-úsáideoirí seo a fhíorú go docht.

Chun instealladh SQL a chosc, ní mór dúinn aird a thabhairt ar na pointí seo a leanas:

  • 1. Ná muinín ionchur úsáideora riamh.Seiceáil ionchur an úsáideora, is féidir leat nathanna rialta a úsáid, nó an fad a theorannú; tiontaigh comharthaí athfhriotail aonair agus "-" dúbailte, etc.
  • 2. Ná húsáid sql cóimeála dinimiciúil riamh, is féidir leat sql parameterized a úsáid nó nósanna imeachta stóráilte a úsáid go díreach le haghaidh fiosrúchán sonraí agus rochtain.
  • 3. Ná húsáid naisc bunachar sonraí le pribhléidí riarthóra riamh, bain úsáid as naisc bunachar sonraí ar leith le pribhléidí teoranta do gach feidhmchlár.
  • 4. Ná stóráil faisnéis rúnda go díreach, ná criptigh nó hash amach pasfhocail agus faisnéis íogair.
  • 5. Ba cheart go dtabharfadh faisnéis eisceachta an fheidhmchláir chomh beag leideanna agus is féidir, agus is fearr faisnéis earráide saincheaptha a úsáid chun an fhaisnéis earráide bunaidh a fhilleadh
  • 6. Glacann an modh braite de instealladh sql go ginearálta cúnta软件Nó an ardán láithreán gréasáin a bhrath, úsáideann na bogearraí an uirlis braite insteallta sql jsky go ginearálta, tá uirlis braite ardán slándála láithreán gréasáin Yisi ag an ardán láithreán gréasáin. MDCSOFT SCAN et al.Is féidir úsáid a bhaint as MDCSOFT-IPS a chosaint go héifeachtach i gcoinne instealladh SQL, ionsaithe XSS, etc.

Cosc a chur ar Instealladh SQL

I dteangacha scriptithe ar nós Perl agus PHP is féidir leat éalú ó na sonraí a d'iontráil an t-úsáideoir chun instealladh SQL a chosc.

Soláthraíonn an síneadh MySQL do PHP an fheidhm mysqli_real_escape_string() chun éalú ó charachtair ionchuir speisialta.

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

Instealladh i Ráitis Cosúil

Nuair a chuireann tú ceist ar nós, má tá "_" agus "%" ag an luach a chuir an t-úsáideoir isteach, tarlóidh sé seo: bhí an t-úsáideoir ag iarraidh "abcd_" a cheistiú ar dtús, ach tá "abcd_", "abcde", agus "abcdf" istigh toradh na ceiste Etc.; tarlaíonn an fhadhb freisin nuair is mian leis an úsáideoir "30%" a fhiosrú (nóta: tríocha faoin gcéad).

I script PHP is féidir linn an fheidhm addcslashes() a úsáid chun an cás thuas a láimhseáil, mar atá sa sampla seo a leanas:

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

Cuireann an fheidhm addcslashes() cúlslais leis roimh an gcarachtar sonraithe.

Formáid chomhréire:

addcslashes(string,characters)
参数tuairisc
teaghránAg teastáil.Sonraíonn an teaghrán le seiceáil.
carachtairRoghnach.Sonraíonn sé an carachtar nó raon na gcarachtar a bhfuil tionchar ag addcslashes().

Tá súil agam Blag Chen Weiliang ( https://www.chenweiliang.com/ ) shared” Conas a chuireann MySQL cosc ​​ar instealladh sql? prionsabal insteallta sql agus cosc", cabhróidh sé leat.

Fáilte romhat nasc an ailt seo a roinnt:https://www.chenweiliang.com/cwl-500.html

Fáilte chuig cainéal Telegram de bhlag Chen Weiliang chun na nuashonruithe is déanaí a fháil!

🔔 Bí ar an gcéad duine a gheobhaidh an "Treoir Úsáide Uirlisí AI Margaíochta Ábhair ChatGPT" luachmhar san eolaire barr na gcainéal! 🌟
📚 Tá luach ollmhór sa treoir seo, 🌟 Seo deis annamh, ná caill é! ⏰⌛💨
Roinnigí agus más maith libh!
Is iad do chomhroinnt agus do thaitin ár spreagadh leanúnach!

 

发表 评论

Ní fhoilseofar do sheoladh ríomhphoist. Úsáidtear réimsí riachtanacha * Lipéad

scrollaigh go dtí an barr