X-Requested-With üstbilgisinin anlamı nedir?


224

JQuery ve diğer çerçeveler aşağıdaki başlığı ekler:

X-İstek-İle: XMLHttpRequest

Bu neden gerekli? Bir sunucu neden AJAX isteklerini normal isteklerden farklı ele almak ister?

GÜNCELLEME : Bu başlığı kullanarak gerçek bir örnek buldum: https://core.spreedly.com/manual/payment-methods/adding-with-js . Ödeme işlemcisi AJAX olmadan istenirse, tamamlandığında orijinal web sitesine yeniden yönlendirir. AJAX ile istendiğinde yeniden yönlendirme yapılmaz.


7
"AJAX olmadan istendiğinde, tamamlandığında orijinal web sitesine yönlendirir. AJAX ile istendiğinde, yeniden yönlendirme yapılmaz." -> Bu yüzden yapmak istersiniz. :)
Robert Christian

Yanıtlar:


258

Güvenlik için iyi bir neden - bu başlık CSRF saldırılarını önleyebilir çünkü bu başlık, AJAX istek çapraz etki alanına CORS aracılığıyla sunucunun onayı olmadan eklenemez .

Alanlar arası yalnızca aşağıdaki başlıklara izin verilir:

  • Kabul etmek
  • Accept-Language
  • Content-Language
  • Son-Event-ID
  • İçerik türü

diğerleri CORS destekli tarayıcılarda "uçuş öncesi" isteğinin gönderilmesine neden olur.

CORS olmadan X-Requested-Withbir etki alanları arası XHR isteğine eklemek mümkün değildir .

Sunucu bu üstbilginin mevcut olup olmadığını denetliyorsa, isteğin bir JavaScript etki alanından kullanıcı adına istek yapmaya çalışan bir saldırganın etki alanından başlatılmadığını bilir. Bu, isteğin, jeton kullanılmadan alanlar arası olmadığını doğrulamanın daha zor olduğu normal bir HTML formundan POST olmadığını da denetler. (Ancak, eski tarayıcıları savunmasız bırakacak olsanız da , Originüstbilgiyi kontrol etmek desteklenen tarayıcılarda bir seçenek olabilir .)

Yeni Flash bypass keşfedildi

OSX'de Safari'de çalışan Flash, bir yönlendirme adımı varsa bu üstbilgiyi ayarlayabileceğinden bunu bir belirteçle birleştirmek isteyebilirsiniz . Görünüşe göre Chrome'da da çalıştı , ancak şimdi düzeltildi. Etkilenen farklı sürümleri içeren daha fazla ayrıntı burada .

OWASP Bunu bir Menşei ve Yönlendirme kontrolü ile birleştirmenizi öneririz :

Bu savunma tekniği, Siteler Arası Talep Sahteciliği için Sağlam Savunmalar'ın 4.3. Bölümünde özellikle ele alınmıştır. Bununla birlikte, Flash kullanarak bu savunmanın atlanmaları, Vimeo'daki bir CSRF kusurundan yararlanmak için 2008 kadar erken ve yine 2015 kadar yakın bir zamanda Mathias Karlsson tarafından belgelendi. Ancak, Flash saldırısının Kökeni veya Yönlendiren başlıklarını taklit edemeyeceğine inanıyoruz, bu yüzden her ikisini de kontrol ederek bu kontrol kombinasyonunun Flash bypass CSRF saldırılarını önlemesi gerektiğine inanıyoruz. (NOT: Herkes bu inancı onaylayabilir veya reddedebilirse, bu makaleyi güncelleyebilmemiz için lütfen bize bildirin)

Ancak, daha önce tartışılan nedenlerden dolayı Menşei kontrol etmek zor olabilir.

Güncelleme

Burada CORS, CSRF ve X-Requested-With hakkında daha ayrıntılı bir blog yazısı yazdı .


14
Anlamıyorum. Saldırganın istek oluşturmasını ve X-Requested-Withbaşlık eklemesini ne engeller ?
Greg

13
@Greg: Tarayıcı - alanlar arası izin vermez.
SilverlightFox

2
Oh, aynı alanda olduğunuz sürece hiçbir CORS yapılandırmasına ihtiyaç duyulacağının farkında değildim. Yine de düşündüğünüzde açıktır. Teşekkürler !
Greg

10
@ vol7ron: Hiçbir şey onları durduramaz, ancak daha sonra istekte bulundukları nesneyi yenen istekte kurbanlarının çerezlerini almazlar. Bir CSRF'nin başarılı olması için, saldırganın istekle birlikte çerezleri otomatik olarak eklemesi için tarayıcıya ihtiyacı olacaktır, bu nedenle tarayıcı olmadan CSRF saldırısı yoktur.
SilverlightFox

3
@ vol7ron: Birincisi. CSRF şaşkın bir yardımcı problemidir. Tarayıcı şaşkın yardımcısıdır ve kullanıcının kendisinin yapmadığı bir istek için çerez göndermede "kandırılır".
SilverlightFox

25

SilverlightFox'un cevabını okuduğunuzdan emin olun. Daha önemli bir nedeni vurguluyor.

Nedeni çoğunlukla bir isteğin kaynağını biliyorsanız, onu biraz özelleştirmek isteyebilirsiniz.

Örneğin, birçok tarif içeren bir web siteniz olduğunu varsayalım. Ve tarifleri tıkladıkları bağlantıya göre bir kaba kaydırmak için özel bir jQuery çerçevesi kullanırsınız. Bağlantıwww.example.com/recipe/apple_pie

Şimdi normalde tam sayfa, üstbilgi, altbilgi, reçete içeriği ve reklamlar döndürür. Ancak birisi web sitenize göz atıyorsa bu parçaların bazıları zaten yüklenmiştir. Böylece, kullanıcının seçtiği tarifi almak için bir AJAX kullanabilirsiniz, ancak zamandan ve bant genişliğinden tasarruf etmek için üstbilgi / altbilgi / reklamları yüklemeyin.

Şimdi gibi veriler için ikincil bir son nokta yazabilirsiniz, www.example.com/recipe_only/apple_pieancak bakımı ve diğer insanlarla paylaşılması daha zordur.

Ancak, isteği yapan ve daha sonra verilerin yalnızca bir kısmını döndüren bir ajax isteği olduğunu tespit etmek daha kolaydır. Bu şekilde kullanıcı daha az bant genişliği harcar ve site daha duyarlı görünür.

Çerçeveler sadece başlığı ekler, çünkü bazıları hangi isteklerin ajax ve hangilerinin ajax olduğunu takip etmeyi yararlı bulabilir. Ancak bu teknikleri kullanmak tamamen geliştiriciye bağlıdır.

Aslında Accept-Languagebaşlığa benzer . Bir tarayıcı bir web sitesi isteyebilir, lütfen URL'ye / ru / veya benzeri eklemek zorunda kalmadan bana bu web sitesinin Rusça sürümünü gösterin.


30
Vay be, kulağa korkunç bir bakım kabusu gibi geliyor. Aynı sayfanın farklı bir temsilini döndürmek istiyorsanız, Acceptbaşlığa farklı bir içerik türü sağlamalısınız . Bunun için özel bir başlık kullanmak yanlış yol gibi geliyor.
Gili

10

Bazı çerçeveler bu üstbilgiyi xhr isteklerini algılamak için kullanır, örneğin grails spring güvenliği bu üstbilgiyi xhr isteğini tanımlamak ve yanıt olarak bir json yanıtı veya html yanıtı vermek için kullanır.

Çoğu Ajax kütüphanesi (v2.1'den itibaren Prototip, JQuery ve Dojo), isteğin normal bir köprü veya form gönderme düğmesine tıklanarak tetiklenmek yerine XMLHttpRequest tarafından yapıldığını belirten bir X-Requested-With üstbilgisi içerir.

Kaynak: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.