Apa itu http-header "X-XSS-Protection"?

194

Jadi saya sudah bermain-main dengan HTTP untuk bersenang-senang di telnet sekarang (yaitu hanya mengetik telnet google.com 80dan memasukkan GET dan POST acak dengan tajuk dan sejenisnya) tapi saya menemukan sesuatu yang ditransmisikan oleh google.com di tajuk yang saya buat. tidak tahu

Saya telah mencari melalui http://www.w3.org/Protocols/rfc2616/rfc2616.html dan tidak menemukan definisi untuk header http khusus ini yang sepertinya Google semburkan:

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

Adakah yang tahu apa X-XSS-Protectionitu?

midc111
sumber
6
FWIW, "benar" tempat untuk mencari spesifikasi bidang header bukan spec HTTP (saat ini RFC 2616), tetapi registri bidang header pesan IANA (yang dikatakan, itu tidak terdaftar di sana)
Julian Reschke
1
@JulianReschke, Kenapa begitu? Bukankah seharusnya spec HTTP otoritatif pada HTTP?
Pacerier
1
Spec HTTP mendelegasikan registry header ke IANA.
Julian Reschke

Jawaban:

107

X-XSS-Protection adalah header HTTP yang dipahami oleh Internet Explorer 8 (dan versi yang lebih baru). Header ini memungkinkan domain untuk mengaktifkan dan menonaktifkan "XSS Filter" dari IE8, yang mencegah beberapa kategori serangan XSS. IE8 mengaktifkan filter secara default, tetapi server dapat mematikan jika dinonaktifkan dengan pengaturan

   X-XSS-Protection: 0

Lihat juga http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-x-xss-protection-http-header. aspx

Luca Invernizzi
sumber
108
Ini sangat kabur. Bagaimana tepatnya header ini mencegah XSS? Jadi sekarang IE melihat X-XSS-Protection:1dan kemudian, algoritma apa yang digunakannya untuk mencegah XSS?
Pacerier
11
Detail sulit ditemukan karena ini adalah teknologi berpemilik. Intinya, IE memantau jika ada parameter yang tampak mencurigakan yang dikirim browser ke situs web kembali dalam jawaban yang diterjemahkan. Misalnya, jika pengguna mengklik pada attack-me.com/... (yang merupakan "> <script> lansiran ('XSS') </script>, dan menerima halaman yang berisi skrip itu, IE akan mencegahnya.
Luca Invernizzi
11
Dengan demikian, menurut saya (bukti sulit ditemukan) bahwa itu hanya melindungi terhadap Reflected XSS ( infosecisland.com/blogview/... ), juga karena tidak ada maksud untuk mendeteksi Stored XSS (juga disebut Persistent XSS).
Luca Invernizzi
11
hmm tampaknya seperti fluff sekitar pemasaran oleh microsoft dalam upaya untuk membuat IE terlihat lebih baik ....
Matej
5
Yah, itu disajikan dalam pemasaran fluff, tetapi kodenya tampaknya bekerja. Anda dapat mengujinya di sini boostie.com/test/xss/BlockMode.asp (juga ditautkan dalam posting blog MSDN).
Luca Invernizzi
61
  • X-XSS-Protection: 1 : Force XSS protection (berguna jika perlindungan XSS dinonaktifkan oleh pengguna)

  • X-XSS-Protection: 0 : Nonaktifkan perlindungan XSS

  • Token mode=blockakan mencegah browser (IE8 + dan browser Webkit) merender halaman (alih-alih membersihkan) jika serangan refleksi XSS potensial (= tidak persisten) terdeteksi.

/! \ Peringatan, mode=blockmenciptakan kerentanan di IE8 ( info lebih lanjut ).

Informasi lebih lanjut: http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx dan http://blog.veracode.com / 2014/03 / pedoman-untuk-pengaturan-keamanan-header /

Fabien Sa
sumber
6
Sebagai catatan, bug IE8 diperbaiki (CVE-2009-4074)
yakatz
developer.mozilla.org/es/docs/Web/HTTP/Headers/X-XSS-Protection Dalam tautan ini, kita dapat menemukan deskripsi X-XSS-Protection
Maria Montenegro
1
Perhatikan bahwa 0hanya nilai aman untuk tajuk ini. Lihat stackoverflow.com/a/57802070/334451 untuk detailnya.
Mikko Rantalainen
48

Header respons ini dapat digunakan untuk mengonfigurasi perlindungan XSS reflektif yang dibangun agen-pengguna. Saat ini, hanya Microsoft Internet Explorer, Google Chrome dan Safari (WebKit) yang mendukung tajuk ini.

Internet Explorer 8 menyertakan fitur baru untuk membantu mencegah serangan skrip lintas situs tercermin, yang dikenal sebagai XSS Filter . Filter ini berjalan secara default di zona keamanan Internet, Tepercaya, dan Terbatas. Halaman zona Intranet lokal dapat ikut serta dalam perlindungan menggunakan header yang sama.

Tentang tajuk yang Anda poskan di pertanyaan Anda,

Header X-XSS-Protection: 1; mode=blockmemungkinkan Filter XSS. Daripada membersihkan halaman, ketika serangan XSS terdeteksi, browser akan mencegah rendering halaman.

Pada bulan Maret 2010, kami menambahkan dukungan IE8 untuk token baru di header X-XSS-Protection, mode = blok.

X-XSS-Protection: 1; mode=block

Ketika token ini hadir, jika serangan Refleksi XSS potensial terdeteksi, Internet Explorer akan mencegah rendering halaman. Alih-alih mencoba membersihkan halaman untuk menghapus serangan XSS, IE hanya akan membuat "#".

Internet Explorer mengenali kemungkinan serangan skrip lintas situs. Ini mencatat peristiwa dan menampilkan pesan yang sesuai untuk pengguna. Artikel MSDN menjelaskan cara kerja tajuk ini.

Bagaimana filter ini bekerja di IE ,

Lebih lanjut tentang artikel ini, https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-iv-the-xss-filter/

Filter XSS beroperasi sebagai komponen IE8 dengan visibilitas ke semua permintaan / tanggapan yang mengalir melalui browser. Ketika filter menemukan kemungkinan XSS dalam permintaan lintas situs, itu mengidentifikasi dan menetralkan serangan jika itu diputar ulang dalam respons server. Pengguna tidak diberikan pertanyaan yang tidak dapat mereka jawab - IE hanya memblokir skrip berbahaya dari eksekusi.

Dengan Filter XSS baru, pengguna IE8 Beta 2 yang menghadapi serangan XSS Tipe-1 akan melihat pemberitahuan seperti berikut:

IE8 XSS Attack Notification

Halaman telah dimodifikasi dan serangan XSS diblokir.

Dalam hal ini, Filter XSS telah mengidentifikasi serangan skrip lintas situs di URL. Itu telah mensterilkan serangan ini karena skrip yang diidentifikasi diputar kembali ke halaman respons. Dengan cara ini, filter ini efektif tanpa mengubah permintaan awal ke server atau memblokir seluruh respons.

Acara Filter Skrip Situs-silang dicatat ketika Windows Internet Explorer 8 mendeteksi dan mengurangi serangan skrip-situs (XSS). Serangan skrip lintas situs terjadi ketika satu situs web, umumnya jahat, menyuntikkan (menambahkan) kode JavaScript ke dalam permintaan yang sah untuk situs web lain. Permintaan asli umumnya tidak bersalah, seperti tautan ke halaman lain atau skrip Common Gateway Interface (CGI) yang menyediakan layanan umum (seperti buku tamu). Skrip yang disuntikkan biasanya berupaya mengakses informasi atau layanan istimewa yang tidak ingin diizinkan oleh situs web kedua. Respons atau permintaan biasanya mencerminkan hasil kembali ke situs web jahat. Filter XSS, fitur baru untuk Internet Explorer 8, mendeteksi JavaScript dalam URL dan permintaan HTTP POST. Jika JavaScript terdeteksi, Filter XSS mencari bukti refleksi, informasi yang akan dikembalikan ke situs web serangan jika permintaan serangan diajukan tidak berubah. Jika refleksi terdeteksi, Filter XSS membersihkan permintaan asli sehingga JavaScript tambahan tidak dapat dijalankan. Filter XSS kemudian mencatat tindakan itu sebagai peristiwa Filter Skrip Situs-Silang. Gambar berikut menunjukkan contoh situs yang dimodifikasi untuk mencegah serangan skrip lintas situs.

Sumber: https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx

Pengembang web mungkin ingin menonaktifkan filter untuk konten mereka. Mereka dapat melakukannya dengan mengatur tajuk HTTP:

X-XSS-Protection: 0

Lebih lanjut tentang header keamanan di,

Beruntung
sumber
1
Perhatikan bahwa X-XSS-Protection: 0hanya header aman untuk fitur ini. Untuk detailnya, lihat stackoverflow.com/a/57802070/334451
Mikko Rantalainen
10

Anda dapat melihat di Daftar header HTTP yang bermanfaat ini .

X-XSS-Protection: Header ini memungkinkan filter Cross-site scripting (XSS) yang dibangun di sebagian besar browser web terbaru. Biasanya ini diaktifkan secara default, jadi peran tajuk ini adalah untuk mengaktifkan kembali filter untuk situs web tertentu ini jika dinonaktifkan oleh pengguna. Header ini didukung di IE 8+, dan di Chrome (tidak yakin versi mana). Filter anti-XSS ditambahkan di Chrome 4. Tidak diketahui apakah versi itu menghargai tajuk ini.

Abdul Majid Sheike
sumber
Sayangnya, fitur ini menyebabkan masalah keamanan dan hanya nilai amannya X-XSS-Protection: 0. Untuk detailnya, lihat stackoverflow.com/a/57802070/334451
Mikko Rantalainen
9

TL; DR: Semua situs web (/ aplikasi) yang ditulis dengan baik harus memancarkan header X-XSS-Protection: 0dan lupakan saja fitur ini. Jika Anda ingin memiliki keamanan ekstra yang dapat diberikan oleh agen pengguna yang lebih baik, gunakan Content-Security-Policytajuk yang ketat .

Jawaban panjang:

Header HTTP X-XSS-Protectionadalah salah satu hal yang diperkenalkan Microsoft di Internet Explorer 8.0 (MSIE 8) yang seharusnya meningkatkan keamanan situs web yang ditulis secara tidak benar.

Idenya adalah untuk menerapkan semacam heuristik untuk mencoba mendeteksi refleksi serangan XSS dan secara otomatis mensterilkan serangan.

Bagian yang bermasalah dari ini adalah "heuristik" dan "dikebiri". Heuristik menyebabkan false positive dan neutering tidak dapat dilakukan dengan aman karena menyebabkan efek samping yang dapat digunakan untuk mengimplementasikan serangan XSS dan serangan DoS pada situs web yang sangat aman.

Bagian yang buruk adalah bahwa jika situs web tidak memancarkan header X-XSS-Protectionmaka browser akan berperilaku seolah-olah header X-XSS-Protection: 1telah dipancarkan. Bagian yang lebih buruk adalah bahwa nilai ini adalah nilai yang paling tidak aman dari semua nilai yang mungkin untuk tajuk ini!

Untuk situs web aman tertentu (yaitu, situs tidak memiliki kerentanan refleksi XSS) fitur "perlindungan XSS" ini memungkinkan serangan berikut:

X-XSS-Protection: 1memungkinkan penyerang secara selektif memblokir bagian-bagian dari JavaScript dan membuat skrip tetap berjalan. Ini dimungkinkan karena heuristik fitur ini hanyalah "jika nilai dari setiap parameter GET ditemukan di bagian skrip sumber halaman, skrip akan secara otomatis diubah dengan cara yang bergantung pada agen pengguna". Dalam praktiknya, penyerang dapat mis menambahkan parameter disablexss=<script src="framebuster.js"dan browser akan secara otomatis menghapus string <script src="framebuster.js"dari sumber halaman yang sebenarnya. Perhatikan bahwa sisa halaman terus berjalan dan penyerang baru saja menghapus bagian keamanan halaman ini. Dalam praktiknya, JS apa pun di sumber laman dapat dimodifikasi. Untuk beberapa kasus, halaman tanpa kerentanan XSS memiliki konten yang direfleksikan dapat digunakan untuk menjalankan JavaScript yang dipilih pada halaman karena proses sterilisasisalah mengubah data teks biasa menjadi kode JavaScript yang dapat dieksekusi .

X-XSS-Protection: 1; mode=blockmemungkinkan penyerang untuk membocorkan data dari sumber halaman dengan menggunakan perilaku halaman sebagai saluran samping. Misalnya, jika halaman berisi kode JavaScript di sepanjang baris var csrf_secret="521231347843", penyerang hanya menambahkan paramter ekstra misalnya leak=var%20csrf_secret="3dan jika halaman TIDAK diblokir, 3itu adalah digit pertama yang salah. Penyerang mencoba lagi, kali ini leak=var%20csrf_secret="5dan pemuatan halaman akan dibatalkan. Ini memungkinkan penyerang mengetahui bahwa digit pertama dari rahasia itu adalah 5. Penyerang kemudian terus menebak angka berikutnya.

Pada akhirnya, jika situs Anda penuh dengan serangan refleksi XSS, menggunakan nilai default 1akan mengurangi sedikit permukaan serangan. Namun, jika situs Anda aman dan tidak terpancarkan X-XSS-Protection: 0, situs Anda akan rentan dengan peramban apa pun yang mendukung fitur ini. Jika Anda ingin pertahanan dalam dukungan mendalam dari browser terhadap kerentanan XSS yang belum diketahui di situs Anda, gunakan Content-Security-Policytajuk yang ketat . Itu tidak membuka situs Anda dari kerentanan yang diketahui.

Saat ini fitur ini diaktifkan secara default di MSIE, Safari dan Google Chrome. Ini dulu diaktifkan di Edge tetapi Microsoft sudah menghapus fitur salah ini dari Edge . Mozilla Firefox tidak pernah menerapkan ini.

Lihat juga:

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

Mikko Rantalainen
sumber