บทความนี้จะแนะนำความแตกต่างระหว่างการใช้ mysql_real_escape_string เพื่อจัดเรียงและประมวลผลข้อมูลที่ผู้ใช้ส่งมา และการใช้ฟังก์ชันที่คล้ายกัน 3 รายการ ได้แก่ addslashes และ mysql_escape_string ข้อมูล Escape สามารถแทรกลงในฐานข้อมูลได้โดยตรง
เป็นคำอธิบายที่ดีเกี่ยวกับความแตกต่างระหว่าง addslashes และ mysql_real_escape_string แม้ว่าผู้เขียนโค้ด PHP ในประเทศจำนวนมากยังคงใช้ addslashes เพื่อป้องกันการฉีด SQL (รวมถึงฉันด้วย) ฉันยังคงแนะนำให้ทุกคนเสริมการตรวจสอบเพื่อป้องกันการฉีด SQL ในภาษาจีน ปัญหาของ addslashes คือแฮกเกอร์สามารถใช้ 0xbf27 เพื่อแทนที่เครื่องหมายคำพูดเดี่ยวได้ ในขณะที่ addslashes จะเปลี่ยนเฉพาะ 0xbf27 เป็น 0xbf5c27 ซึ่งกลายเป็นอักขระหลายไบต์ที่ถูกต้อง 0xbf5c ยังคงถือเป็นเครื่องหมายคำพูดเดี่ยว ดังนั้น addslashes จึงไม่สามารถสกัดกั้นได้สำเร็จ
แน่นอนว่า addslashes นั้นไม่มีประโยชน์ มันถูกใช้สำหรับการประมวลผลสตริงแบบไบต์เดียว สำหรับอักขระแบบหลายไบต์ ให้ใช้ mysql_real_escape_string
นอกจากนี้ สำหรับตัวอย่างของ get_magic_quotes_gpc ในคู่มือ PHP:
ถ้า (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} อื่น {
$lastname = $_POST['นามสกุล'];
-
ทางที่ดีควรตรวจสอบ $_POST['lastname'] เมื่อ magic_quotes_gpc เปิดอยู่แล้ว
มาพูดถึงความแตกต่างระหว่างสองฟังก์ชัน mysql_real_escape_string และ mysql_escape_string:
mysql_real_escape_string สามารถใช้ได้เฉพาะเมื่อ (PHP 4 >= 4.3.0, PHP 5) มิฉะนั้น คุณสามารถใช้ได้เฉพาะ mysql_escape_string เท่านั้น ความแตกต่างระหว่างทั้งสองคือ:
mysql_real_escape_string จะคำนึงถึงชุดอักขระปัจจุบันของการเชื่อมต่อ ในขณะที่ mysql_escape_string จะไม่พิจารณา
โดยสรุป:
addslashes() เป็นการบังคับเพิ่มเติม
mysql_real_escape_string() จะกำหนดชุดอักขระ แต่มีข้อกำหนดสำหรับเวอร์ชัน PHP
mysql_escape_string จะไม่พิจารณาชุดอักขระปัจจุบันของการเชื่อมต่อ