http-header“ X-XSS-Protection” คืออะไร?


194

ดังนั้นฉันจึงเล่นกับ HTTP เพื่อความสนุกใน telnet ตอนนี้ (เช่นพิมพ์telnet google.com 80และวาง GET และ POST แบบสุ่มที่มีส่วนหัวที่ต่างกันและสิ่งที่คล้ายกัน) แต่ฉันเจอสิ่งที่ google.com ถ่ายทอดในส่วนหัวที่ฉัน ไม่รู้

ฉันได้ดูผ่านhttp://www.w3.org/Protocols/rfc2616/rfc2616.htmlและไม่พบคำจำกัดความสำหรับส่วนหัว http เฉพาะที่ google ดูเหมือนว่าจะพ่นออกมา:

GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Wed, 01 Feb 2012 03:42:24 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=6ddbc0a0342e7e63:FF=0:TM=1328067744:LM=1328067744:S=4d4farvCGl5Ww0C3; expires=Fri, 31-Jan-2014 03:42:24 GMT; path=/; domain=.google.com
Set-Cookie: NID=56=PgRwCKa8EltKnHS5clbFuhwyWsd3cPXiV1-iXzgyKsiy5RKXEKbg89gWWpjzYZjLPWTKrCWhOUhdInOlYU56LOb2W7XpC7uBnKAjMbxQSBw1UIprzw2BFK5dnaY7PRji; expires=Thu, 02-Aug-2012 03:42:24 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

1000

ใครรู้ว่าX-XSS-Protectionคืออะไร


6
FWIW ที่ "ถูกต้อง" สถานที่ที่จะขึ้นไปดูรายละเอียดข้อมูลส่วนหัวไม่ HTTP ข้อมูลจำเพาะ (ปัจจุบัน RFC 2616) แต่ IANA ข้อความฟิลด์ส่วนหัวรีจิสทรี (เป็นที่กล่าวว่ามันไม่ได้ระบุไว้ที่นั่น)
จูเลียน Reschke

1
@JulianReschke ทำไมเป็นเช่นนั้น ข้อมูลจำเพาะ HTTP ไม่ควรมีสิทธิ์ใน HTTP หรือไม่
Pacerier

1
ข้อมูลจำเพาะ HTTP มอบหมายการลงทะเบียนส่วนหัวให้กับ IANA
Julian Reschke

คำตอบ:


107

X-XSS-Protection เป็นส่วนหัว HTTP ที่ Internet Explorer 8 เข้าใจและเป็นเวอร์ชั่นที่ใหม่กว่า ส่วนหัวนี้ช่วยให้โดเมนสามารถเปิดและปิด "ตัวกรอง XSS" ของ IE8 ซึ่งป้องกันการโจมตี XSS บางประเภท IE8 มีการเปิดใช้งานตัวกรองตามค่าเริ่มต้น แต่เซิร์ฟเวอร์สามารถสลับได้หากปิดโดยการตั้งค่า

   X-XSS-Protection: 0

ดูเพิ่มเติมที่http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header aspx


108
นี่มันคลุมเครือมาก แน่นอนว่าไม่มีส่วนหัวนี้ป้องกัน XSS? ดังนั้นตอนนี้ IE จะเห็นX-XSS-Protection:1แล้วมันใช้อัลกอริธึมอะไรในการป้องกัน XSS
Pacerier

11
รายละเอียดหายากเพราะเป็นเทคโนโลยีที่มีกรรมสิทธิ์ โดยพื้นฐานแล้ว IE จะตรวจสอบหากพารามิเตอร์ที่น่าสงสัยใด ๆ ที่เบราว์เซอร์ส่งไปยังเว็บไซต์กลับมาในการตอบกลับที่ถอดรหัส ตัวอย่างเช่นหากผู้ใช้คลิกที่attack-me.com/… (ซึ่งคือ "> <script> การแจ้งเตือน ('XSS') </script> และได้รับหน้าผลลัพธ์ที่มีสคริปต์นั้น IE จะป้องกันไม่ให้
Luca Invernizzi

11
เช่นนี้ดูเหมือนว่าฉัน (หลักฐานยากที่จะหา) ว่ามันป้องกัน XSS Reflected ( infosecisland.com/blogview/ ...... ) เท่านั้นเพราะมันไม่มีวิธีตรวจจับ XSS ที่เก็บไว้ (หรือที่เรียกว่า Persistent XSS)
Luca Invernizzi

11
hmm ดูเหมือน fluff รอบการตลาดโดย microsoft ในความพยายามที่จะทำให้ IE ดูดีขึ้น ....
Matej

5
มันถูกนำเสนอในการตลาดปุย แต่รหัสดูเหมือนจะทำงาน คุณสามารถทดสอบได้ที่นี่Enhanceie.com/test/xss/BlockMode.asp (เชื่อมโยงในโพสต์บล็อก MSDN)
Luca Invernizzi

61
  • X-XSS-Protection: 1 : การป้องกันบังคับ XSS (มีประโยชน์หากการป้องกัน XSS ถูกปิดใช้งานโดยผู้ใช้)

  • X-XSS-Protection: 0 : ปิดใช้งานการป้องกัน XSS

  • โทเค็นmode=blockจะป้องกันเบราว์เซอร์ (เบราว์เซอร์ IE8 + และ Webkit) เพื่อแสดงผลหน้าเว็บ (แทนการฆ่าเชื้อ) หากตรวจพบการโจมตี XSS reflection (= ไม่ใช่แบบไม่ถาวร)

/! \ Warning mode=blockสร้างช่องโหว่ใน IE8 ( ข้อมูลเพิ่มเติม )

ข้อมูลเพิ่มเติม: http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspxและhttp://blog.veracode.com / 2014/03 / แนวทางสำหรับการตั้งค่าการรักษาความปลอดภัยส่วนหัว /


6
สำหรับบันทึกข้อผิดพลาด IE8 ได้รับการแก้ไข (CVE-2009-4074)
yakatz

developer.mozilla.org/es/docs/Web/HTTP/Headers/X-XSS-Protectionในลิงค์นี้เราสามารถค้นหาคำอธิบายของ X-XSS-Protection
Maria Montenegro

1
โปรดทราบว่า0เป็นค่าที่ปลอดภัยเพียงอย่างเดียวสำหรับส่วนหัวนี้ ดูstackoverflow.com/a/57802070/334451สำหรับรายละเอียด
Mikko Rantalainen

49

ส่วนหัวการตอบสนองนี้สามารถใช้ในการกำหนดค่าการป้องกัน XSS แบบสะท้อนแสงในตัวของตัวแทนผู้ใช้ ปัจจุบันมีเพียง Internet Explorer ของ Google, Google Chrome และ Safari (WebKit) เท่านั้นที่รองรับส่วนหัวนี้

Internet Explorer 8 รวมถึงคุณสมบัติใหม่ที่จะช่วยป้องกันการสะท้อนข้ามไซต์โจมตีสคริปต์ที่รู้จักในฐานะกรอง XSS ตัวกรองนี้ทำงานตามค่าเริ่มต้นในโซนความปลอดภัยของอินเทอร์เน็ตที่เชื่อถือได้และถูก จำกัด หน้าโซนอินทราเน็ตเฉพาะที่อาจใช้การป้องกันโดยใช้ส่วนหัวเดียวกัน

เกี่ยวกับส่วนหัวที่คุณโพสต์ในคำถามของคุณ

ส่วนหัวX-XSS-Protection: 1; mode=blockเปิดใช้งานตัวกรอง XSS แทนที่จะฆ่าเพจให้สะอาดเมื่อตรวจพบการโจมตี XSS เบราว์เซอร์จะป้องกันการแสดงผลของหน้าเว็บ

ในเดือนมีนาคม 2010 เราได้เพิ่มการสนับสนุนโทเค็นใหม่สำหรับ IE8 ในส่วนหัว X-XSS-Protection, mode = block

X-XSS-Protection: 1; mode=block

เมื่อโทเค็นนี้ปรากฏขึ้นหากตรวจพบการโจมตี XSS Reflection ที่อาจเกิดขึ้น Internet Explorer จะป้องกันการแสดงผลของหน้าเว็บ แทนที่จะพยายามฆ่าล้างหน้าเพื่อลบการจู่โจมของ XSS ออกโดยทาง IE จะแสดงเฉพาะ“ #”

Internet Explorer ตระหนักถึงความเป็นไปได้ในการโจมตีสคริปต์ข้ามไซต์ มันบันทึกเหตุการณ์และแสดงข้อความที่เหมาะสมกับผู้ใช้ บทความ MSDN อธิบายวิธีการทำงานของส่วนหัวนี้

วิธีกรองนี้ทำงานใน IE ,

เพิ่มเติมเกี่ยวกับบทความนี้https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-iv-the-xss-filter/

ตัวกรอง XSS ทำหน้าที่เป็นองค์ประกอบ IE8 ที่สามารถมองเห็นคำขอ / การตอบสนองทั้งหมดที่ไหลผ่านเบราว์เซอร์ เมื่อตัวกรองพบ XSS ที่เป็นไปได้ในคำขอข้ามไซต์ตัวกรองจะระบุและกำหนดให้มีการโจมตีหากมีการเล่นซ้ำในการตอบกลับของเซิร์ฟเวอร์ ผู้ใช้จะไม่ได้รับคำถามที่ไม่สามารถตอบได้ - IE จะบล็อกสคริปต์ที่ประสงค์ร้ายไม่ให้ดำเนินการ

ด้วยตัวกรอง XSS ใหม่ผู้ใช้ IE8 Beta 2 ที่เผชิญหน้ากับการโจมตี Type-1 XSS จะเห็นการแจ้งเตือนดังต่อไปนี้:

การแจ้งเตือนการโจมตี IE8 XSS

หน้านี้ได้รับการแก้ไขและการโจมตี XSS ถูกบล็อก

ในกรณีนี้ตัวกรอง XSS ได้ระบุการโจมตีสคริปต์ข้ามไซต์ใน URL มีการทำหมันการโจมตีนี้เนื่องจากสคริปต์ที่ระบุถูกเล่นซ้ำในหน้าการตอบกลับ ด้วยวิธีนี้ตัวกรองจะมีผลโดยไม่ต้องแก้ไขการร้องขอเริ่มต้นไปยังเซิร์ฟเวอร์หรือบล็อกการตอบสนองทั้งหมด

เหตุการณ์ตัวกรองการเขียนสคริปต์ข้ามไซต์ถูกบันทึกไว้เมื่อ Windows Internet Explorer 8 ตรวจพบและลดการโจมตีแบบข้ามไซต์สคริปต์ (XSS) การโจมตีสคริปต์ข้ามไซต์เกิดขึ้นเมื่อเว็บไซต์หนึ่งโดยทั่วไปเป็นอันตรายส่งโค้ด JavaScript (เพิ่ม) ลงในการร้องขอที่ถูกต้องตามกฎหมายไปยังเว็บไซต์อื่น โดยทั่วไปแล้วคำขอดั้งเดิมนั้นจะไร้เดียงสาเช่นลิงก์ไปยังหน้าอื่นหรือสคริปต์ Common Gateway Interface (CGI) ที่ให้บริการทั่วไป (เช่นสมุดเยี่ยม) โดยทั่วไปแล้วสคริปต์ที่ฉีดจะพยายามเข้าถึงข้อมูลหรือบริการที่มีสิทธิพิเศษซึ่งเว็บไซต์ที่สองไม่ต้องการให้อนุญาต การตอบสนองหรือคำขอโดยทั่วไปสะท้อนผลลัพธ์กลับไปยังเว็บไซต์ที่เป็นอันตราย ตัวกรอง XSS ซึ่งเป็นคุณสมบัติใหม่สำหรับ Internet Explorer 8 ตรวจพบ JavaScript ใน URL และคำขอ HTTP POST หากตรวจพบ JavaScript ตัวกรอง XSS ค้นหาหลักฐานการสะท้อนข้อมูลที่จะถูกส่งกลับไปยังเว็บไซต์ที่ถูกโจมตีหากการร้องขอการโจมตีถูกส่งไปโดยไม่มีการเปลี่ยนแปลง หากตรวจพบการสะท้อนตัวกรอง XSS จะทำให้บริสุทธิ์คำขอเดิมเพื่อไม่ให้สามารถเรียกใช้ JavaScript เพิ่มเติมได้ ตัวกรอง XSS จะบันทึกการกระทำนั้นเป็นเหตุการณ์ตัวกรองสคริปต์ข้ามไซต์ รูปภาพต่อไปนี้แสดงตัวอย่างของไซต์ที่ถูกแก้ไขเพื่อป้องกันการโจมตีสคริปต์ข้ามไซต์

ที่มา: https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx

นักพัฒนาเว็บอาจต้องการปิดการใช้งานตัวกรองสำหรับเนื้อหาของพวกเขา พวกเขาสามารถทำได้โดยการตั้งค่าส่วนหัว HTTP:

X-XSS-Protection: 0

เพิ่มเติมเกี่ยวกับส่วนหัวความปลอดภัย


1
โปรดทราบว่าX-XSS-Protection: 0นี่เป็นส่วนหัวที่ปลอดภัยสำหรับคุณลักษณะนี้เท่านั้น สำหรับรายละเอียดดู stackoverflow.com/a/57802070/334451
Mikko Rantalainen

10

คุณสามารถดูได้ในรายการส่วนหัว HTTP ที่มีประโยชน์นี้

การป้องกัน X-XSS:ส่วนหัวนี้เปิดใช้งานตัวกรอง Cross-site scripting (XSS) ที่สร้างขึ้นในเว็บเบราว์เซอร์ล่าสุด โดยปกติแล้วจะเปิดใช้งานตามค่าเริ่มต้นดังนั้นบทบาทของส่วนหัวนี้คือการเปิดใช้งานตัวกรองสำหรับเว็บไซต์นี้อีกครั้งหากผู้ใช้ถูกปิดใช้งาน ส่วนหัวนี้รองรับใน IE 8+ และใน Chrome (ไม่แน่ใจว่าจะใช้เวอร์ชั่นใด) ตัวกรอง anti-XSS ถูกเพิ่มเข้าไปใน Chrome 4 มันไม่เป็นที่รู้จักหากเวอร์ชันนั้นให้เกียรติส่วนหัวนี้


แต่น่าเสียดายที่คุณสมบัตินี้ทำให้เกิดX-XSS-Protection: 0ปัญหาด้านความปลอดภัยและมีเพียงค่าปลอดภัยคือ ดูรายละเอียดได้ที่stackoverflow.com/a/57802070/334451
Mikko Rantalainen

9

TL; DR:เว็บไซต์ที่เขียนมาอย่างดี (/ แอพ) ต้องปล่อยส่วนหัวX-XSS-Protection: 0และเพียงลืมเกี่ยวกับคุณสมบัตินี้ หากคุณต้องการความปลอดภัยเพิ่มเติมที่ดีกว่าตัวแทนผู้ใช้สามารถให้ใช้Content-Security-Policyส่วนหัวที่เข้มงวด

คำตอบยาว:

ส่วนหัว HTTP X-XSS-Protectionเป็นหนึ่งในสิ่งที่ Microsoft แนะนำใน Internet Explorer 8.0 (MSIE 8) ที่ควรปรับปรุงความปลอดภัยของเว็บไซต์ที่เขียนผิด

แนวความคิดคือการประยุกต์ใช้ฮิวริสติกบางชนิดเพื่อพยายามตรวจจับการโจมตีของ XSS และจะทำการโจมตีโดยอัตโนมัติ

ส่วนที่เป็นปัญหาของเรื่องนี้คือ "ฮิวริสติก" และ "การทำหมัน" ฮิวริสติกส์ทำให้เกิดผลบวกปลอมและการทำหมันไม่สามารถทำได้อย่างปลอดภัยเพราะจะทำให้เกิดผลข้างเคียงที่สามารถนำมาใช้ในการโจมตี XSS และการโจมตี DoS บนเว็บไซต์ที่ปลอดภัยอย่างสมบูรณ์

ส่วนที่ไม่ดีคือถ้าเว็บไซต์ไม่ปล่อยส่วนหัวX-XSS-Protectionแล้วเบราว์เซอร์จะทำงานเหมือนว่าส่วนหัวX-XSS-Protection: 1ถูกปล่อยออกมา ส่วนที่แย่กว่านั้นคือค่านี้เป็นค่าที่ปลอดภัยน้อยที่สุดสำหรับค่าที่เป็นไปได้ทั้งหมดสำหรับส่วนหัวนี้!

สำหรับเว็บไซต์ที่มีการรักษาความปลอดภัย (นั่นคือเว็บไซต์ไม่มีช่องโหว่ XSS สะท้อนให้เห็น) คุณสมบัติ "การป้องกัน XSS" นี้อนุญาตให้มีการโจมตีดังต่อไปนี้:

X-XSS-Protection: 1อนุญาตให้ผู้โจมตีเลือกบล็อกบางส่วนของ JavaScript และเรียกใช้สคริปต์ที่เหลือ สิ่งนี้เป็นไปได้เนื่องจากการวิเคราะห์พฤติกรรมของคุณลักษณะนี้เป็นเพียง "ถ้าพบค่าของพารามิเตอร์ GET ใด ๆ ในส่วนการเขียนสคริปต์ของแหล่งที่มาของหน้าสคริปต์จะถูกแก้ไขโดยอัตโนมัติในทางที่ขึ้นอยู่กับตัวแทนผู้ใช้" ในทางปฏิบัติผู้โจมตีสามารถเช่นเพิ่มพารามิเตอร์disablexss=<script src="framebuster.js"และเบราว์เซอร์จะลบสตริง<script src="framebuster.js"ออกจากแหล่งหน้าจริงโดยอัตโนมัติ โปรดทราบว่าส่วนที่เหลือของหน้ายังคงทำงานต่อไปและผู้โจมตีเพิ่งลบส่วนนี้ของการรักษาความปลอดภัยหน้า ในทางปฏิบัติ JS ใด ๆ ในแหล่งหน้าสามารถแก้ไขได้ สำหรับบางกรณีหน้าเว็บที่ไม่มีช่องโหว่ XSS ที่มีเนื้อหาสะท้อนสามารถใช้เพื่อเรียกใช้ JavaScript ที่เลือกในหน้าเนื่องจากการทำหมันเปลี่ยนข้อมูลข้อความธรรมดาให้เป็นรหัส JavaScript ที่ใช้งานไม่ได้

X-XSS-Protection: 1; mode=blockอนุญาตให้ผู้โจมตีรั่วไหลข้อมูลจากแหล่งหน้าโดยใช้ลักษณะการทำงานของหน้าเป็นช่องทางด้านข้าง ตัวอย่างเช่นหากหน้ามีรหัส JavaScript ตามแนวของvar csrf_secret="521231347843"ผู้โจมตีเพียงเพิ่มพารามิเตอร์พิเศษเช่นleak=var%20csrf_secret="3และหากหน้าไม่ถูกบล็อก3ก็เป็นหลักแรกที่ไม่ถูกต้อง ผู้โจมตีพยายามอีกครั้งคราวนี้leak=var%20csrf_secret="5การโหลดหน้าจะถูกยกเลิก 5นี้จะช่วยให้ผู้โจมตีที่จะรู้ว่าหลักแรกของความลับ จากนั้นผู้โจมตียังคงเดาเลขหลักถัดไป

ในที่สุดหากไซต์ของคุณเต็มไปด้วยการโจมตีการสะท้อน XSS การใช้ค่าเริ่มต้น1จะลดพื้นผิวการโจมตีเล็กน้อย อย่างไรก็ตามหากไซต์ของคุณปลอดภัยและคุณไม่ปล่อยออกมาX-XSS-Protection: 0ไซต์ของคุณจะเสี่ยงต่อเบราว์เซอร์ที่รองรับคุณสมบัตินี้ หากคุณต้องการการป้องกันเชิงลึกจากเบราว์เซอร์จากช่องโหว่ XSS ที่ไม่รู้จักในไซต์ของคุณให้ใช้Content-Security-Policyส่วนหัวที่เข้มงวด แต่นั่นไม่ได้เปิดเว็บไซต์ของคุณไปยังช่องโหว่ที่รู้จัก

ปัจจุบันคุณสมบัตินี้เปิดใช้งานโดยค่าเริ่มต้นใน MSIE, Safari และ Google Chrome สิ่งนี้เคยถูกเปิดใช้งานใน Edge แต่Microsoft ได้ลบคุณลักษณะความผิดพลาดนี้ออกจาก Edgeแล้ว Mozilla Firefox ไม่เคยใช้งานสิ่งนี้

ดูสิ่งนี้ด้วย:

https://homakov.blogspot.com/2013/02/hacking-facebook-with-oauth2-and-chrome.html https://blog.innerht.ml/the-misunderstood-x-xss-protection/ http: / /p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf https://www.slideshare.net/masatokinugawa/xxn-en https://bugs.chromium.org/p/chromium/issues/detail?id=396544 https: // bugs.chromium.org/p/chromium/issues/detail?id=498982

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.