Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> ความปลอดภัยเครือข่าย

Cross-Site Scripting (XSS) แบบครบถ้วน: การป้องกัน การตรวจจับ และการแก้ไขสำหรับเว็บแอปพลิเคชัน

การโจมตี Cross-Site Scripting (XSS) ถูกกล่าวว่าเป็น injection attack ที่เกิดขึ้นมากที่สุด แต่แก้ไขได้ง่ายที่สุด ซึ่งเผชิญหน้าธุรกิจอีคอมเมิร์ซและแอปพลิเคชันเว็บหลากหลาย ตั้งแต่แอปพลิเคชันที่สร้างบนเทคโนโลยีเว็บเก่าๆ ไปจนถึงตัวใหม่ที่ใช้ rich client-side UIs ทั้งหมดถูก XSS รบกวน อย่างไรก็ตาม จำเป็นต้องตระหนักว่า ช่องโหว่ที่อาจก่อให้เกิด XSS attack สามารถตรวจจับและแก้ไขได้ทันท่วงที

การโจมตี Cross-site scripting เกิดขึ้นอย่างไร?

การโจมตี cross site scripting (XSS) เกิดขึ้นเมื่อ

  1. เว็บแอปพลิเคชันขอข้อมูล input ผ่านแหล่งที่ไม่น่าเชื่อถือ
  2. Dynamic content ที่ป้อนผ่าน web request ถูกใช้โดยไม่ได้ตรวจสอบว่าไม่มีเนื้อหาอันตราย
Cross-Site Scripting (XSS) แบบครบถ้วน: การป้องกัน การตรวจจับ และการแก้ไขสำหรับเว็บแอปพลิเคชัน

ตัวอย่างง่ายของ input data คือเมื่อเราส่งชื่อ, อีเมล, username-password หรือ input ใดๆ ในฟอร์ม ทุก input ด้านบนสามารถถูก manipulate ได้ หากโค้ดต้นทางไม่ validate input อย่างถูกต้อง โจมตีใช้ความไม่สามารถนี้ inject เนื้อหาอันตราย ซึ่งมักเป็น JavaScript code, HTML หรือโค้ดที่ browser execute ได้ ผู้ใช้ปลายทางไม่มีทางสงสัย script ที่ไม่น่าเชื่อถือ และจะ execute มันไป เมื่อ inject แล้ว script จะเข้าถึง cookies, session tokens หรือข้อมูลละเอียดอ่อนที่ใช้โดยไซต์นี้ได้

XSS attack มี 3 ประเภท:

  1. DOM Based Attack: เกิดจากการ inject โค้ดอันตรายจากฝั่ง client โค้ดที่ inject อาจเป็น JavaScript, Flash, Visual Basic ฯลฯ
  2. Persistent XSS Attack: เกิดเมื่อ payload ถูกเก็บฝั่ง server และถูก retrieve เมื่อมี user request หน้าเว็บ
  3. Non-Persistent XSS Attack: เกิดเมื่อ payload ถูก reflect กลับไปยัง user โดยการเปิดลิงก์ไปยังเว็บไซต์ที่เปราะบางพร้อม crafted input
Cross-Site Scripting (XSS) แบบครบถ้วน: การป้องกัน การตรวจจับ และการแก้ไขสำหรับเว็บแอปพลิเคชัน

โครงสร้างของการโจมตี Cross-site scripting (XSS)

โจมตี Exploit XSS อย่างไร?

โดยทั่วไป โจมตีใช้ XSS vulnerability เพื่อ extract session cookies ของ end user ซึ่งทำให้โจมตีเข้าถึงบัญชีของ user ได้ ตัวอย่างสถานการณ์ข้างต้นคือ:

  • เว็บไซต์ที่คุณเข้าถึงมีช่อง comment
  • โจมตีโพสต์ payload ต่อไปนี้ในส่วน comment
  • ทันทีที่ผู้ใช้งานที่ถูกต้องเปิด comment box เพื่อดู comment ต่อไปนี้ HTML จะ parse script นี้
  • เมื่อ HTML parsing เสร็จโดย browser cookie ของ user จะถูกส่งไปยังโจมตีบนเซิร์ฟเวอร์ของเขา

ช่องโหว่ง่ายๆ นี้ หากมีอยู่ในเว็บแอปพลิเคชันของคุณ อาจมีผลกระทบรุนแรงมาก อีก exploitation ที่พบบ่อยคือแฮกเกอร์ใช้แอปพลิเคชันของคุณสำหรับ drive-by downloads โดยโจมตีทำให้ end user ดาวน์โหลดมัลแวร์โดยไม่รู้ตัว โดยคลิกลิงก์ที่ดูถูกต้อง

กรณีดังของการโจมตี Cross-Site Scripting

XSS attacks เกิดขึ้นเพื่อผลประโยชน์ทางการเงิน กรณีดังคือการโจมตี e-commerce giant eBay แฮกเกอร์ inject malicious JavaScript code เข้าไปในหลาย listings ของ iPhone ราคาถูก ซึ่ง redirect users ไปยัง fake login page ที่สร้างขึ้นเพื่อขโมย credentials

นอกจากเว็บไซต์อีคอมเมิร์ซ เว็บไซต์โซเชียลมีเดียหลายแห่งก็ถูกโจมตี Twitter ถูกโจมตีด้วย XSS worm นำไปสู่ malicious links บนเว็บไซต์ StalkDaily อีก XSS attack ที่รู้จักดีคือ MySpace attack โดย Samy worm – ไวรัสที่ไม่ร้ายแรง ซึ่งเปลี่ยนหน้าโปรไฟล์ผู้ใช้ MySpace และส่ง friend request แบบสุ่ม

มาตรการป้องกันการโจมตี XSS

การป้องกัน XSS attack ไม่ได้หมายถึงการปิดกั้น user ให้ป้อน payload ไม่ได้ แต่เป็นการมีมาตรการหยุดไม่ให้มันถูก parse เป็น HTML ใน browser นั่นเอง ดังนั้น вот methodologies ที่ใช้ป้องกัน XSS attack:

  1. Input Validation

    เพื่อป้องกัน XSS ให้ white-list input ส่วนใหญ่เป็น alphanumeric หรือบางกรณี special characters จะลด attack surface และ minimize potential bugs

  2. การใช้ DOM elements อย่างปลอดภัย

    การจัดการ DOM elements (document object model) อย่างไม่ปลอดภัยมักนำไปสู่ XSS attacks แม้ใน rich client UIs ตัวอย่าง การใช้ innerHTML attribute ทำให้ user input render เป็น XSS พร้อม JavaScript events ในกรณีนี้ safe alternative คือใช้ contentText หรือ innerText

  3. JavaScript Escaping

    Escaping single quotes สามารถป้องกัน injection ภายใน JavaScript HTML encoding ที่ใช้ single quotes กับ ' ควรใช้เพื่อป้องกัน injection issue

  4. Output Encoding

    Output encoding ให้ผลดีมากในการ neutralize XSS payloads สูงสุด วิธีนี้ mitigate server side injection attacks แม้ HTML encoding เป็นวิธีทั่วไป URL encoding ช่วยกำจัด injection ของ markup ใน links และ redirects