การเขียนสคริปต์ข้ามไซต์ (XSS)
11 นาทีอ่านความปลอดภัย
การเขียนสคริปต์ข้ามไซต์คือช่องโหว่ที่ผู้โจมตีแทรก JavaScript ที่ทำงานอยู่ในเบราว์เซอร์ของผู้ใช้รายอื่นราวกับว่าเป็นส่วนหนึ่งของไซต์ที่ถูกต้องตามกฎหมาย ความเสียหายมีตั้งแต่การขโมยคุกกี้เซสชันไปจนถึงการเรียก API ในนามของเหยื่อ XSS อยู่ใน OWASP Top 10 มาสองทศวรรษแล้ว และไม่มีทีท่าว่าจะจากไป
เนื้อหาบทความฉบับเต็มมีให้เป็นภาษาอังกฤษด้านล่าง
pages.learningArticles.cross-site-scripting.bodyHtml
คำถามที่พบบ่อย
- XSS ยังเกี่ยวข้องอยู่หรือไม่
- ใช่. แบบสำรวจล่าสุดของ OWASP แสดง XSS ในเกือบทุกเว็บแอปพลิเคชัน เฟรมเวิร์กสมัยใหม่ได้ลดความถี่ลง แต่แอปรุ่นเก่า โค้ดที่กำหนดเอง และ Edge Case ที่ยาวเหยียดทำให้ XSS เป็นหนึ่งในช่องโหว่บนเว็บที่ได้รับการรายงานมากที่สุด แพลตฟอร์มรางวัลข้อบกพร่องจะเห็นรายงาน XSS หลายร้อยรายการต่อสัปดาห์
- XSS และ CSRF แตกต่างกันอย่างไร?
- XSS แทรกโค้ดที่เป็นอันตรายลงในไซต์ที่เชื่อถือได้ โดยดำเนินการตามสิทธิ์ของไซต์ CSRF (การปลอมแปลงคำขอข้ามไซต์) หลอกเบราว์เซอร์ของเหยื่อให้ส่งคำขอไปยังไซต์ที่เชื่อถือได้จากแหล่งที่มาอื่น โดยใช้เซสชันของเหยื่อ ฟังดูคล้ายกัน แต่มีกลไกและการป้องกันที่แตกต่างกัน
- คุกกี้ HttpOnly ป้องกัน XSS หรือไม่
- บางส่วน. HttpOnly ป้องกัน JavaScript จากการอ่านคุกกี้ผ่าน document.cookie ซึ่งเอาชนะการโจมตีการกรองคุกกี้ เพย์โหลด XSS ยังคงสามารถสร้างคำขอที่มีการตรวจสอบสิทธิ์ได้ เนื่องจากเบราว์เซอร์จะส่งคุกกี้โดยอัตโนมัติ — HttpOnly หยุดความเสียหายระดับหนึ่งโดยเฉพาะ ไม่ใช่การโจมตีในวงกว้าง
- CSP สามารถกำจัด XSS โดยสิ้นเชิงได้หรือไม่
- CSP ที่เข้มงวด (ไม่อิงตาม ไม่มี 'ไม่ปลอดภัยในบรรทัด' หรือ 'ประเมินไม่ปลอดภัย') เป็นสิ่งที่ใกล้เคียงที่สุด มันไม่ได้ป้องกันการฉีดเอง แต่จะป้องกันไม่ให้เพย์โหลดที่ฉีดดำเนินการ เมื่อรวมกับการ Escape เอาต์พุตในแอปพลิเคชัน CSP ที่เข้มงวดจะทำให้การใช้ประโยชน์จาก XSS ในทางปฏิบัติทำได้ยากมาก
- ไซต์คงที่มีภูมิคุ้มกันหรือไม่
- ไม่ทั้งหมด XSS ที่ใช้ DOM ยังคงใช้งานได้บนไซต์คงที่ หาก JS ฝั่งไคลเอ็นต์ใช้พารามิเตอร์ URL อย่างไม่ปลอดภัย ไซต์ Pure-HTML ที่ไม่มี JavaScript จะไม่มี XSS "ไซต์แบบคงที่" ที่ทันสมัยที่สุดใช้ JavaScript เพียงพอซึ่ง XSS อาจเป็นปัญหาที่เป็นไปได้ (แม้ว่าจะพบได้ยาก)