MySQL нь sql шахалтаас хэрхэн сэргийлдэг вэ? SQL тарилгын зарчим ба урьдчилан сэргийлэх

MySQLSql injection-аас хэрхэн сэргийлэх вэ? SQL тарилгын зарчим ба урьдчилан сэргийлэх

MySQL болон SQL тарилга

Хэрэв та хэрэглэгчийн оруулсан өгөгдлийг вэб хуудсаар дамжуулан авч, aMySQL мэдээллийн сан, дараа нь SQL тарилгын аюулгүй байдлын асуудал гарч болзошгүй.

Энэ бүлэгт SQL injection-аас хэрхэн сэргийлэх, 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-д оруулсан бөгөөд энэ нь хэрэглэгчдийн хүснэгт дэх бүх өгөгдлийг устгах болно.

PHP дэх mysqli_query() нь олон SQL хэллэгийг гүйцэтгэхийг зөвшөөрдөггүй, харин SQLite болон PostgreSQL-д олон SQL хэллэгийг зэрэг гүйцэтгэх боломжтой тул бид эдгээр хэрэглэгчдийн өгөгдлийг хатуу шалгах хэрэгтэй.

SQL тарилга хийхээс урьдчилан сэргийлэхийн тулд бид дараахь зүйлийг анхаарч үзэх хэрэгтэй.

  • 1. Хэрэглэгчийн оруулсан мэдээлэлд хэзээ ч бүү итгэ.Хэрэглэгчийн оруулсан мэдээллийг шалгана уу, та ердийн илэрхийлэл ашиглах эсвэл уртыг хязгаарлах; ганц хашилтыг хөрвүүлэх, давхар "-" гэх мэт.
  • 2. Динамик ассемблей sql-г хэзээ ч бүү ашигла, та параметржүүлсэн sql ашиглах эсвэл өгөгдлийн асуулга болон хандалтад шууд хадгалагдсан процедурыг ашиглаж болно.
  • 3. Администраторын эрхтэй өгөгдлийн сангийн холболтыг хэзээ ч бүү ашиглаарай, програм бүрт хязгаарлагдмал эрхтэй тусдаа мэдээллийн сангийн холболтыг ашиглаарай.
  • 4. Нууц мэдээллийг шууд хадгалах, нууц үг болон нууц мэдээллийг шифрлэх, задлахгүй байх.
  • 5. Програмын үл хамаарах мэдээлэл нь аль болох цөөн зөвлөмж өгөх ёстой бөгөөд анхны алдааны мэдээллийг боохдоо өөрчлөн тохируулсан алдааны мэдээллийг ашиглах нь зүйтэй.
  • 6. Sql injection илрүүлэх арга нь ерөнхийдөө туслах аргыг ашигладагПрограм хангамжЭсвэл вэбсайтын платформыг илрүүлэхийн тулд програм хангамж нь ерөнхийдөө sql тарилга илрүүлэх хэрэгслийг jsky ашигладаг бол вэбсайтын платформ нь Yisi вэбсайтын аюулгүй байдлын платформ илрүүлэх хэрэгсэлтэй. MDCSOFT SCAN нар.MDCSOFT-IPS-ийг ашиглах нь SQL injection, XSS халдлагаас үр дүнтэй хамгаалж чадна.

SQL Injection-ээс урьдчилан сэргийлэх

Perl, PHP зэрэг скрипт хэл дээр та SQL injection-аас сэргийлэхийн тулд хэрэглэгчийн оруулсан өгөгдлөөс зугтаж болно.

PHP-д зориулсан MySQL өргөтгөл нь тусгай оролтын тэмдэгтүүдээс зайлсхийхийн тулд 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}'");

Like Statements injection

Хэрэв хэрэглэгч "_" ба "%" гэсэн утгуудыг оруулбал ийм зүйл тохиолдох болно: хэрэглэгч анх "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 блог ( https://www.chenweiliang.com/ ) хуваалцсан "MySQL sql injection-ээс хэрхэн сэргийлдэг вэ? sql тарилгын зарчим ба урьдчилан сэргийлэх", энэ нь танд туслах болно.

Энэ нийтлэлийн холбоосыг хуваалцахад тавтай морилно уу:https://www.chenweiliang.com/cwl-500.html

Чен Вэйляны блогын Telegram сувагт тавтай морил, хамгийн сүүлийн үеийн мэдээг аваарай!

🔔 Сувгийн шилдэг лавлахаас "ChatGPT Content Marketing AI Tool Usage Guide"-г хамгийн түрүүнд аваарай! 🌟
📚 Энэхүү гарын авлага нь асар их үнэ цэнийг агуулсан, 🌟Энэ бол ховор боломж, бүү алдаарай! ⏰⌛💨
Хэрэв танд таалагдвал лайк дарж, хуваалцаарай!
Таны хуваалцах, дуртай зүйл бол бидний байнгын урам зориг юм!

 

发表 评论

Таны имэйл хаяг нийтлэгдэхгүй. 必填 项 已 用 дээр ажиллаж байна * 标注

滚动 到 顶部