การรักษาความปลอดภัยของ Web Application

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

บันทึกนี้เขียนที่ GotoKnow โดย  ใน security



ความเห็น (0)