Bawo ni MySQL ṣe ṣe idiwọ abẹrẹ sql? Ilana abẹrẹ SQL ati idena

MySQLBawo ni lati ṣe idiwọ abẹrẹ sql? Ilana abẹrẹ SQL ati idena

MySQL ati SQL abẹrẹ

Ti o ba mu data ti olumulo ti tẹ nipasẹ oju-iwe wẹẹbu kan ki o si fi sii sinu aMySQL database, lẹhinna awọn iṣoro aabo abẹrẹ SQL le wa.

Ori yii yoo ṣafihan bi o ṣe le ṣe idiwọ abẹrẹ SQL ati ṣe àlẹmọ awọn ohun kikọ itasi ni SQL nipasẹ awọn iwe afọwọkọ.

Ohun ti a pe ni abẹrẹ SQL ni lati tan olupin naa jẹ lati ṣiṣẹ awọn aṣẹ SQL irira nipa fifi awọn aṣẹ SQL sii sinu fọọmu wẹẹbu lati fi silẹ tabi tẹ okun ibeere ti orukọ ìkápá tabi ibeere oju-iwe sii.

A ko gbọdọ gbẹkẹle igbewọle olumulo, a gbọdọ ro pe data titẹ olumulo ko lewu, ati pe gbogbo wa nilo lati ṣe àlẹmọ data igbewọle olumulo.

Ninu apẹẹrẹ atẹle, orukọ olumulo ti a tẹ gbọdọ jẹ akojọpọ awọn lẹta, awọn nọmba, ati awọn ami abẹlẹ, ati pe orukọ olumulo gbọdọ wa laarin awọn lẹta 8 ati 20 gigun:

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

Jẹ ki a wo ipo SQL ti o waye nigbati awọn ohun kikọ pataki ko ṣe iyọda:

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

Ninu alaye abẹrẹ ti o wa loke, a ko ṣe àlẹmọ oniyipada ti orukọ $, ati pe alaye SQL ti a ko nilo ni a fi sii sinu orukọ $, eyiti yoo pa gbogbo data rẹ kuro ninu tabili awọn olumulo.

mysqli_query() ni PHP ko gba ọ laaye lati ṣiṣẹ awọn alaye SQL pupọ, ṣugbọn ni SQLite ati PostgreSQL, awọn alaye SQL pupọ le ṣee ṣe ni akoko kanna, nitorinaa a nilo lati rii daju data ti awọn olumulo wọnyi ni muna.

Lati yago fun abẹrẹ SQL, a nilo lati fiyesi si awọn aaye wọnyi:

  • 1. Ma gbekele olumulo input.Ṣayẹwo titẹ sii olumulo, o le lo awọn ikosile deede, tabi fi opin si ipari; yi awọn agbasọ ẹyọkan pada ati ilọpo “-”, ati bẹbẹ lọ.
  • 2. Maṣe lo apejọ ti o ni agbara sql, o le lo sql parameterized tabi lo awọn ilana ti o fipamọ taara fun ibeere data ati iwọle.
  • 3. Maṣe lo awọn asopọ data pẹlu awọn anfani alakoso, lo awọn asopọ data lọtọ pẹlu awọn anfani to lopin fun ohun elo kọọkan.
  • 4. Maṣe tọju alaye asiri taara, encrypt tabi hash awọn ọrọ igbaniwọle ati alaye ifura.
  • 5. Alaye imukuro ti ohun elo yẹ ki o fun awọn imọran diẹ bi o ti ṣee, ati pe o dara julọ lati lo alaye aṣiṣe aṣa lati fi ipari si alaye aṣiṣe atilẹba.
  • 6. Ọna wiwa ti abẹrẹ sql ni gbogbogbo gba iranlọwọSọfitiwiaTabi iru ẹrọ oju opo wẹẹbu lati ṣawari, sọfitiwia ni gbogbogbo nlo ohun elo wiwa abẹrẹ sql jsky, pẹpẹ oju opo wẹẹbu ni ohun elo wiwa ipilẹ aabo oju opo wẹẹbu Yisi. MDCSOFT SCAN et al.Lilo MDCSOFT-IPS le daabobo imunadoko lodi si abẹrẹ SQL, awọn ikọlu XSS, ati bẹbẹ lọ.

Dena SQL Abẹrẹ

Ni awọn ede kikọ gẹgẹbi Perl ati PHP o le sa fun data ti olumulo tẹ lati ṣe idiwọ abẹrẹ SQL.

Ifaagun MySQL fun PHP n pese iṣẹ mysqli_real_escape_string() lati sa fun awọn kikọ titẹ sii pataki.

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

Abẹrẹ ni Like Gbólóhùn

Nigbati o ba n beere bi, ti iye ti olumulo ba ni "_" ati "%", eyi yoo ṣẹlẹ: olumulo fẹ ni akọkọ lati beere "abcd_", ṣugbọn "abcd_", "abcde" ati "abcdf" wa ninu Abajade ibeere ati bẹbẹ lọ; iṣoro naa tun waye nigbati olumulo ba fẹ lati beere "30%" (akọsilẹ: ọgbọn ogorun).

Ninu iwe afọwọkọ PHP a le lo iṣẹ addcslashes () lati mu ipo ti o wa loke, bi ninu apẹẹrẹ atẹle:

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

Awọn iṣẹ addcslashes () ṣe afikun ifẹhinti ẹhin ṣaaju ohun kikọ ti a pato.

Ọna kika:

addcslashes(string,characters)
Apaadiapejuwe
okunTi beere fun.Ntọka okun lati ṣayẹwo.
ohun kikọiyan.Pato ohun kikọ silẹ tabi ibiti o ti ni ipa nipasẹ addcslashes ().

Ireti Chen Weiliang Blog ( https://www.chenweiliang.com/ ) pín "Bawo ni MySQL ṣe ṣe idiwọ abẹrẹ sql? Ilana abẹrẹ sql ati idena", yoo ran ọ lọwọ.

Kaabo lati pin ọna asopọ ti nkan yii:https://www.chenweiliang.com/cwl-500.html

Kaabọ si ikanni Telegram ti bulọọgi Chen Weiliang lati gba awọn imudojuiwọn tuntun!

🔔 Jẹ ẹni akọkọ lati gba “ChatGPT Akoonu Titaja AI Itọsọna Lilo Ọpa” ti o niyelori ni itọsọna oke ikanni! 🌟
📚 Itọsọna yii ni iye nla, 🌟Eyi jẹ aye to ṣọwọn, maṣe padanu rẹ! ⏰⌛💨
Pin ati fẹran ti o ba fẹ!
Pinpin rẹ ati awọn ayanfẹ jẹ iwuri wa lemọlemọfún!

 

发表 评论

Adirẹsi imeeli rẹ kii yoo ṣe atẹjade. Awọn aaye ti o nilo ni a lo * 标注

yi lọ si oke