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. ບໍ່ເຄີຍໃຊ້ dynamic assembly sql, ທ່ານສາມາດນໍາໃຊ້ parameterized sql ຫຼືໃຊ້ຂັ້ນຕອນການເກັບຮັກສາໂດຍກົງສໍາລັບການສອບຖາມຂໍ້ມູນແລະການເຂົ້າເຖິງ.
  • 3. ບໍ່ເຄີຍໃຊ້ການເຊື່ອມຕໍ່ຖານຂໍ້ມູນກັບສິດທິຂອງຜູ້ເບິ່ງແຍງລະບົບ, ໃຊ້ການເຊື່ອມຕໍ່ຖານຂໍ້ມູນແຍກຕ່າງຫາກທີ່ມີສິດທິຈໍາກັດສໍາລັບແຕ່ລະແອັບພລິເຄຊັນ.
  • 4. ຫ້າມເກັບຮັກສາຂໍ້ມູນລັບໂດຍກົງ, ເຂົ້າລະຫັດ ຫຼື hash ອອກລະຫັດຜ່ານ ແລະຂໍ້ມູນທີ່ລະອຽດອ່ອນ.
  • 5. ຂໍ້ມູນການຍົກເວັ້ນຂອງແອັບພລິເຄຊັນຄວນໃຫ້ຄໍາແນະນໍາຫນ້ອຍເທົ່າທີ່ເປັນໄປໄດ້, ແລະມັນດີທີ່ສຸດທີ່ຈະໃຊ້ຂໍ້ມູນຄວາມຜິດພາດທີ່ກໍານົດເອງເພື່ອຫໍ່ຂໍ້ມູນຄວາມຜິດພາດຕົ້ນສະບັບ.
  • 6. ວິທີການກວດຫາການສີດ sql ໂດຍທົ່ວໄປ adopts auxiliaryຊອບແວຫຼືແພລະຕະຟອມເວັບໄຊທ໌ເພື່ອກວດຫາ, ຊອບແວໂດຍທົ່ວໄປໃຊ້ເຄື່ອງມືກວດຫາການສີດ sql jsky, ແລະເວທີເວັບໄຊທ໌ມີເຄື່ອງມືກວດຫາແພລະຕະຟອມຄວາມປອດໄພເວັບໄຊທ໌ Yisi. MDCSOFT SCAN et al.ການນໍາໃຊ້ MDCSOFT-IPS ສາມາດປ້ອງກັນການສີດ SQL, ການໂຈມຕີ XSS, ແລະອື່ນໆ.

ປ້ອງກັນບໍ່ໃຫ້ SQL Injection

ໃນພາສາ scripting ເຊັ່ນ 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() ເພີ່ມ backslash ກ່ອນຕົວອັກສອນທີ່ລະບຸ.

ຮູບແບບ syntax:

addcslashes(string,characters)
ພາລາມິເຕີຄຳ ອະທິບາຍ
stringຕ້ອງການ.ລະບຸສະຕຣິງທີ່ຈະກວດສອບ.
ລັກສະນະທາງເລືອກ.ລະບຸລັກສະນະ ຫຼືໄລຍະຂອງຕົວອັກສອນທີ່ໄດ້ຮັບຜົນກະທົບຈາກ addcslashes().

ຫວັງ Chen Weiliang Blog ( https://www.chenweiliang.com/ ) shared "MySQL ປ້ອງກັນການສັກຢາ sql ແນວໃດ? ຫຼັກການການສັກຢາ sql ແລະການປ້ອງກັນ", ມັນຈະຊ່ວຍໃຫ້ທ່ານ.

ຍິນດີຕ້ອນຮັບແບ່ງປັນການເຊື່ອມຕໍ່ຂອງບົດຄວາມນີ້:https://www.chenweiliang.com/cwl-500.html

ຍິນດີຕ້ອນຮັບສູ່ຊ່ອງ Telegram ຂອງບລັອກຂອງ Chen Weiliang ເພື່ອຮັບອັບເດດຫຼ້າສຸດ!

🔔 ເປັນຜູ້ທຳອິດທີ່ໄດ້ຮັບ "ຄູ່ມືການໃຊ້ເຄື່ອງມືການຕະຫຼາດເນື້ອຫາ ChatGPT AI" ທີ່ມີຄຸນຄ່າໃນລາຍການທາງເທິງ! 🌟
📚ຄູ່ມືນີ້ມີຄຸນຄ່າອັນມະຫາສານ, 🌟ນີ້ເປັນໂອກາດທີ່ຫາຍາກ, ຢ່າພາດມັນ! ⏰⌛💨
Share and like ຖ້າມັກ!
ການ​ແບ່ງ​ປັນ​ແລະ​ການ​ຖືກ​ໃຈ​ຂອງ​ທ່ານ​ແມ່ນ​ການ​ຊຸກ​ຍູ້​ຢ່າງ​ຕໍ່​ເນື່ອງ​ຂອງ​ພວກ​ເຮົາ​!

 

评论评论

ທີ່ຢູ່ອີເມວຂອງທ່ານຈະບໍ່ຖືກເຜີຍແຜ່. ທົ່ງນາທີ່ກໍານົດໄວ້ແມ່ນຖືກນໍາໃຊ້ * ປ້າຍ ກຳ ກັບ

ເລື່ອນໄປເທິງສຸດ