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 ເພື່ອຮັບອັບເດດຫຼ້າສຸດ!
📚ຄູ່ມືນີ້ມີຄຸນຄ່າອັນມະຫາສານ, 🌟ນີ້ເປັນໂອກາດທີ່ຫາຍາກ, ຢ່າພາດມັນ! ⏰⌛💨
Share and like ຖ້າມັກ!
ການແບ່ງປັນແລະການຖືກໃຈຂອງທ່ານແມ່ນການຊຸກຍູ້ຢ່າງຕໍ່ເນື່ອງຂອງພວກເຮົາ!