Website หรือ Web application ที่ใช้กันอยู่ในทุกวันนี้ หากคุณเป็นเจ้าของเว็บไซต์นั้น แล้วจะรู้ได้อย่างไรว่าเว็บไซต์ของคุณมีความปลอดภัยมากน้อยเพียงใด วันนี้ผมจะมาพูดถึงรูปแบบการโจมตีและวิธีการป้องกันพื้นฐาน
SQL Injection
เป็นการแทรกชุดคำสั่งลงไปในฟอร์มต่างๆ อาทิเช่น Login form เป็นต้น เพื่อให้โปรแกรมทำงานผิดพลาดจากที่กำหนดเอาไว้
ซึ่งลักษณะ code ด้านในคร่าวๆ
$username = $_GET['username'];
$password = $_GET['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password';";
$result = mysql_query($query) or die(mysql_error());
if ($result && mysql_num_rows($result) == 1) {
echo "Welcome " . $username;
} else {
echo 'Uername and/or password incorrect.';
}
ตรงบรรทัดสีแดง คือ จะเป็นชุดคำสั่งสำหรับตรวจสอบว่า username กับ password ที่ป้อนมาเท่ากับ username และ password ที่อยู่ในฐานข้อมูลหรือไม่ ถ้าเท่ากันก็จะเข้าสู่ระบบ
ลักษณะการโจมตี
cracker จะป้อนชุดคำสั่ง SQL ลงไปเพื่อให้บบรทัดสีแดงทำงานผิดพลาดจากที่กำหนด อาทิเช่น abc' or '1'='1 เมื่อข้อความนี้ถูกนำไปประมวลผลร่วมกับบรรทัดสีแดงจะเป็นดังนี้
SELECT * FROM users WHERE username='abc' or '1' = '1' AND password=";
จะสามารถเข้าสู่ระบบได้โดยไม่ต้องมี password เลย เพราะจะทำให้ได้ค่าของ row
ส่วนการป้องกันนั้นเพียงแค่คุณใช้ function php ที่มีชื่อว่า mysql_real_escape_string() เท่านี้ เพราะ function ดังกล่าวจะทำการกรองข้อมูลที่ผู้ใช้ป้อนเข้ามาก่อนนำไปประมวลผล เช่น abc' or '1'='1 ก็จะได้เป็น abc\' or \'1\'=\'1
ไม่มีความเห็น