AJAX çerezlere dayalı erişim kısıtlamaları olan bir sitede kullanılıyorsa JavaScript'in çerezlere erişmesi gerekir. HttpOnly çerezleri AJAX sitesinde çalışır mı?
Düzenleme: Microsoft, HttpOnly belirtilmişse, çerezlere JavaScript erişimine izin vermeyerek XSS saldırılarını önlemenin bir yolunu oluşturmuştur. FireFox daha sonra bunu benimsedi. Yani sorum şu: AJAX'ı StackOverflow gibi bir sitede kullanıyorsanız, Http-Only çerezleri bir seçenek midir?
Düzenleme 2: Soru 2. HttpOnly'nin amacı JavaScript'e çerezlere erişimi engellemekse ve yine de XmlHttpRequest Nesnesi aracılığıyla çerezleri JavaScript aracılığıyla alabilirsiniz, HttpOnly'nin amacı nedir?
Edit 3: İşte Wikipedia'dan bir alıntı:
Tarayıcı böyle bir çerez aldığında, aşağıdaki HTTP değişimlerinde her zamanki gibi kullanması, ancak istemci tarafı komut dosyalarına görünür kılmaması gerekir. [32]
HttpOnly
Bayrak herhangi bir standardın parçası değildir ve tüm tarayıcılarda uygulanmadı. Şu anda oturum çerezini bir XMLHTTPRequest yoluyla okumayı veya yazmayı engellemediğini unutmayın. [33].
document.cookie
HttpOnly kullandığınızda bunun engellendiğini anlıyorum . Ancak, XMLHttpRequest nesnesindeki çerez değerlerini yine de okuyabileceğiniz ve XSS'ye izin verdiğiniz görülüyor. HttpOnly sizi nasıl daha güvenli hale getirir? Çerezleri temel olarak salt okunur yaparak?
Örneğinizde, size yazamıyorum document.cookie
, ancak yine de çerezinizi çalabilir ve XMLHttpRequest nesnesini kullanarak alanımın içine gönderebilirim.
<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>
Düzenleme 4: Maalesef, XMLHttpRequest öğesini StackOverflow etki alanına gönderebilir ve getAllResponseHeaders () sonucunu bir dizeye kaydedebilir, çerezi yeniden düzenleyebilir ve daha sonra bunu harici bir etki alanına gönderebilirsiniz. Görünüşe göre Wikipedia ve ha.ckers bu konuda benimle aynı fikirde, ancak yeniden eğitilmeyi çok isterim ...
Son Düzenleme: Ahh, görünüşe göre her iki site de yanlış, bu aslında FireFox'ta bir hata . IE6 ve 7 aslında şu anda HttpOnly'yi tam olarak destekleyen tek tarayıcıdır.
Öğrendiğim her şeyi tekrarlamak için:
- HttpOnly IE7 ve FireFox'ta document.cookie'ye tüm erişimi kısıtlar (diğer tarayıcılardan emin değilim)
- HttpOnly, IE7'deki XMLHttpObject.getAllResponseHeaders () öğesindeki yanıt başlıklarından çerez bilgilerini kaldırır.
- XMLHttpObjects yalnızca kaynaklandıkları etki alanına gönderilebilir, bu nedenle çerezlerin etki alanları arası gönderimi yoktur.
edit: Bu bilgiler artık güncel değil.