PHP การป้องกัน SQL Injection


หน้าแรก PHP MySQL เกร็ดความรู้ PHP การป้องกัน SQL Injection
วันนี้ผมก็มาบอก เทคนิคเขียน PHP และการป้องกัน SQL Injection กันครับ เพื่อความปลอยภัยของข้อมูลนะครับ
แล้วเจ้า SQL Injection มันคืออะไร เอาไว้ทำอะไร ป้องกันอย่างไร

SQL Injection ก็คือ การโจมตีด้วย SQL มันคือการใส่คําสั่งหรือแฝงคําสั่ง SQL เข้าไปในส่วนของข้อมูล HTTP request
เพื่อที่จะส่งคำสั่งจากผู้ใช้ไปยัง HTTP Server เพื่อทําการ query, insert, update, delete
หรืออื่นๆ เพื่อกระทํากับฐานข้อมูลหรือระบบการทํางานของ Server ตามแต่ความสามารถของคําสั่ง SQL จะไปถึง
และตามช่องโหว่ของการเขียนโปรแกรม

ตัวอย่าง SQL Injection Attack

$query = "SELECT * FROM users WHERE user='{$_POST['username']}'
AND password='{$_POST['password']}'";
mysql_query($query);

จะเห็นว่าถ้าผู้ไม่ประสงค์ดี ส่งข้อมูลผ่าน HTTP Request ด้วยเครื่องมือหรือเทคโนโลยีต่างๆ มาแบบนี้ละก็
user = xxx’ or ’1=1
password = xxx’ or ’1=1

ไม่ต้องสืบต่อเลยครับ ล็อคอินได้แน่นอน ก็เพราะว่าจะได้คำสั่งที่สมบรูณ์แบบทุกอย่างดังนี้

SELECT * FROM users WHERE user=’xxx’ or ’1=1′ AND password =’xxx’ or ’1=1′ เห้นมั้ยครับว่าคำสั่ง
ถูกต้องทุกอย่างเลย

ต่อไปเรามาดูวิธีที่ช่วยป้องกันได้ในระดับนึง

ตัวอย่าง Protect SQL Injection Attack

การป้องกัน SQL Injection Attack php ก็มีให้พวกเราได้ใช้อย่างง่ายๆ มันก็คือ mysql_real_escape_string นั้นเอง

// Query
$query = sprintf(" SELECT * FROM users WHERE user='%s' AND password='%s' ",
mysql_real_escape_string($_POST['username']),
mysql_real_escape_string($_POST['password']) );

มันก็คือการ escape parameter ที่ส่งมาซะก่อนนั้นเอง จะปลอยภัยต่อการโจมดีแบบด้านบนแล้วครับ

หวังว่าเป็นประโยชน์กับเพื่อนๆ ที่เริ่มเขียน PHP ติดต่อฐานข้อมูลนะครับ

อ้างอิง :

http://th.php.net/manual/en/function.mysql-real-escape-string.php

ขอบคุณครับ

ขึ้นไปด้านบน