การเขียนสคริปต์ข้ามไซต์คืออะไร?

ช่องโหว่ประเภทหนึ่งที่พบบ่อยที่สุดในเว็บไซต์เรียกว่า "Cross-Site Scripting" หรือ "XSS" ช่องโหว่ XSS เป็นที่ที่ผู้ใช้สามารถทำให้ JavaScript ทำงาน มีช่องโหว่ XSS หลากหลายรูปแบบ โดยมีระดับความรุนแรงต่างกันไป

ปัญหาที่ผู้โจมตีสามารถรัน JavaScript ในเซสชันของผู้ใช้รายอื่นคือ ผู้โจมตีสามารถทำอะไรก็ได้กับเว็บไซต์ที่เหยื่อเห็น ซึ่งรวมถึงการเปลี่ยนเส้นทางเหยื่อไปยังเว็บไซต์ภายนอก การขโมยโทเค็นการตรวจสอบสิทธิ์ และการตรวจสอบรายละเอียดการชำระเงิน

รูปแบบที่ร้ายแรงที่สุดของช่องโหว่ XSS คือ "Stored" หรือ "Persistent" Cross-Site Scripting ซึ่งเป็นที่ที่ เป็นไปได้ที่ผู้โจมตีจะสร้างเพย์โหลด XSS แล้วส่ง ดังนั้นมันจึงถูกบันทึกไว้ในฐานข้อมูล ด้วยการบันทึกช่องโหว่ XSS ในฐานข้อมูล จึงเป็นไปได้ที่มันจะส่งผลกระทบต่อผู้ใช้รายอื่นในช่วงเวลากว้างๆ

อีกรูปแบบหนึ่งของ Cross-Site Scripting คือ “Reflected” ซึ่งประเภทนี้จะไม่ถูกบันทึก ณ จุดใด ๆ แต่เพย์โหลดจะรวมอยู่ในเบราว์เซอร์แทน โดยทั่วไปแล้ว XSS ประเภทนี้เป็นส่วนหนึ่งของการโจมตีแบบฟิชชิ่ง ซึ่งผู้โจมตีจะพยายามหลอกล่อเหยื่อให้คลิกลิงก์ที่เป็นอันตราย

โดยทั่วไป การโจมตี XSS ส่วนใหญ่จะมีเพย์โหลดที่ส่งไปยังเซิร์ฟเวอร์ในบางจุด แต่การโจมตีบางอย่างมี ฝั่งไคลเอ็นต์ล้วนๆ ไม่เคยถูกส่งไปยังเซิร์ฟเวอร์ แต่จะมีผลกับฝั่งไคลเอ็นต์เท่านั้น จาวาสคริปต์ สิ่งนี้เรียกว่า XSS แบบ DOM เนื่องจากยังคงอยู่ใน JavaScript Document Object Model หรือ DOM ช่องโหว่ประเภทนี้ยากต่อการระบุและแก้ไขเป็นพิเศษ เนื่องจากเซิร์ฟเวอร์ไม่เคยเห็นช่องโหว่นี้ ดังนั้นจึงไม่สามารถบันทึกได้

ในอดีต เทคนิคการป้องกันช่องโหว่ XSS คือการกรองข้อมูลที่ผู้ใช้ส่งมาทั้งหมด โดยใช้รายการบล็อกเพื่อปฏิเสธข้อความใดๆ ที่มีอักขระหรือคำที่มีความหมายใน JavaScript สิ่งนี้มีแนวโน้มที่จะนำไปสู่การแข่งขันทางอาวุธในการค้นหาบายพาสสำหรับตัวกรองในขณะเดียวกันก็ป้องกันไม่ให้ผู้ใช้ส่งอย่างถูกกฎหมาย วิธีแก้ไขที่ถูกต้องคือการใช้เอนทิตี HTML เพื่อเข้ารหัสข้อมูลที่ผู้ใช้ส่งมา เมื่อเปิดใช้งานโมดูลเอนทิตี HTML อักขระจะถูกเข้ารหัสโดยอัตโนมัติในรูปแบบที่เบราว์เซอร์รู้ว่าจะแสดงอักขระเหล่านี้เป็นสัญลักษณ์ที่ถูกต้องแต่จะไม่ถือว่าเป็นโค้ด