mysql_real_escape_string()
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา mysql_real_escape_string()
mysql_real_escape_string() ใช้ยังไงหรือครับ
เห็นเขาบอกกันว่าสามารถแฮคกันได้ง่ายๆเลยโดยส่งค่าไปในรูปแบบนี้ครับ
username : admin , password : ' or '1' = '1
ผมก็งง อยู่เหมือนกันว่า ส่งไปยังไงทั้งที่เข้าไม่รู้ว่า ฐานข้อมูลของเราชื่ออะไรตารางชื่ออะไร งงมากเลย
แล้วคำสั่ง mysql_real_escape_string() นี้มาช่วยยังไงหรือครับ
ขอบรบกวนทำให้ผมกระจ่างทีครับมึนและก็ งงครับ
ขอบคุณมากครับ

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
เป็นฟังก์ชันสำหรับเลี่ยงการใช้ตัวอักขระพิเศษในคำสั่ง sql เช่น เครื่องหมาย ' เป็นต้น เพื่่อให้ได้คำสั่ง sql ที่ปลอดภัยสำหรับการ query หรือปลอดภัยจากการเรียกใช้ฟังก์ชัน mysql_query
ยกเว้นเครื่องหมาย % และ _ ซึ่งมีใช้ในคำสั่ง sql
ตัวอย่าง
1 2 3 4 | <?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 ให้โดยอัตโนมัติ ทดสอบด้วยคำสั่งต่อไปนี้
1 2 3 | <?php echo get_magic_quotes_gpc(); // หากค่าที่ได้เป็น 1 หมายความว่า ค่าที่ส่งจากตัวแปรจะเลือกอักขระพิเศษโดยอัตโนมัติ ?> |

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