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 injection โดยทั่วไปใช้ auxiliary软件หรือแพลตฟอร์มเว็บไซต์เพื่อตรวจจับ ซอฟต์แวร์โดยทั่วไปใช้เครื่องมือตรวจจับการฉีด 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()

หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ ) แชร์ " MySQL ป้องกันการฉีด sql ได้อย่างไร? หลักการและการป้องกันการฉีด sql" จะช่วยคุณได้

ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-500.html

ยินดีต้อนรับสู่ช่อง Telegram ของบล็อกของ Chen Weiliang เพื่อรับข่าวสารล่าสุด!

🔔 เป็นคนแรกที่ได้รับ "คู่มือการใช้งานเครื่องมือ AI การตลาดเนื้อหา ChatGPT" อันทรงคุณค่าในไดเรกทอรีด้านบนของช่อง! 🌟
📚 คู่มือนี้มีคุณค่ามหาศาล 🌟 นี่เป็นโอกาสที่หายาก อย่าพลาด! ⏰⌛💨
แชร์และชอบถ้าคุณชอบ!
การแบ่งปันและไลค์ของคุณเป็นแรงจูงใจอย่างต่อเนื่องของเรา!

 

发表评论

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ 必填项已用 * 标注