JavaScript membutuhkan akses ke cookie jika AJAX digunakan di situs dengan batasan akses berdasarkan cookie. Akankah HttpOnly cookie berfungsi di situs AJAX?
Sunting: Microsoft menciptakan cara untuk mencegah serangan XSS dengan melarang akses JavaScript ke cookie jika HttpOnly ditentukan. FireFox kemudian mengadopsi ini. Jadi pertanyaan saya adalah: Jika Anda menggunakan AJAX di situs, seperti StackOverflow, apakah cookie Http-Only pilihan?
Sunting 2: Pertanyaan 2. Jika tujuan HttpOnly adalah untuk mencegah akses JavaScript ke cookie, dan Anda masih dapat mengambil cookie melalui JavaScript melalui Objek XmlHttpRequest, apa gunanya HttpOnly ?
Sunting 3: Berikut ini adalah kutipan dari Wikipedia:
Saat browser menerima cookie seperti itu, ia seharusnya menggunakannya seperti biasa dalam pertukaran HTTP berikut, tetapi tidak membuatnya terlihat oleh skrip sisi klien. [32] The
HttpOnly
bendera bukan bagian dari standar apapun, dan tidak dilaksanakan di semua browser. Perhatikan bahwa saat ini tidak ada pencegahan membaca atau menulis cookie sesi melalui XMLHTTPRequest. [33].
Saya mengerti bahwa document.cookie
diblokir ketika Anda menggunakan HttpOnly. Tetapi tampaknya Anda masih bisa membaca nilai cookie di objek XMLHttpRequest, memungkinkan untuk XSS. Bagaimana HttpOnly membuat Anda lebih aman daripada? Dengan membuat cookie pada dasarnya hanya baca?
Dalam contoh Anda, saya tidak bisa menulis ke Anda document.cookie
, tetapi saya masih bisa mencuri cookie Anda dan mempostingnya ke domain saya menggunakan objek XMLHttpRequest.
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
Sunting 4: Maaf, maksud saya Anda dapat mengirim XMLHttpRequest ke domain StackOverflow, dan kemudian menyimpan hasil getAllResponseHeaders () ke string, regex cookie, dan mempostingnya ke domain eksternal. Tampaknya Wikipedia dan ha.ckers setuju dengan saya tentang hal ini, tetapi saya ingin sekali dididik ulang ...
Edit Terakhir: Ahh, ternyata kedua situs salah, ini sebenarnya adalah bug di FireFox . IE6 & 7 sebenarnya adalah satu-satunya browser yang saat ini sepenuhnya mendukung HttpOnly.
Untuk mengulangi semua yang telah saya pelajari:
- HttpOnly membatasi semua akses ke document.cookie di IE7 & dan FireFox (tidak yakin tentang browser lain)
- HttpOnly menghapus informasi cookie dari header respons di XMLHttpObject.getAllResponseHeaders () di IE7.
- XMLHttpObjects hanya dapat dikirimkan ke domain asal mereka, sehingga tidak ada posting lintas domain dari cookie.
sunting: Informasi ini kemungkinan tidak lagi terkini.