SORU
26 AĞUSTOS 2008, Salı


Nasıl HttpOnly çerezleri AJAX istekleri ile çalışıyor mu?

Eğer JavaScript AJAX erişim kısıtlamaları kurabiye dayalı sitesinde kullanılan çerezleri erişim ihtiyacı var. HttpOnly çerezleri AJAX bir site üzerinde çalışacak?

Düzenleme:Microsoft eğer HttpOnly belirtilirse çerez JavaScript erişimi geri çevirerek XSS saldırıları önlemek için bir yol yarattı. FireFox daha sonra bunu kabul etti. Eğer StackOverflow gibi bir site AJAX kullanıyorsanız, Http çerezleri Yalnızca bir şansımız var mı? yani benim soru:

Edit 2:Soru 2. HttpOnly amacıyla çerezler için JavaScript erişimi engellemek için, ve hala XmlHttpRequest Nesnesini JavaScript ile çerez alabilirsinizne HttpOnly noktasıdır?

Edit 3:İşte Vikipedi den bir alıntı:

Tarayıcı böyle bir kurabiye aldığında, aşağıdaki HTTP Borsası her zamanki gibi, ama istemci tarafı komut dosyalarını görünür yapmak için kullanması beklenir.[32] HttpOnly bayrağı standart bir parçası değildir, ve tüm tarayıcılar. uygulanmadı Şu anda ya da bir XMLHTTPRequest ile oturum tanımlama okuma yazma önleme yok unutmayın. [33].

document.cookie HttpOnly kullandığınızda bloke olduğunu anlıyorum. Ama hala XMLHttpRequest nesnesinin cookie değerleri, XSS için izin okuyabilirsiniz. Nasıl HttpOnly senden daha mı güvenli? Çerezler aslında okuma yaparak sadece?

Sizin örnekte, ben bir daha asla yazma document.cookie, ama yine de kurabiye çalmak ve benim etki alanı XMLHttpRequest nesnesi kullanarak gönderebilirsiniz.

<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>

Edit 4:Özür dilerim, demek istediğim bu sen-ebil göndermek için XMLHttpRequest için StackOverflow etki ve kaydedin sonuç getAllResponseHeaders() bir dize, düzenli ifade dışarı çerez ve sonra sonrası için bir dış etki. Wikipedia ve ha gibi görünüyor.ckers benimle bu konuda hemfikir, ama tekrar eğitilmeyi çok isterim...

Son Düzenleme:Ahh, görünüşe göre her iki site yanlış, bu aslında bug in FireFox. IE6 ve 7 aslında şu anda tam HttpOnly destekleyen tek tarayıcı.

Öğrendiğim her şeyi yinelemek için:

  • HttpOnly belge için tüm erişimi kısıtlar.IE 7 ve FireFox ve diğer tarayıcılar hakkında emin değilim çerez
  • HttpOnly XMLHttpObject yanıt başlıklarını çerez bilgilerini kaldırır.() getAllResponseHeaders IE 7'de.
  • XMLHttpObjects sadece dan kaynaklandığı etki alanına teslim edilebilir, çapraz etki alanı tanımlama kaydı yok.

edit: Bu Bilgi büyük olasılıkla artık güncel.

CEVAP
26 AĞUSTOS 2008, Salı


Evet, salt HTTP tanımlama bilgileri bu işlev için iyi olurdu. Hala sunucuya XmlHttpRequest talebi karşılanmış olur.

Yığın Taşması durumunda, çerezleri otomatik olarak XmlHttpRequest istek parçası olarak sağlanır. Tanımlama bilgisi verileri muhtemelen otomatik olarak "" denetleyicisi yöntemi. oy daha düşük bir seviyede kimliğini doğrulamak için kullanılan Yığın Taşması kimlik doğrulaması sağlayıcı uygulama ayrıntılarını bilmiyorum, ama

Daha genel olarak, çerezlerdeğilAJAX için gerekli. XmlHttpRequest desteği (hatta iframe uzak, eski tarayıcılar) teknik olarak yeterlidir.

Eğer AJAX işlevi etkin güvenlik sağlamak istiyorsanız ancak, o zaman aynı kurallar geleneksel siteler ile uygulayın. Her isteğin arkasında kullanıcı tanımlamak için bazı yöntem gerekir, ve kurabiye hemen hemen her zaman bu son için bir araç.

Örnek veremem belgenize yazın.cookie, ama yine de kurabiye çalmak ve benim etki alanı XMLHttpRequest nesnesi kullanarak gönderebilirsiniz.

XmlHttpRequest çapraz etki alanı istekleri (dokunmadan sensin nedeni tam olarak sıralar için) yapmaz.

Normalde ulaşılmaz olduğu için komut dosyası etki alanı için tanımlama bilgisi iframe kullanarak göndermek ya da uzak, ama sonra HTTP-Sadece yeniden tanımlama korur JSONP enjekte edebilirsin.

Sunucu tarafında StackOverflow.com tehlikede olduğu sürece, benim cookie çalmak mümkün olmaz.

Edit 2: Soru 2. Http-Tek amacı çerezler için JavaScript erişimi engellemek için, ve hala XmlHttpRequest Nesnesini JavaScript ile çerez alabilir, Http-Sadece ne anlamı var?

Bu senaryoyu düşünün:

  • Sayfanın içine JavaScript kodu enjekte etmek için bir yol bulmak.
  • Jeff sayfa yükler ve kötü niyetli JavaScript benim onun kurabiye benim eşleşecek şekilde değiştirir.
  • Jeff soru için mükemmel bir cevap gönderir.
  • Kurabiye verilerimi yerine onun ile gönderir çünkü, cevap benimki olacak.
  • Sana "benim" yıldız cevap. oy
  • Gerçek Hesabım puan alır.

Salt HTTP tanımlama ile, ikinci adım imkansız, böylece XSS denemem mağlup olur.

Edit 4: Özür dilerim, demek istediğim bu sen-ebil göndermek için XMLHttpRequest için StackOverflow etki ve kaydedin sonuç getAllResponseHeaders() bir dize, düzenli ifade dışarı çerez ve sonra sonrası için bir dış etki. Wikipedia ve ha gibi görünüyor.ckers benimle bu konuda hemfikir, ama tekrar eğitilmeyi çok isterim...

Bu doğru. Hala kaçırmak böyle oturumu. Önemli ölçüde ince başarıyla bile XSS size karşı hack olsa gerekeni yapabilecek insanlar sürüsü.

Örneğin benim senaryo geri giderseniz, ancak, HTTP-Sadece burada görebilirsinizyokbaşarıyla müşterinin kurabiye değiştirme dayanan XSS saldırıları () nadir değil kesti.

Kaynar gerçeğini aşağı bir. hiç bir gelişme çözecektirtümgüvenlik açıkları ve b) sistem olacaktırhiçtamamen güvenli olacak. HTTP-SadeceXSS karşı desteklemesi yararlı bir araç.

XmlHttpRequest çapraz etki alanı kısıtlama tüm XSS açıklarını önlemede değil 0 başarılı olmasa bile, benzer şekilde, hala hiç bir kısıtlama kaldırılıyor hayal edersin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jonathepianist

    jonathepiani

    31 Temmuz 2008
  • Orson Wang

    Orson Wang

    28 EKİM 2006
  • Triune Films

    Triune Films

    9 ŞUBAT 2006