Чӣ тавр MySQL тазриқи sql-ро пешгирӣ мекунад? Принсипи тазриқи SQL ва пешгирӣ

MySQLЧӣ тавр пешгирӣ кардани тазриқи sql? Принсипи тазриқи SQL ва пешгирӣ

MySQL ва тазриқи SQL

Агар шумо маълумоти воридкардаи корбарро тавассути веб саҳифа гирифта, онро ба aпойгоҳи додаҳои MySQL, он гоҳ мушкилоти амнияти тазриқи SQL вуҷуд дорад.

Ин боб нишон медиҳад, ки чӣ гуна пешгирӣ кардани тазриқи SQL ва филтр кардани аломатҳои воридшуда дар SQL тавассути скриптҳо.

Ба истилоҳ тазриқи SQL ин фиреб додани сервер барои иҷрои фармонҳои SQL-и зараровар тавассути ворид кардани фармонҳои SQL ба шакли веб барои ирсол ё ворид кардани сатри дархости номи домен ё дархости саҳифа мебошад.

Мо набояд ҳеҷ гоҳ ба воридоти корбар бовар кунем, мо бояд фарз кунем, ки маълумоти вуруди корбар хатарнок аст ва ҳамаи мо бояд маълумоти воридшудаи корбарро филтр кунем.

Дар мисоли зерин номи корбарии воридшуда бояд маҷмӯи ҳарфҳо, рақамҳо ва зерхаттиҳо бошад ва номи корбар бояд аз 8 то 20 аломат бошад:

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

Биёед вазъияти SQL-ро бубинем, ки ҳангоми филтр нашудани аломатҳои махсус рух медиҳад:

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

Дар изҳороти тазриқи боло мо тағирёбандаи $name-ро филтр накардаем.Ифодаи SQL, ки ба мо лозим нест, ба $name дохил карда шудааст, ки ҳамаи маълумотҳои ҷадвали корбаронро нест мекунад.

mysqli_query() дар PHP барои иҷро кардани изҳороти сершумори SQL иҷозат дода намешавад, аммо дар SQLite ва PostgreSQL изҳороти сершумори SQL-ро дар як вақт иҷро кардан мумкин аст, аз ин рӯ мо бояд маълумоти ин корбаронро ба таври қатъӣ тафтиш кунем.

Барои пешгирии тазриқи SQL, мо бояд ба нуктаҳои зерин диққат диҳем:

  • 1. Ҳеҷ гоҳ ба вуруди корбар бовар накунед.Вуруди корбарро санҷед, шумо метавонед ибораҳои муқаррариро истифода баред ё дарозиро маҳдуд кунед; табдили нохунакҳои ягона ва дукаратаи "-" ва ғайра.
  • 2. Ҳеҷ гоҳ sql-и монтажи динамикӣ истифода набаред, шумо метавонед sql-и параметриро истифода баред ё барои дархости додаҳо ва дастрасӣ мустақиман расмиёти захирашударо истифода баред.
  • 3. Ҳеҷ гоҳ пайвастҳои пойгоҳи додаҳоро бо имтиёзҳои администратор истифода набаред, барои ҳар як барнома пайвастҳои алоҳидаи пойгоҳи додаҳоро бо имтиёзҳои маҳдуд истифода баред.
  • 4. Маълумоти махфиро мустақиман нигоҳ надоред, паролҳо ва иттилооти ҳассосро рамзгузорӣ кунед ё ҳаш кунед.
  • 5. Маълумоти истисноии барнома бояд ба қадри имкон камтар маслиҳат диҳад ва беҳтар аст, ки иттилооти хатогии фармоиширо барои печонидани маълумоти хатогии аслӣ истифода баред.
  • 6. Усули муайянкунии тазриқи sql умуман ёрирасонро қабул мекунад软件Ё платформаи вебсайт барои ошкор кардан, нармафзор умуман асбоби муайянкунии сӯзандоруи sql jsky -ро истифода мебарад ва платформаи вебсайт дорои асбоби муайянкунии платформаи амнияти вебсайти Yisi мебошад. MDCSOFT SCAN ва дигарон.Истифодаи MDCSOFT-IPS метавонад аз тазриқи SQL, ҳамлаҳои XSS ва ғайра самаранок муҳофизат кунад.

Пешгирии тазриқи SQL

Дар забонҳои скрипт, ба монанди Perl ва PHP, шумо метавонед аз маълумоти воридкардаи корбар гурезед, то тазриқи SQL пешгирӣ карда шавад.

Васеъгардонии MySQL барои PHP функсияи mysqli_real_escape_string()-ро барои фирор аз аломатҳои махсуси вурудӣ таъмин мекунад.

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

Тазриқ дар изҳороти монанд

Ҳангоми пурсиш ба монанди, агар корбар арзишҳоро бо "_" ва "%" ворид кунад, ин рӯй медиҳад: корбар аввал мехост "abcd_" -ро пурсад, аммо натиҷаҳои дархост "abcd_", "abcde" ва "abcdf" -ро дар бар мегиранд. " Ва ғайра; мушкилот инчунин вақте ба миён меояд, ки корбар мехоҳад "30%" пурсад (эзоҳ: сӣ фоиз).

Дар скрипти PHP мо метавонем функсияи addcslashes()-ро барои ҳалли вазъияти дар боло зикршуда истифода барем, чунон ки дар мисоли зерин:

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

Функсияи addcslashes() пеш аз аломати муайян хатти баръакс илова мекунад.

Формати синтаксис:

addcslashes(string,characters)
параметртавсиф
дандТалаб карда мешавад.Сатрро барои тафтиш муайян мекунад.
аломатҳоиИхтиёрӣ.Аломат ё диапазони аломатҳоеро, ки аз addcslashes () осеб дидаанд, муайян мекунад.

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) муштарак "Чӣ гуна MySQL тазриқи sql-ро пешгирӣ мекунад? Принсипи тазриқи sql ва пешгирӣ", он ба шумо кӯмак мекунад.

Хуш омадед ба мубодилаи истиноди ин мақола:https://www.chenweiliang.com/cwl-500.html

Хуш омадед ба канали Telegram блоги Чен Вейлян барои гирифтани навсозиҳои охирин!

🔔 Аввалин шуда дар феҳристи болоии канал "Дастури истифодаи абзори AI-и ChatGPT Content Marketing" -ро гиред! 🌟
📚 Ин дастур дорои арзиши бузург аст, 🌟Ин як имконияти нодир аст, онро аз даст надиҳед! ⏰⌛💨
Агар ба шумо маъқул бошад, мубодила кунед ва лайк монед!
Мубодилаи шумо ва лайкҳои шумо ангезаи доимии мост!

 

发表 评论

Суроғаи почтаи электронии шумо нашр карда намешавад. 必填 项 已 用 * Нишон

ба боло ҳаракат кунед