
หน้านี้มีฟังก์ชันสำหรับ ยืนยันตัวตนผู้ใช้งาน (User Authentication) เพื่อให้เฉพาะผู้ที่มีบัญชีถูกต้องเท่านั้นที่สามารถเข้าสู่ระบบได้
กลไกการทำงาน:
สิ่งที่ควรจะเป็น (Security Expectation): ตรวจสอบข้อมูลอย่างปลอดภัย

จากการสแกนด้วยเครื่องมือ RIPS พบว่าโค้ดมีการสร้างคำสั่ง SQL แบบไม่ปลอดภัย โดยมีลักษณะดังนี้

Userinput reaches sensitive sink 45: echo “http://” . $_SERVER[“HTTP_HOST”] . htmlspecialchars($_SERVER[“REQUEST_URI”], ENT_QUOTES, “UTF-8”);
ช่องโหว่นี้เกิดจากการนำข้อมูลที่ผู้ใช้ควบคุมได้มาแสดงผลบนหน้าเว็บโดยไม่มีการป้องกันอย่างครบถ้วน
$_SERVER[“HTTP_HOST”] $_SERVER[“REQUEST_URI”]
ค่าทั้งสองนี้มาจาก HTTP Request ซึ่งผู้โจมตีสามารถดัดแปลงได้ เช่น เปลี่ยนค่า Host Header ใส่ Script ผ่าน URL
แม้ REQUEST_URI จะถูกครอบด้วย htmlspecialchars() แล้ว แต่ HTTP_HOST ยังไม่ได้ถูกกรอง
echo “http://” . $_SERVER[“HTTP_HOST”] . htmlspecialchars($_SERVER[“REQUEST_URI”], ENT_QUOTES, “UTF-8”);
คำสั่ง echo คือจุดแสดงผลข้อมูล (Output) หากมี JavaScript ถูกแทรกเข้ามา ระบบจะสะท้อนกลับไปยังเบราว์เซอร์ทันที
การตรวจสอบที่ไม่เพียงพอ:
ไว้วางใจข้อมูลจาก HTTP Header มากเกินไป ไม่กรองค่าของ HTTP_HOST แสดงผลข้อมูลโดยตรงผ่าน echo
เพื่อให้เข้าใจการทำงานของช่องโหว่ เราจะจำลองพฤติกรรมของผู้โจมตีดังนี้:
การวิเคราะห์ URL: จากไฟล์ aim.php พบบรรทัดที่ 45 ดังนี้ echo "http://" . $_SERVER["HTTP_HOST"] . htmlspecialchars($_SERVER["REQUEST_URI"], ENT_QUOTES, "UTF-8");
การทดสอบผ่าน URL:ผู้โจมตีจะลองใส่ JavaScript ผ่าน URL เช่น**
[?language=/etc/passwd](http://target/aim.php/<script>alert('XSS')</script>)
หรืออาจแก้ไขค่า HTTP Host Header ให้เป็น:
[?language=/etc/passwd](http://target/aim.php/<script>alert('XSS')</script>)
จุดประสงค์: แสดงให้เห็นว่าผู้โจมตีสามารถรัน JavaScript บนเบราว์เซอร์ของผู้ใช้ได้ ซึ่งอาจนำไปสู่การขโมยข้อมูลสำคัญ เช่น Session Cookie
ผลลัพธ์ที่ได้: แสดงว่าผู้โจมตีสามารถรัน JavaScript บนหน้าเว็บได้มไม่สำเร็จ
ในกรณีนี้ ตัวแปร $_SERVER[“HTTP_HOST”] และ $_SERVER[“REQUEST_URI”] เป็นข้อมูลที่ผู้ใช้สามารถควบคุมได้ ดังนั้นก่อนนำไปแสดงผลผ่าน echo ต้องทำการเข้ารหัส HTML ให้ครบถ้วน
ทำไมวิธีนี้ถึงปลอดภัย?
switch($_GET["language"]) {
// ✅ echo htmlspecialchars(
"http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"],
ENT_QUOTES,
"UTF-8"
);
// ❌ echo "http://" . $_SERVER["HTTP_HOST"] . htmlspecialchars($_SERVER["REQUEST_URI"], ENT_QUOTES, "UTF-8");
}


หลังจากแก้ไขโค้ดแล้ว ว่าระบบทำงานถูกต้อง:

การดำเนินการแก้ไขช่องโหว่ Cross-Site Scripting (XSS) ในระบบ bWAPP เสร็จสิ้นสมบูรณ์ โดยได้ปรับปรุงโค้ดในไฟล์ aim.php ด้วยหลักการ Output Encoding ผ่านการใช้คำสั่ง htmlspecialchars() ครอบข้อมูลก่อนแสดงผล การแก้ไขครั้งนี้สามารถป้องกันการรัน JavaScript ที่ถูกฝังผ่าน URL หรือ HTTP Header ได้อย่างมีประสิทธิภาพ ลดความเสี่ยงจากการถูกขโมย Session, การโจมตีแบบ Defacement และการ Redirect ผู้ใช้ไปยังเว็บไซต์อันตราย