จากการวิจัยเพิ่มเติมฉันพบว่า:
http://dev.mysql.com/doc/refman/5.1/th/news-5-1-11.html
แก้ไขความปลอดภัย:
พบช่องโหว่ด้านความปลอดภัยการฉีด SQL ในการประมวลผลการเข้ารหัสแบบหลายไบต์ จุดบกพร่องอยู่ในเซิร์ฟเวอร์การแยกวิเคราะห์สตริงที่ไม่ถูกต้องที่ใช้ Escape ด้วยฟังก์ชัน mysql_real_escape_string () C API
ช่องโหว่นี้ถูกค้นพบและรายงานโดย Josh Berkus และ Tom Lane ซึ่งเป็นส่วนหนึ่งของความร่วมมือด้านความปลอดภัยระหว่างโครงการของกลุ่ม OSDB สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแทรก SQL โปรดดูข้อความต่อไปนี้
อภิปรายผล. พบช่องโหว่ด้านความปลอดภัยการแทรก SQL ในการประมวลผลการเข้ารหัสแบบหลายไบต์ ช่องโหว่การรักษาความปลอดภัยการแทรก SQL อาจรวมถึงสถานการณ์ที่เมื่อผู้ใช้ให้ข้อมูลเพื่อแทรกลงในฐานข้อมูลผู้ใช้อาจฉีดคำสั่ง SQL ลงในข้อมูลที่เซิร์ฟเวอร์จะดำเนินการ สำหรับช่องโหว่นี้เมื่อมีการใช้การหลีกเลี่ยงการตั้งค่าอักขระโดยไม่รู้ตัว (ตัวอย่างเช่น addlashes () ใน PHP) จึงเป็นไปได้ที่จะข้ามการหลีกเลี่ยงในชุดอักขระแบบหลายไบต์ (เช่น SJIS, BIG5 และ GBK) ด้วยเหตุนี้ฟังก์ชันเช่น addlashes () จึงไม่สามารถป้องกันการโจมตีด้วย SQL-injection เป็นไปไม่ได้ที่จะแก้ไขปัญหานี้ในฝั่งเซิร์ฟเวอร์ ทางออกที่ดีที่สุดคือให้แอปพลิเคชันใช้การหลีกเลี่ยงการตั้งค่าอักขระที่เสนอโดยฟังก์ชันเช่น mysql_real_escape_string ()
อย่างไรก็ตามตรวจพบข้อบกพร่องในวิธีที่เซิร์ฟเวอร์ MySQL แยกวิเคราะห์ผลลัพธ์ของ mysql_real_escape_string () ด้วยเหตุนี้แม้ว่าจะมีการใช้ฟังก์ชันการตั้งค่าอักขระ mysql_real_escape_string () การแทรก SQL ก็เป็นไปได้ ข้อบกพร่องนี้ได้รับการแก้ไขแล้ว
วิธีแก้ปัญหา หากคุณไม่สามารถอัปเกรด MySQL เป็นเวอร์ชันที่มีการแก้ไขข้อบกพร่องในการแยกวิเคราะห์ mysql_real_escape_string () แต่เรียกใช้ MySQL 5.0.1 ขึ้นไปคุณสามารถใช้โหมด NO_BACKSLASH_ESCAPES SQL เป็นวิธีแก้ปัญหาได้ (โหมดนี้ถูกนำมาใช้ใน MySQL 5.0.1) NO_BACKSLASH_ESCAPES เปิดใช้งานโหมดความเข้ากันได้มาตรฐานของ SQL โดยที่แบ็กสแลชไม่ถือเป็นอักขระพิเศษ ผลลัพธ์ก็คือการสืบค้นจะล้มเหลว
ในการตั้งค่าโหมดนี้สำหรับการเชื่อมต่อปัจจุบันให้ป้อนคำสั่ง SQL ต่อไปนี้:
SET sql_mode='NO_BACKSLASH_ESCAPES';
คุณยังสามารถตั้งค่าโหมดทั่วโลกสำหรับไคลเอนต์ทั้งหมด:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
โหมด SQL นี้ยังสามารถเปิดใช้งานโดยอัตโนมัติเมื่อเซิร์ฟเวอร์เริ่มทำงานโดยใช้ตัวเลือกบรรทัดคำสั่ง --sql-mode = NO_BACKSLASH_ESCAPES หรือโดยการตั้งค่า sql-mode = NO_BACKSLASH_ESCAPES ในไฟล์ตัวเลือกเซิร์ฟเวอร์ (ตัวอย่างเช่น my.cnf หรือ my.ini ขึ้นอยู่กับระบบของคุณ) (ข้อบกพร่อง # 8378, CVE-2006-2753)
ดูข้อบกพร่อง # 8303 ด้วย