
XSS: ภัยเงียบที่แฮกเกอร์ใช้เล่นงานเว็บไซต์และผู้ใช้งาน
ถ้าพูดถึงภัยคุกคามบนโลกออนไลน์ หลายคนอาจนึกถึงไวรัสหรือการฟิชชิง แต่ยังมีภัยอีกรูปแบบหนึ่งที่ร้ายกาจไม่แพ้กัน และมักถูกมองข้าม นั่นคือ Cross-Site Scripting หรือที่เรียกสั้นๆ ว่า XSS เป็นช่องโหว่ด้านความปลอดภัยบนเว็บที่เปิดโอกาสให้ผู้ไม่หวังดีสามารถฝังโค้ดอันตรายลงไปในเว็บไซต์ที่เราใช้งาน และจากนั้นโค้ดเหล่านั้นก็จะถูกส่งไปทำงานบนเบราว์เซอร์ของผู้ใช้งานคนอื่นๆ ได้
XSS ไม่ได้โจมตีเซิร์ฟเวอร์โดยตรง แต่จะใช้ประโยชน์จากการที่เว็บไซต์ขาดการตรวจสอบและกรองข้อมูลที่ผู้ใช้งานป้อนเข้ามาอย่างเพียงพอ ทำให้แฮกเกอร์ส่ง สคริปต์อันตราย ซึ่งส่วนใหญ่เป็น JavaScript เข้าไปในหน้าเว็บ เมื่อเหยื่อเปิดหน้านั้นขึ้นมา สคริปต์ก็จะทำงานทันที เสมือนว่าเป็นส่วนหนึ่งของเว็บไซต์นั้นเลยทีเดียว
กลไกการทำงานของ XSS
ลองจินตนาการว่าเว็บไซต์ที่เราเข้าชม มีช่องให้เราพิมพ์ข้อความ เช่น ช่องแสดงความคิดเห็น หรือช่องค้นหา
เมื่อเราพิมพ์ข้อความปกติ ข้อมูลก็จะถูกแสดงผลออกมา แต่ถ้ามีใครบางคนหัวใส แทนที่จะพิมพ์ข้อความธรรมดา กลับป้อนโค้ด JavaScript ที่เป็นอันตรายเข้าไปแทน
หากเว็บไซต์นั้นไม่ได้มีการป้องกันที่ดี โค้ด JavaScript เหล่านั้นก็จะถูกบันทึกและแสดงผลออกมาบนหน้าเว็บจริงๆ เมื่อผู้ใช้งานคนอื่นๆ เข้ามาดูหน้าเว็บดังกล่าว เบราว์เซอร์ของพวกเขาก็จะมองว่าโค้ดนั้นเป็นส่วนหนึ่งของเว็บไซต์ที่เชื่อถือได้ และสั่งให้มันทำงานทันที
XSS มีกี่ประเภท?
ภัย XSS สามารถแบ่งออกได้เป็นหลายประเภท ขึ้นอยู่กับลักษณะการโจมตีและการแพร่กระจาย
Reflected XSS (แบบสะท้อนกลับ)
เป็นรูปแบบที่พบบ่อยที่สุด โค้ดอันตรายจะถูกส่งผ่าน URL หรือข้อมูลที่ผู้ใช้ป้อนเข้ามาในทันที ไม่ได้ถูกจัดเก็บไว้ในเซิร์ฟเวอร์ เช่น แฮกเกอร์อาจส่งลิงก์ที่มีโค้ดประสงค์ร้ายฝังอยู่ไปให้เหยื่อ เมื่อเหยื่อคลิกลิงก์นั้น โค้ดก็จะถูกส่งไปยังเว็บไซต์ และเว็บไซต์ก็ “สะท้อน” โค้ดกลับมายังเบราว์เซอร์ของเหยื่อทันที โค้ดจึงทำงานบนเครื่องของเหยื่อ ณ เวลานั้นๆ
Stored XSS (แบบถาวร)
นี่คือรูปแบบที่อันตรายที่สุด โค้ด JavaScript ที่เป็นอันตรายจะถูกบันทึกอย่างถาวรบนเซิร์ฟเวอร์ของเว็บไซต์ เช่น ในฐานข้อมูล หรือพื้นที่เก็บข้อมูลอื่นๆ ตัวอย่างเช่น การโพสต์คอมเมนต์ที่มีสคริปต์อันตรายบนเว็บบอร์ดหรือบล็อก เมื่อผู้ใช้งานคนใดก็ตามเข้ามาอ่านคอมเมนต์นั้น สคริปต์ก็จะทำงานโดยอัตโนมัติ ทำให้ผู้คนจำนวนมากตกเป็นเหยื่อได้ง่าย
DOM-based XSS (แบบอาศัย DOM)
แตกต่างจากสองแบบแรก ตรงที่ช่องโหว่ไม่ได้อยู่ที่การทำงานฝั่งเซิร์ฟเวอร์ แต่เกิดจากการที่เบราว์เซอร์ประมวลผลข้อมูลที่อยู่ใน DOM (Document Object Model) ของหน้าเว็บนั้นๆ ผู้โจมตีสามารถจัดการ DOM ผ่าน JavaScript เพื่อแทรกโค้ดอันตรายเข้าไปได้ โดยที่ข้อมูลอาจจะไม่ได้เดินทางไปถึงเซิร์ฟเวอร์เลยด้วยซ้ำ
แฮกเกอร์ทำอะไรได้บ้างเมื่อโจมตีสำเร็จ?
เมื่อการโจมตี XSS ประสบความสำเร็จ แฮกเกอร์สามารถทำอะไรได้หลายอย่างที่ส่งผลกระทบต่อผู้ใช้งานและเว็บไซต์
สิ่งที่น่ากลัวที่สุดคือ ขโมยข้อมูลสำคัญ เช่น Cookie Session ที่ใช้ระบุตัวตนของเราในการเข้าสู่ระบบ ทำให้แฮกเกอร์สามารถสวมรอยเป็นเราเพื่อเข้าถึงบัญชีต่างๆ ได้โดยไม่จำเป็นต้องรู้รหัสผ่าน
นอกจากนี้ ยังสามารถ เปลี่ยนเส้นทางผู้ใช้งาน ไปยังเว็บไซต์ปลอมที่สร้างขึ้นมาเพื่อขโมยข้อมูล (Phishing) หรือ แก้ไขเนื้อหา บนหน้าเว็บเพื่อแสดงข้อมูลที่เป็นอันตราย รวมถึง ติดตั้งมัลแวร์ หรือ ควบคุมเบราว์เซอร์ ของเหยื่อเพื่อกระทำการใดๆ ตามที่ต้องการได้อีกด้วย
การป้องกัน XSS: ทำได้ง่ายๆ แต่สำคัญมาก
สำหรับนักพัฒนาเว็บไซต์ การป้องกัน XSS เป็นสิ่งสำคัญอันดับต้นๆ ต้องเริ่มต้นจากการไม่เชื่อใจข้อมูลที่ผู้ใช้ป้อนเข้ามา
ตรวจสอบและกรองข้อมูล (Input Validation/Sanitization): ต้องตรวจสอบข้อมูลทุกประเภทที่ผู้ใช้ส่งเข้ามาอย่างละเอียด และกำจัดตัวอักษรพิเศษหรือแท็ก HTML ที่อาจเป็นอันตรายออกไปก่อนที่จะนำไปใช้งาน
เข้ารหัสผลลัพธ์ (Output Encoding): เมื่อจะนำข้อมูลที่ผู้ใช้ป้อนเข้ามาไปแสดงผลบนหน้าเว็บ ควรทำการ เข้ารหัส ข้อมูลเหล่านั้น เพื่อให้เบราว์ร์เซอร์มองว่าเป็นเพียงข้อความธรรมดา ไม่ใช่โค้ดที่ต้องรัน
ใช้ Content Security Policy (CSP): กำหนดนโยบายความปลอดภัยให้เบราว์เซอร์รู้ว่าสคริปต์หรือเนื้อหาใดบ้างที่ได้รับอนุญาตให้โหลดมาจากแหล่งใดได้ เพื่อบล็อกสคริปต์ที่ไม่พึงประสงค์
ตั้งค่า HTTPOnly สำหรับคุกกี้: การตั้งค่านี้จะป้องกันไม่ให้ JavaScript ฝั่งไคลเอนต์เข้าถึง Cookie Session ได้ ทำให้แฮกเกอร์ไม่สามารถขโมย Cookie Session ผ่าน XSS ได้ง่ายๆ
สำหรับผู้ใช้งานทั่วไป ควรระมัดระวังการคลิกลิงก์ที่ไม่น่าเชื่อถือ และหมั่นอัปเดตเบราว์เซอร์ให้เป็นเวอร์ชันล่าสุดเสมอ เพราะเบราว์เซอร์ที่อัปเดตแล้วมักจะมีกลไกป้องกันภัยคุกคามใหม่ๆ เพิ่มเข้ามา
การเข้าใจภัย XSS และรู้จักวิธีป้องกัน จะช่วยให้เราท่องโลกออนไลน์ได้อย่างปลอดภัยยิ่งขึ้น เพราะความปลอดภัยบนเว็บไม่ใช่เรื่องของใครคนใดคนหนึ่ง แต่เป็นความรับผิดชอบร่วมกันทั้งจากผู้พัฒนาและผู้ใช้งาน