XSS ที่ไม่มีแท็ก HTML

เป็นไปได้ไหมที่จะทำการโจมตี XSS หากอินพุตของฉันไม่อนุญาตให้มีอักขระ ‹ และ >

Example: I enter <script>alert('this');</script> text

แต่ถ้าฉันลบ ‹ และ > สคริปต์ไม่ใช่ข้อความ:

I enter script alert('this'); script text

person VMOrtega    schedule 14.03.2014    source แหล่งที่มา
comment
อินพุตของผู้ใช้ถูกเรนเดอร์อย่างไร? AKA รหัสที่พิมพ์อยู่ที่ไหน   -  person Jon Newmuis    schedule 14.03.2014
comment
การป้อนข้อมูลของผู้ใช้จะแสดงเป็นข้อความธรรมดา (ไม่ใช่ Escape) โดยการลบอักขระ ‹ และ ›   -  person VMOrtega    schedule 14.03.2014
comment
จากด้านบนของหัวของฉันยังคงมี XSS ที่เข้ารหัส UTF-7 ได้อย่างแน่นอน จากนั้นจะขึ้นอยู่กับบริบทของการแสดงข้อความ (เช่น เฉพาะภายในแท็ก ‹body› หรือในบริบทที่เฉพาะเจาะจงมากขึ้นของพื้นที่ข้อความ หรือภายในแท็ก html และอื่นๆ)   -  person cyber-guard    schedule 14.03.2014


คำตอบ (2)


ใช่ มันยังคงเป็นไปได้

เช่น. สมมติว่าไซต์ของคุณแทรกข้อมูลผู้ใช้ลงในตำแหน่งต่อไปนี้

<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: นั้นไม่เพียงพอ

person SilverlightFox    schedule 15.03.2014

หากอินพุตที่ผู้ใช้ระบุถูกพิมพ์ไว้ภายในแอตทริบิวต์ HTML คุณจะต้องหลีกเลี่ยงเครื่องหมายคำพูด ไม่เช่นนั้นอินพุตของคุณจะมีความเสี่ยงดังนี้:

" onload="javascript-code" foobar="

คุณควรหลีกเลี่ยงอักขระเครื่องหมายและเนื่องจากโดยทั่วไปจะต้องเข้ารหัสภายในเอกสาร HTML และอาจทำลายเค้าโครงของคุณ

ดังนั้นคุณควรดูแลอักขระต่อไปนี้: ‹ > & ' "

อย่างไรก็ตาม คุณไม่ควรตัดออกทั้งหมด แต่แทนที่ด้วยโค้ด HTML ที่ถูกต้อง เช่น '

person wonce    schedule 14.03.2014