mysql_real_escape_string()

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา mysql_real_escape_string()

mysql_real_escape_string()

mysql_real_escape_string() ใช้ยังไงหรือครับ

เห็นเขาบอกกันว่าสามารถแฮคกันได้ง่ายๆเลยโดยส่งค่าไปในรูปแบบนี้ครับ

username : admin , password : ' or '1' = '1 

ผมก็งง อยู่เหมือนกันว่า ส่งไปยังไงทั้งที่เข้าไม่รู้ว่า ฐานข้อมูลของเราชื่ออะไรตารางชื่ออะไร งงมากเลย

แล้วคำสั่ง mysql_real_escape_string() นี้มาช่วยยังไงหรือครับ

ขอบรบกวนทำให้ผมกระจ่างทีครับมึนและก็ งงครับ

ขอบคุณมากครับ



Cpuhost 124.122.44.xxx 24-11-2009 17:12:43

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

เป็นฟังก์ชันสำหรับเลี่ยงการใช้ตัวอักขระพิเศษในคำสั่ง sql  เช่น เครื่องหมาย ' เป็นต้น เพื่่อให้ได้คำสั่ง sql ที่ปลอดภัยสำหรับการ query หรือปลอดภัยจากการเรียกใช้ฟังก์ชัน mysql_query
ยกเว้นเครื่องหมาย % และ _ ซึ่งมีใช้ในคำสั่ง sql
ตัวอย่าง

<?php 
$item = "Zak's and Derick's Laptop"; 
$escaped_item = mysql_real_escape_string($item); 
?>

จากตัวอย่าง ตัวแปร $item จะมีเครื่องหมาย single qoute ( ' ) ซึ่งเป็นอัขระพิเศษ
เมื่อมีการเรียกใช้ฟังก์ชัน mysql_real_escape_string() แล้วเก็บค่าไว้ที่ตัวแปร $escaped_item

ผลลัพธิ์ที่ได้ตัวแปร $escaped_item จะเก็บค่าเท่ากับ
 "Zak\'s and Derick's Laptop";
โดยจะมีการ เครื่องหมาย \ นำหน้า อักขระพิเศษ
ซึ่งจะมีประโยชน์สำหรับใช้ในการเลี่ยงอักขระพิเศษในคำสั่ง sql

ส่วนการ แฮคข้อมูลโดยการกรอกข้อมูล ที่กล่าวมา สามารถเป็นไปได้ในกรณีระบบล็อกอิน ไม่ปลอดภัย
หรือการใช้คำสั่ง sql ตรวจสอบการล็อกอินไม่ดีพอ หรือ server มีการตั้งค่าระบบไม่มีความปลอดภัย
การใช้ฟังก์ชัน mysql_real_escape_string()  มากรองคำสั่ง sql จึงเป็นวิธีที่ปลอดภัย

เช่น คำสั่ง sql สำหรับตรวจสอบการล็อกอินเป็น ดังนี้
$q="SELECT * FROM member WHERE username='$username' and password='$password' ";
หากป้อนข้อมูล username : admin , password : ' or '1' = '1  คำสั่ง sql ก็จะได้เป็น
$q="SELECT * FROM user WHERE username='admin' and password=''  or '1' = '1' ";
ถ้าเป็นตามรูปแบบด้านบน จะทำให้สามารถแฮคเข้าระบบล็อกอินได้
หากใช้ฟังก์ชัน mysql_real_escape_string() เช่น
$q="SELECT * FROM member WHERE username='$username' and password='$password' ";
$q=mysql_real_escape_string($q);
ค่า $q สุดท้าย คือ
$q="SELECT * FROM user WHERE username='admin' and password='\'  or \'1\' =\'1\' ";
การ query คำสัง sql ก็จะปลอดภัย

ฟังก์ชัน mysql_real_escape_string() จะคล้ายกับฟังก์ชัน mysql_escape_string() แตกต่างที่
การเรียกใช้งานคำสั่ง mysql_real_escape_string() ต้องมีการติดต่อกับฐานข้อมูล เพื่อสร้าง  link_identifier
กล่าวคือหน้านั้นต้องมีการติดต่อกับฐานข้อมูล

ความกังวลเรื่องความปลอดภัย ใช้ว่าเราต้องใช้ฟังก์ชัน mysql_real_escape_string() เสมอไป เพราะโดยส่วนใหญ่
หาก มีการกำหนดค่า magic_quotes_gpc() เท่ากับ on หรือ 1 หรือ true แล้ว ระบบก็จะเลี่ยงอักขระพิเศษ ให้กับตัวแปร
GET POST COOKIE  ให้โดยอัตโนมัติ ทดสอบด้วยคำสั่งต่อไปนี้

<?php 
echo get_magic_quotes_gpc(); // หากค่าที่ได้เป็น 1 หมายความว่า ค่าที่ส่งจากตัวแปรจะเลือกอักขระพิเศษโดยอัตโนมัติ
?> 
หรือทดสอบโดยการสร้างฟอร์ม มี input textbox และ input submit กรอกเครื่องหมาย ' ใน input textbox แล้วกดปุ่ม submit แล้ว echo ค่าที่ส่งมา หากเครื่องหมาย ' มี \ อยู่ข้างหน้า แสดงว่า get_magic_quotes_gpc() มีค่า เท่ากับ 1 แสดงว่า ระบบมีเลี่ยงอักขระพิเศษ ให้กับตัวแปร GET POST COOKIE ให้โดยอัตโนมัติ


ninenik 124.121.245.xxx 25-11-2009
 ความคิดเห็นที่ 2

sql injection

ลองหาดูในกูเกิลเพียบครับ



amdev 202.28.179.xxx 25-11-2009 08:23






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ