
ระวัง! การโจมตี XSS แฝงมากับ Referrer Header
โลกออนไลน์ที่เราใช้งานกันอยู่ทุกวันเต็มไปด้วยความสะดวกสบาย แต่ก็แฝงไว้ด้วยความเสี่ยงที่นักพัฒนาและผู้ใช้งานต้องตระหนักถึงอยู่เสมอ หนึ่งในการโจมตีที่พบบ่อยและอันตรายคือ Cross-Site Scripting หรือ XSS ซึ่งมักจะเกิดจากการที่เว็บไซต์แสดงผลข้อมูลที่ผู้ใช้งานป้อนเข้ามาโดยไม่มีการตรวจสอบหรือ “กรอง” ให้ดีพอ
แต่มีบางกรณีที่การโจมตี XSS เกิดขึ้นในช่องทางที่ไม่คาดคิด อย่างเช่นการใช้ Referrer header ที่ถูกมองข้าม นี่คือเรื่องราวของการโจมตี XSS ประเภทหนึ่งที่แฝงมากับการส่งต่อข้อมูลที่เราอาจไม่ทันสังเกต
Reflected XSS: เมื่อข้อมูลสะท้อนกลับเป็นภัย
Reflected XSS เป็นการโจมตีที่สคริปต์อันตรายจะถูก “สะท้อน” กลับมาจากเซิร์ฟเวอร์ และถูกประมวลผลโดยเบราว์เซอร์ของผู้ใช้งาน มักจะเกิดจากการที่ URL หรือพารามิเตอร์บางอย่างถูกนำไปแสดงผลโดยตรงบนหน้าเว็บโดยไม่มีการตรวจสอบที่เพียงพอ
ในกรณีทั่วไป ผู้โจมตีจะสร้างลิงก์ที่มีโค้ดสคริปต์ฝังอยู่ แล้วหลอกให้เหยื่อคลิก เมื่อเหยื่อคลิก ลิงก์นั้นจะส่งคำขอไปยังเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะนำโค้ดสคริปต์นั้นไปแสดงผล ทำให้เบราว์เซอร์ของเหยื่อรันสคริปต์นั้นทันที
กลไกซ่อนเร้น: เมื่อ Referrer กลายเป็นภัย
กรณีที่เรากำลังพูดถึงนี้มีความพิเศษตรงที่ช่องโหว่ไม่ได้อยู่ที่ URL หรือช่องกรอกข้อมูลปกติ แต่เกิดขึ้นกับ Referrer header ซึ่งเป็นส่วนหนึ่งของข้อมูลที่เบราว์เซอร์ส่งไปยังเซิร์ฟเวอร์เพื่อบอกว่าผู้ใช้งานเข้าถึงหน้านั้นมาจากที่ไหน
ลองจินตนาการว่ามีเว็บไซต์ที่เมื่อผู้ใช้งานเข้ามาถึงแล้ว ระบบจะทำการ Redirect หรือเปลี่ยนเส้นทางไปยังหน้าอื่นโดยใช้ค่าจาก Referrer header เป็นตัวกำหนดปลายทาง
ปัญหาจะเกิดขึ้นเมื่อเว็บไซต์นั้นไม่ได้มีการตรวจสอบความถูกต้องหรือ Sanitize ค่าของ Referrer header ก่อนที่จะนำไปสร้างเป็น URL ปลายทางสำหรับการ Redirect
ผู้โจมตีสามารถสร้างหน้าเว็บปลอมขึ้นมา และเมื่อเหยื่อเข้าชมหน้าเว็บนั้น แล้วคลิกลิงก์เพื่อไปยังเว็บไซต์เป้าหมาย หน้าเว็บปลอมของผู้โจมตีก็จะส่งค่า Referrer header ที่มีโค้ดสคริปต์อันตรายแฝงอยู่ไปด้วย
เมื่อเว็บไซต์เป้าหมายได้รับคำขอนี้ ระบบก็จะนำค่า Referrer header ที่มีโค้ดสคริปต์นั้นไปสร้างเป็น Location header สำหรับการ Redirect ซึ่งเป็นเหมือนการบอกเบราว์เซอร์ว่า “ให้ไปที่ URL นี้”
ในจังหวะนี้เองที่เบราว์เซอร์ของผู้ใช้งานจะได้รับคำสั่ง Redirect ที่มีโค้ดสคริปต์ฝังอยู่ ทำให้เบราว์เซอร์เข้าใจผิดและรันโค้ดสคริปต์นั้นทันที
ผลกระทบที่อาจเกิดขึ้น
การโจมตีแบบนี้อาจนำไปสู่ผลลัพธ์ที่ร้ายแรงได้หลายประการ
ผู้โจมตีอาจขโมย Cookie หรือ Session ID ของผู้ใช้งาน ทำให้สามารถเข้าถึงบัญชีของผู้ใช้งานได้โดยไม่ต้องใช้รหัสผ่าน
สามารถฉีดเนื้อหาปลอม หรือเปลี่ยนหน้าตาของเว็บไซต์ได้ เพื่อหลอกลวงหรือทำลายชื่อเสียงของเว็บไซต์
รวมถึงสามารถทำการ Phishing หรือหลอกลวงข้อมูลสำคัญอื่นๆ ของผู้ใช้งานได้อีกด้วย
แนวทางป้องกัน: ป้อมปราการดิจิทัล
การป้องกันการโจมตีลักษณะนี้จำเป็นต้องใช้ความรอบคอบในการพัฒนาและการตั้งค่าระบบ
สิ่งสำคัญที่สุดคือการ ตรวจสอบและกรอง (Sanitize) ข้อมูลทั้งหมดที่มาจากผู้ใช้งาน ไม่ว่าจะเป็นใน URL, ช่องกรอกข้อมูล หรือแม้แต่ใน Header ต่างๆ อย่าง Referrer ก่อนนำไปใช้งานหรือแสดงผล
การตั้งค่า Content Security Policy (CSP) ที่เข้มงวดจะช่วยจำกัดแหล่งที่มาของสคริปต์ที่เบราว์เซอร์สามารถรันได้ ซึ่งเป็นการลดความเสี่ยงจากการโจมตี XSS ได้อย่างมาก
นอกจากนี้ การใช้แฟล็ก HttpOnly และ SameSite สำหรับ Cookie จะช่วยป้องกันไม่ให้สคริปต์ฝั่งไคลเอ็นต์เข้าถึง Cookie ที่สำคัญได้ ทำให้การโจมตี Session Hijacking ทำได้ยากขึ้น
ความเข้าใจในช่องโหว่ประเภทต่างๆ และการนำแนวทางปฏิบัติที่ดีที่สุดมาใช้ในการพัฒนาซอฟต์แวร์จึงเป็นสิ่งจำเป็นอย่างยิ่ง เพื่อสร้างสภาพแวดล้อมดิจิทัลที่ปลอดภัยสำหรับทุกคน