การโจมตีแบบ Cross-Site Scripting (XSS) ได้รับการระบุว่าเป็นหนึ่งในการโจมตีแบบฉีดที่เกิดขึ้นบ่อยครั้งแต่สามารถแก้ไขได้ง่ายซึ่งต้องเผชิญกับธุรกิจอีคอมเมิร์ซและแอปพลิเคชันเว็บอื่น ๆ ที่หลากหลาย ตั้งแต่แอปพลิเคชันการกำหนดเป้าหมายที่สร้างขึ้นจากเทคโนโลยีเว็บที่ล้าสมัยไปจนถึงแอปพลิเคชันที่ใหม่กว่าโดยใช้ UI ฝั่งไคลเอ็นต์ที่สมบูรณ์ XSS ได้รบกวนพวกเขาทั้งหมด อย่างไรก็ตาม จำเป็นต้องตระหนักว่าช่องโหว่ที่อาจเป็นสาเหตุให้เกิดการโจมตี XSS นั้นสามารถตรวจพบได้ง่ายและแก้ไขได้ทันท่วงที
การโจมตีแบบ Cross-site scripting เกิดขึ้นได้อย่างไร
การโจมตีแบบแฝงสคริปต์ (XSS) เกิดขึ้นเมื่อ
- เว็บแอปพลิเคชันร้องขอข้อมูลอินพุตผ่านแหล่งที่ไม่น่าเชื่อถือ
- เนื้อหาแบบไดนามิกที่ป้อนผ่านคำขอทางเว็บถูกใช้โดยไม่ได้รับการยืนยันว่าไม่มีเนื้อหาที่เป็นอันตราย
ตัวอย่างง่ายๆ ของข้อมูลที่ป้อน เช่น เมื่อเราส่งชื่อ อีเมล ID ชื่อผู้ใช้-รหัสผ่าน หรือการป้อนข้อมูลใดๆ ในแบบฟอร์ม อินพุตที่ป้อนข้างต้นแต่ละรายการสามารถจัดการได้หากรหัสพื้นฐานไม่ตรวจสอบอินพุตอย่างถูกต้อง ผู้โจมตีใช้ประโยชน์จากการไร้ความสามารถนี้ในการฉีดเนื้อหาที่เป็นอันตราย ซึ่งมักจะอยู่ในรูปแบบของโค้ด Javascript, HTML หรือโค้ดรูปแบบใดๆ ที่เบราว์เซอร์สามารถสั่งการได้ ผู้ใช้ปลายทางไม่มีทางสงสัยสคริปต์ที่ไม่น่าเชื่อถือและจะดำเนินการตามนั้น เมื่อฉีดเข้าไปแล้ว สคริปต์จะสามารถเข้าถึงคุกกี้ โทเค็นของเซสชัน หรือข้อมูลที่ละเอียดอ่อนที่ใช้โดยไซต์นี้
การโจมตี XSS มี 3 ประเภท:
- การโจมตีตาม DOM :เกิดจากการแทรกโค้ดที่เป็นอันตรายจากฝั่งไคลเอ็นต์ โค้ดที่ฉีดอาจเป็น Javascript, Flash, Visual Basic เป็นต้น
- การโจมตี XSS แบบถาวร: เกิดขึ้นเมื่อ payload ถูกเก็บไว้ที่ฝั่งเซิร์ฟเวอร์และถูกดึงออกมาเมื่อมีการร้องขอของผู้ใช้ไปยังเพจ
- การโจมตี XSS แบบไม่ต่อเนื่อง: เกิดขึ้นเมื่อเพย์โหลดสะท้อนกลับมาที่ผู้ใช้โดยเปิดลิงก์ไปยังเว็บไซต์ที่มีช่องโหว่พร้อมอินพุตที่สร้างขึ้นมา
กายวิภาคของการโจมตีแบบ Cross-site scripting (XSS)
ผู้โจมตีใช้ประโยชน์จาก XSS อย่างไร
โดยทั่วไปแล้ว ผู้โจมตีจะใช้ช่องโหว่ XSS เพื่อแยกคุกกี้เซสชันของผู้ใช้ปลายทาง ซึ่งทำให้ผู้โจมตีสามารถเข้าถึงบัญชีของผู้ใช้ได้ในที่สุด ตัวอย่างสถานการณ์ข้างต้นคือ:- เว็บไซต์ที่คุณเข้าถึงมีช่องแสดงความคิดเห็น
- ผู้โจมตีโพสต์เพย์โหลดต่อไปนี้ในส่วนความคิดเห็น
- ทันทีที่ผู้ใช้ที่ถูกต้องเปิดช่องแสดงความคิดเห็นเพื่อดูความคิดเห็นต่อไปนี้ HTML จะแยกวิเคราะห์สคริปต์นี้
- เมื่อแยกวิเคราะห์ HTML โดยเบราว์เซอร์ คุกกี้ของผู้ใช้จะถูกส่งไปยังผู้โจมตีบนเซิร์ฟเวอร์ของเขา
กรณีฉาวโฉ่ของการโจมตีแบบ Cross-site Scripting
การโจมตี XSS ส่วนใหญ่เกิดขึ้นเพื่อผลประโยชน์ทางการเงิน สิ่งที่น่าสังเกตคือการโจมตี eBay ยักษ์ใหญ่ด้านอีคอมเมิร์ซในอดีต แฮกเกอร์ได้แทรกโค้ด Javascript ที่เป็นอันตรายลงในรายการต่างๆ สำหรับ iphone ราคาถูก ซึ่งจะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าเข้าสู่ระบบปลอมที่สร้างขึ้นเพื่อประนีประนอมข้อมูลประจำตัวของผู้ใช้
นอกเหนือจากไซต์อีคอมเมิร์ซแล้ว ไซต์โซเชียลมีเดียหลายแห่งยังถูกโจมตีที่น่าอับอายดังกล่าว Twitter ตกเป็นเป้าหมายของเวิร์ม XSS ดังกล่าว ซึ่งนำไปสู่ลิงก์ที่เป็นอันตรายซึ่งติดอยู่บนเว็บไซต์ที่ชื่อว่า StalkDaily การโจมตี XSS ที่รู้จักกันดีอีกอย่างหนึ่งคือการโจมตี MySpace โดยหนอน Samy ซึ่งเป็นไวรัสที่ไม่เป็นอันตรายซึ่งเปลี่ยนหน้าโปรไฟล์ของผู้ใช้ MySpace และส่งคำขอเป็นเพื่อนแบบสุ่ม
ข้อควรระวังในการบรรเทาการโจมตี XSS
การป้องกันการโจมตี XSS ไม่ได้หมายความถึงการปิดการใช้งานให้ผู้ใช้ป้อนข้อมูลเพย์โหลด แต่ใช้มาตรการเพื่อหยุดไม่ให้ถูกแยกวิเคราะห์เป็น HTML ในเบราว์เซอร์ ดังที่กล่าวไปแล้ว ต่อไปนี้เป็นวิธีการบางอย่างที่ใช้เพื่อป้องกันการโจมตี XSS-
การตรวจสอบความถูกต้องของอินพุต
เพื่อป้องกัน XSS ให้อนุญาตการป้อนข้อมูลส่วนใหญ่เป็นตัวอักษรและตัวเลขหรือในบางกรณีให้ใช้อักขระพิเศษ ซึ่งจะช่วยลดการโจมตีบนพื้นผิวและลดโอกาสในการเกิดแมลง
-
การใช้องค์ประกอบ DOM ที่ปลอดภัย
บ่อยครั้ง การจัดการองค์ประกอบ DOM ที่ไม่ปลอดภัย (โมเดลอ็อบเจ็กต์เอกสาร) นำไปสู่การโจมตี XSS ใน UI ของไคลเอ็นต์ที่หลากหลาย ตัวอย่างเช่น การใช้แอตทริบิวต์ innerHTML แสดงผลอินพุตของผู้ใช้เป็น XSS พร้อมเหตุการณ์ Javascript ในกรณีนี้ ทางเลือกที่ปลอดภัยคือการใช้ contentText หรือ innerText
-
จาวาสคริปต์หลบหนี
การหลีกเลี่ยงเครื่องหมายคำพูดเดียวสามารถป้องกันการแทรกภายใน Javascript การเข้ารหัส HTML ที่ใช้เครื่องหมายคำพูดเดียวกับ ' ควรใช้เพื่อป้องกันปัญหาการแทรก
-
การเข้ารหัสเอาต์พุต
การเข้ารหัสเอาต์พุตทำงานได้อย่างมหัศจรรย์เมื่อต้องทำให้น้ำหนักบรรทุก XSS เป็นกลางเป็นกลาง วิธีนี้ทำงานเพื่อลดการโจมตีแบบฉีดฝั่งเซิร์ฟเวอร์ แม้ว่าการเข้ารหัส HTML จะเป็นวิธีการทั่วไป แต่การเข้ารหัส URL สามารถช่วยกำจัดการแทรกมาร์กอัปในลิงก์และการเปลี่ยนเส้นทางได้