เป็นไปได้ไหมที่จะทำการโจมตี XSS หากอินพุตของฉันไม่อนุญาตให้มีอักขระ ‹ และ >
Example: I enter <script>alert('this');</script> text
แต่ถ้าฉันลบ ‹ และ > สคริปต์ไม่ใช่ข้อความ:
I enter script alert('this'); script text
เป็นไปได้ไหมที่จะทำการโจมตี XSS หากอินพุตของฉันไม่อนุญาตให้มีอักขระ ‹ และ >
Example: I enter <script>alert('this');</script> text
แต่ถ้าฉันลบ ‹ และ > สคริปต์ไม่ใช่ข้อความ:
I enter script alert('this'); script text
ใช่ มันยังคงเป็นไปได้
เช่น. สมมติว่าไซต์ของคุณแทรกข้อมูลผู้ใช้ลงในตำแหน่งต่อไปนี้
<img src="http://example.com/img.jpg" alt="USER-INPUT" />
หาก USER-INPUT
เป็น " ONLOAD="alert('xss')
สิ่งนี้จะแสดงผล
<img src="http://example.com/img.jpg" alt="" ONLOAD="alert('xss')" />
ไม่จำเป็นต้องมีวงเล็บเหลี่ยม
นอกจากนี้ โปรดดูOWASP XSS Experimental Minimal Encoding Rules
สำหรับเนื้อหา HTML:
เข้ารหัสเอนทิตี HTML ‹ &
ระบุชุดอักขระในเมตาแท็กเพื่อหลีกเลี่ยง UTF7 XSS
สำหรับเนื้อหา XHTML:
เข้ารหัสเอนทิตี HTML ‹ & ›
จำกัดการป้อนข้อมูลให้กับชุดอักขระ http://www.w3.org/TR/2008/REC-xml-20081126/#charsets
ดังนั้นภายในเนื้อหา คุณสามารถหลีกเลี่ยงได้ด้วยการเข้ารหัส (หรือลบ) ชุดย่อยของอักขระที่มักจะแนะนำเพื่อป้องกัน XSS อย่างไรก็ตาม คุณไม่สามารถดำเนินการนี้ได้ภายในแอตทริบิวต์ - XSS (Cross Site Scripting) ฉบับเต็ม ) เอกสารสรุปการป้องกันแนะนำสิ่งต่อไปนี้ และไม่มีทางเลือกอื่นที่น้อยที่สุด:
ยกเว้นอักขระตัวอักษรและตัวเลข ให้ยกเว้นอักขระทั้งหมดที่มีรูปแบบ HTML Entity
&#xHH;
รวมถึงการเว้นวรรคด้วย (HH = ค่าเลขฐานสิบหก)
โดยส่วนใหญ่จะครอบคลุมวิธีการระบุค่าแอตทริบิวต์สามประเภท:
การเข้ารหัสในลักษณะนี้จะป้องกัน XSS ในค่าแอตทริบิวต์ในทั้งสามกรณี
นอกจากนี้ โปรดระวังด้วยว่าการโจมตี UTF-7 ไม่จำเป็นต้องมีอักขระในวงเล็บมุม อย่างไรก็ตาม เว้นแต่ชุดอักขระจะตั้งค่าไว้อย่างชัดเจนเป็น UTF-7 การโจมตีประเภทนี้ ไม่สามารถทำได้ในเบราว์เซอร์รุ่นใหม่ .
+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
นอกจากนี้ โปรดระวังแอตทริบิวต์ที่อนุญาต URL เช่น href
และตรวจสอบให้แน่ใจว่าอินพุตของผู้ใช้เป็น URL ของเว็บที่ถูกต้อง ขอแนะนำให้ใช้ไลบรารีที่มีชื่อเสียงเพื่อตรวจสอบความถูกต้องของ URL โดยใช้แนวทางรายการที่อนุญาต (เช่น หากโปรโตคอลไม่ใช่ HTTPS ก็จะถูกปฏิเสธ) การพยายามบล็อกลำดับเช่น javascript:
นั้นไม่เพียงพอ
หากอินพุตที่ผู้ใช้ระบุถูกพิมพ์ไว้ภายในแอตทริบิวต์ HTML คุณจะต้องหลีกเลี่ยงเครื่องหมายคำพูด ไม่เช่นนั้นอินพุตของคุณจะมีความเสี่ยงดังนี้:
" onload="javascript-code" foobar="
คุณควรหลีกเลี่ยงอักขระเครื่องหมายและเนื่องจากโดยทั่วไปจะต้องเข้ารหัสภายในเอกสาร HTML และอาจทำลายเค้าโครงของคุณ
ดังนั้นคุณควรดูแลอักขระต่อไปนี้: ‹ > & ' "
อย่างไรก็ตาม คุณไม่ควรตัดออกทั้งหมด แต่แทนที่ด้วยโค้ด HTML ที่ถูกต้อง เช่น '