Bir 302 yönlendirmesi yönlendiren dizesini koruyacak mı?


93

Kullanıcıyı bir sayfadan diğerine yönlendirmem gerekiyor, ancak orijinal yönlendirme dizesini korumam gerekiyor. Bu nedenle, örneğin, http://www.othersite.com/pageA.jsp adresinde başlarlarsa , onları http://www.example.com/pageB.jsp adresine götüren bir bağlantıya tıklayın ve ardından 302 http://www.example.com/pageC.jsp adresine yönlendir , içermesi gereken yönlendiren dizesine ihtiyacım varhttp://www.othersite.com/pageA.jsp

Bu, 302 yönlendirmesi için normal davranış mıdır? Yoksa benim orijinal yönlendiricim lehine düşer http://www.example.com/pageB.jspmi? Bu arzu edilmez.

Herhangi bir fark yaratır mı bilmiyorum ama JSP'de çalışıyorum response.sendRedirect()ve 302 yönlendirmesini yürütmek için kullanıyorum .

Bununla bir deney yaptığımı ve orijinal referans dizesini ( http://www.othersite.com/pageA.jsp) tutmuş gibi göründüğünü belirtmeliyim, ancak bunun normal varsayılan davranış olduğundan ve benim tarafımdan garip bir şey olmadığından emin olmak istedim.


Şu anda bir 302 yönlendirmesi kullanmama rağmen, bunun yerine muhtemelen bir 301 yönlendirmesi kullanabilirim. 301 yeniden yönlendirmelerinin davranışının daha güvenilir olup olmadığını biliyor musunuz?


3
Sadece tam tersine ihtiyacım var. Yönlendirmedeki yönlendireni değiştirerek sunucu tarafında yönlendirme yapın (böylece orijinal yönlendireni silin). Kimse?
cprcrack

Yanıtlar:


33

Kısa cevap, ilgili RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36'da Referer başlığı veya 302 durum kodu için belirtilmemiştir.

En iyi seçeneğiniz, birkaç tarayıcıyla bir test yapmak ve bir fikir birliği davranışı olup olmadığını görmek.

Tam kemer ve kaşlı ayraçlar için, orijinal yönlendireni yönlendirme URL'sinde kodlayın, böylece onu almayı garanti edebilirsiniz.


19
İlgilenebilecekleri büyük tarayıcılarda spme testleri yaptım: stackoverflow.com/questions/2158283/…
Marco Demaio

121

302'yi bilmiyorum, ancak 301'i bugün bazı tarayıcılarda test ettim, işte sonuçlar:

SENARYO : kullanıcı domainX üzerindeki domainA'yı işaret eden bağlantıyı tıklar. domainA, domainB'ye 301 yönlendirmesi yapar.

  • refererDomainB'ye inerken IE8 : domainX (InPrivate taramasını kullanırken ve hatta kullanıcı bağlantıyı yeni sekmede açtığında bile)
  • Alan B'ye refererinerken Safari4: domainX (kullanıcı bağlantıyı yeni sekmede açsa bile)
  • FF3.6.10 refereralan B'ye inildiğinde: domainX (kullanıcı bağlantıyı yeni sekmede açsa bile)
  • Chrome5'te refererEtkiAlanıB açılış olduğunda: domainX ( sürece kullanıcı yeni bir sekmede bağlantıları açılır)
  • AlanB'ye refererinerken Chrome26: domainX (kullanıcı bağlantıları yeni sekmede açsa bile)

27
Not: Bu test bir süre önce yapılmıştır ve günümüzde Chrome 26, yeni bir sekmede açıldığında bile aynı şekilde davranmaktadır .
Benjamin

Tüm tarayıcılarda test edilmemiştir ancak 302 için davranış aynı görünmektedir.
Amir Ali Akbari

1
Not: Yönlendirme sayfası (alanA) bir Referrer-Policy: no-referrer başlığı yayınlarsa , Chrome (ve Opera) istekteki Referer başlığını hedef sayfaya (alanB) ayarlamaz. Firefox ve Edge hala gönderiyor.
David Balažic

12

İyi soru. Bu durumda, yönlendirenin gönderilmesi tamamen tarayıcıya bağlıdır (çünkü tarayıcıya yeni kaynağa başka bir talepte bulunması söylenir).

RFC 2616 sorun hakkında sessiz kalıyor:

İstenen kaynak geçici olarak farklı bir URI altında bulunuyor. Yeniden yönlendirme zaman zaman değiştirilebileceğinden, istemcinin gelecekteki istekler için İstek URI'sini kullanmaya devam etmesi GEREKİR. Bu yanıt, yalnızca Cache-Control veya Expires başlık alanıyla belirtilirse önbelleğe alınabilir.

Tarayıcının doğru yönlendireni göndereceğine güvenmem. Bahse girerim diğerlerinden farklı bir şey gönderen en az bir tane vardır.

Geçici çözüm

Yapabiliyorsanız, ?override_referer=<old_url>yönlendirdiğiniz URL'ye neden bir parametre eklemiyorsunuz ve HTTP_REFERER yerine bu değeri ayrıştırmıyorsunuz?

Bu şekilde her zaman doğru sonucu aldığınızdan emin olabilirsiniz ve güvenlik açısından hiçbir şey kaybetmezsiniz: Yönlendiren her iki şekilde de sahte olabilir.


4
Yönlendirmeyi URL'de geçersiz kılarak güvenlikte bir şeyler kaybediyorsunuz. Çoğu modern tarayıcıda AJAX istekleri için yönlendirici JavaScript aracılığıyla değiştirilemez; ancak, URL açıkça bunu yapabilir. Bu, bir XSS saldırısı durumunda yönlendirenin URL parametresinden daha güvenilir olduğu anlamına gelir. Beni yanlış anlamayın, yönlendiren hala açıkça tamamen güvenilemeyen kullanıcı girdisidir. Ancak bu verileri başkası için taklit etmek, URL'yi değiştirmekten çok daha zordur.
phylae

7

Karşıt sorun yaşadım: Yönlendiricinin "sayfa B" olmasını istedim, ancak mevcut tarayıcıların hiçbiri bu şekilde ilerlemiyor ...

Bu yüzden B sayfasında bir HTML yeniden yönlendirmesi yapmayı denedim (301 veya 302 yönlendirmesi yerine):

<meta http-equiv="refresh" content="0; url=pageC.jsp" />

Ve sonuç şaşırtıcıydı:

  • Referer, Chrome ile pageB'dir
  • Referer, FireFox & IE ile BOŞ!

Umarım bu yardımcı olabilir

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.