Ki jan MySQL anpeche piki sql? Prensip piki SQL ak prevansyon

MisklKi jan yo anpeche piki sql? Prensip piki SQL ak prevansyon

Miskl ak piki SQL

Si ou pran done itilizatè a antre nan yon paj entènèt epi mete yo nan yonbaz done MySQL, Lè sa a, ka gen pwoblèm sekirite piki SQL.

Chapit sa a pral prezante kijan pou anpeche piki SQL ak filtre karaktè yo enjekte nan SQL atravè scripts.

Sa yo rele SQL piki a se twonpe sèvè a pou egzekite move kòmandman SQL pa mete kòmandman SQL nan fòm entènèt la pou soumèt oswa antre fisèl la rechèch nan non an domèn oswa demann paj.

Nou pa ta dwe janm fè konfyans itilizatè opinyon, nou dwe asime ke done opinyon itilizatè a pa an sekirite, epi nou tout bezwen filtre done opinyon itilizatè.

Nan egzanp sa a, non itilizatè a dwe yon konbinezon de lèt, nimewo, ak souliye, epi non itilizatè a dwe genyen ant 8 ak 20 karaktè:

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

Ann pran yon gade nan sitiyasyon SQL ki rive lè pa gen okenn karaktè espesyal yo filtre:

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

Nan deklarasyon piki ki anwo a, nou pa t filtre varyab $name, epi deklarasyon SQL ke nou pa bezwen an mete nan $name, ki pral efase tout done ki nan tablo itilizatè yo.

mysqli_query() nan PHP pa pèmèt yo egzekite plizyè deklarasyon SQL, men nan SQLite ak PostgreSQL, yo ka egzekite plizyè deklarasyon SQL an menm tan, kidonk nou bezwen entèdi verifye done itilizatè sa yo.

Pou anpeche piki SQL, nou bezwen peye atansyon sou pwen sa yo:

  • 1. Pa janm fè konfyans itilizatè opinyon.Tcheke opinyon itilizatè a, ou ka itilize ekspresyon regilye, oswa limite longè a; konvèti sitasyon sèl ak doub "-", elatriye.
  • 2. Pa janm sèvi ak sql asanble dinamik, ou ka itilize sql paramèt oswa dirèkteman itilize pwosedi ki estoke pou rechèch done ak aksè.
  • 3. Pa janm itilize koneksyon baz done ak privilèj administratè, sèvi ak koneksyon baz done separe ak privilèj limite pou chak aplikasyon.
  • 4. Pa sere enfòmasyon konfidansyèl dirèkteman, ankripte oswa hache modpas ak enfòmasyon sansib.
  • 5. Enfòmasyon eksepsyon aplikasyon an ta dwe bay kòm kèk sijesyon ke posib, epi li pi bon pou itilize enfòmasyon erè koutim pou vlope enfòmasyon orijinal erè a.
  • 6. Metòd deteksyon piki sql jeneralman adopte oksilyè软件Oswa platfòm sit entènèt la pou detekte, lojisyèl an jeneralman itilize zouti deteksyon sql piki jsky, ak platfòm sit entènèt la gen zouti deteksyon platfòm sekirite sit entènèt Yisi. MDCSOFT SCAN et al.Sèvi ak MDCSOFT-IPS ka efektivman defann kont piki SQL, atak XSS, elatriye.

Anpeche piki SQL

Nan lang scripting tankou Perl ak PHP ou ka chape done itilizatè a antre pou anpeche piki SQL.

Ekstansyon MySQL pou PHP bay fonksyon mysqli_real_escape_string() pou sove karaktè D 'espesyal yo.

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

Piki nan deklarasyon tankou

Lè w ap fè rechèch tankou, si valè itilizatè a te antre a gen "_" ak "%", sa a pral rive: itilizatè a orijinal te vle rechèch "abcd_", men gen "abcd_", "abcde", ak "abcdf" nan. rezilta rechèch la elatriye; pwoblèm nan rive tou lè itilizatè a vle rechèch "30%" (nòt: trant pousan).

Nan script PHP a nou ka itilize fonksyon addcslashes() pou jere sitiyasyon ki anwo a, tankou nan egzanp sa a:

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

Fonksyon addcslashes() ajoute yon backslash anvan karaktè espesifye a.

Fòma sentaks:

addcslashes(string,characters)
参数描述
fisèlObligatwa.Espesifye fisèl pou tcheke.
karaktèSi ou vle.Espesifye karaktè oswa seri karaktè ki afekte nan addcslashes().

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) pataje "Ki jan MySQL anpeche piki sql? sql piki prensip ak prevansyon", li pral ede w.

Byenvini pataje lyen atik sa a:https://www.chenweiliang.com/cwl-500.html

Byenveni nan chanèl Telegram blog Chen Weiliang a pou jwenn dènye mizajou yo!

🔔 Se pou premye moun ki jwenn bonjan "ChatGPT Content Maketing AI Itilizasyon Zouti Gid" nan anyè chanèl ki pi wo a! 🌟
📚 Gid sa a gen anpil valè, 🌟Sa a se yon opòtinite ki ra, pa rate li! ⏰⌛💨
Pataje epi like siw renmen!
Pataje w ak renmen ou se motivasyon kontinyèl nou!

 

kòmantè

Adrès imèl ou pa pral pibliye. Jaden obligatwa yo te itilize * Mete etikèt sou

woule nan tèt