ตัวอย่างของโค้ด PHP ที่มีช่องโหว่ด้านความปลอดภัยแบบ SQL Injection, XSS, และ การเก็บรหัสผ่านแบบไม่ปลอดภัย ซึ่งพบเห็นได้บ่อยๆ
ตัวอย่างโค้ดที่ไม่ปลอดภัย
login.php
<?php
include('db.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// เสี่ยงต่อ SQL Injection เพราะใช้วิธีต่อ string โดยตรง
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
echo "ยินดีต้อนรับ " . $username;
} else {
echo "รหัสผ่านผิด";
}
}
?>
ทำไมถึงไม่ปลอดภัย?
ระบบมีความปลอดภัยจากช่องโหว่ในส่วนต่อไปนี้ :
ประเภทช่องโหว่ | วิธีป้องกันที่ใช้ | สถานะ |
---|---|---|
SQL Injection | ใช้ prepared statement | ✅ ปลอดภัย |
Password Hashing | ใช้ bcrypt | ✅ ปลอดภัย |
XSS | ใช้ .escape() และ helmet | ✅ ปลอดภัย |
CSRF | ใช้ helmet (ป้องกันเบื้องต้น) | ✅ ปลอดภัยระดับเบื้องต้น |
Brute-force Attack | ใช้ express-rate-limit จำกัดความถี่ | ✅ ปลอดภัย |
Duplicate Usernames | ตรวจสอบก่อน insert | ✅ ปลอดภัย |
Weak Passwords | ตรวจสอบความแข็งแรงของรหัสผ่าน | ✅ ปลอดภัย |