क्या 302 रीडायरेक्ट रेफर स्ट्रिंग को बनाए रखेगा?


92

मुझे उपयोगकर्ता को एक पृष्ठ से दूसरे पृष्ठ पर पुनर्निर्देशित करना होगा, लेकिन मुझे मूल संदर्भ स्ट्रिंग को बनाए रखने की आवश्यकता है। इसलिए, उदाहरण के लिए, यदि वे http://www.othersite.com/pageA.jsp पर शुरू करते हैं, तो एक लिंक पर क्लिक करें जो उन्हें http://www.example.com/pageB.jsp पर ले जाता है , जो तब 302 पर अमल करता है http://www.example.com/pageC.jsp पर रीडायरेक्ट करने के लिए , मुझे संदर्भित स्ट्रिंग की आवश्यकता हैhttp://www.othersite.com/pageA.jsp

क्या यह 302 रीडायरेक्ट के लिए सामान्य व्यवहार है? या मेरा मूल रेफरर गिरा दिया जाएगा, के पक्ष में http://www.example.com/pageB.jsp? यह वांछनीय नहीं होगा।

मुझे नहीं पता कि इससे कोई फ़र्क पड़ता है, लेकिन मैं JSP में काम कर रहा हूँ, और मैं response.sendRedirect()302 रीडायरेक्ट को निष्पादित करने के लिए उपयोग कर रहा हूँ ।

मुझे यह उल्लेख करना चाहिए कि मैंने इसके साथ एक प्रयोग किया था, और ऐसा लगता है कि मूल संदर्भ स्ट्रिंग ( http://www.othersite.com/pageA.jsp) रखा है, लेकिन मैं सिर्फ यह सुनिश्चित करना चाहता था कि यह सामान्य डिफ़ॉल्ट व्यवहार था, और मेरे अंत में कुछ अजीब नहीं था।


हालांकि मैं वर्तमान में 302 रीडायरेक्ट का उपयोग कर रहा हूं, लेकिन मैं शायद 301 रीडायरेक्ट का उपयोग कर सकता हूं। क्या आप जानते हैं कि 301 रीडायरेक्ट के लिए व्यवहार कोई और विश्वसनीय है?


3
मुझे इसके विपरीत चाहिए। सर्वर की ओर से पुन: निर्देशन करते बदलते रीडायरेक्ट पर रेफरर (मूल रेफरर को हटाने तो)। किसी को?
cprcrack

जवाबों:


32

संक्षिप्त उत्तर यह निर्दिष्ट नहीं है प्रासंगिक RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 में रेफर हेडर या 302% कोड के लिए।

आपकी सबसे अच्छी शर्त यह है कि आप कई ब्राउज़रों के साथ एक परीक्षण करें और देखें कि क्या आम सहमति का व्यवहार है।

पूर्ण बेल्ट और ब्रेसिज़ के लिए, मूल रेफ़रर को रीडायरेक्ट URL में एनकोड करें ताकि आप इसे पुनः प्राप्त करने की गारंटी दे सकें।


17
: करने के लिए जिसे यह दिलचस्पी हो सकती है, मैं प्रमुख ब्राउज़रों पर SPME परीक्षण किया stackoverflow.com/questions/2158283/...
मार्को Demaio

121

मैं 302 के बारे में नहीं जानता, लेकिन मैंने आज कुछ ब्राउज़रों पर 301 का परीक्षण किया, यहाँ परिणाम हैं:

SCENARIO : उपयोगकर्ता domainA पर इंगित करने वाले domainX पर क्लिक करता है। domainA, 301 को domainB पर पुनर्निर्देशित करता है।

  • IE8 refererजब डोमेनबी पर उतर रहा है: domainX (तब भी जब InPStreet ब्राउज़िंग का उपयोग करता है और तब भी जब उपयोगकर्ता नए टैब में लिंक खोलता है)
  • डोमेन 4 refererपर उतरते समय Safari4 है: domainX (तब भी जब उपयोगकर्ता नए टैब में लिंक खोलता है)
  • डोमेन refererपर उतरते समय FF3.6.10 है: domainX (तब भी जब उपयोगकर्ता नए टैब में लिंक खोलता है)
  • ChromeB refererपर लैंडिंग के समय Chrome5 है: domainX ( जब तक उपयोगकर्ता नए टैब में लिंक नहीं खोलता)
  • refererडोमेनबी पर उतरते समय Chrome26 है: domainX (तब भी जब उपयोगकर्ता नए टैब में लिंक खोलता है)

27
नोट: यह परीक्षण कुछ समय पहले किया गया है, और आजकल क्रोम 26 नए टैब में खोले जाने पर भी उसी तरह व्यवहार करता है ।
बेंजामिन

सभी ब्राउज़रों पर परीक्षण नहीं किया गया है, लेकिन 302 के लिए व्यवहार समान प्रतीत होता है।
अमीर अली अकबरी

1
नोट: रीडायरेक्टिंग पृष्ठ (domainA) एक जारी करता है, तो संदर्भ-नीति: कोई रेफरर हैडर, तो Chrome (और ओपेरा) सेट नहीं करेगा Referer गंतव्य पृष्ठ (domainB) के अनुरोध पर हैडर। फ़ायरफ़ॉक्स और एज अभी भी इसे भेजते हैं।
डेविड बालैसिक

12

अच्छा प्रश्न। इस मामले में, संदर्भित भेजने वाला पूरी तरह से ब्राउज़र पर निर्भर करता है (क्योंकि ब्राउज़र को नए संसाधन के लिए एक और अनुरोध करने के लिए कहा गया है)।

RFC 2616 इस मुद्दे को लेकर चुप है:

अनुरोधित संसाधन अस्थायी रूप से एक अलग URI के तहत रहता है। चूंकि पुनर्निर्देशन के अवसर पर परिवर्तन किया जा सकता है, ग्राहक ग्राहक भविष्य के अनुरोधों के लिए अनुरोध-यूआरआई का उपयोग करना जारी रखेगा। यदि कैश-कंट्रोल या समाप्ति शीर्ष लेख फ़ील्ड द्वारा इंगित किया गया है तो यह प्रतिक्रिया केवल देखने योग्य है।

मैं सही रेफ़र भेजने के लिए ब्राउज़र पर भरोसा नहीं करूंगा। मुझे यकीन है कि कम से कम एक ऐसा है जो दूसरों की तुलना में कुछ अलग भेजता है।

वैकल्पिक हल

यदि आप कर सकते हैं, तो आप ?override_referer=<old_url>उस URL के पैरामीटर को क्यों नहीं जोड़ सकते जिसे आप पुनर्निर्देशित करते हैं और HTTP_REFERER के बजाय उस मान को पार्स करते हैं।

इस तरह आप हमेशा सही परिणाम प्राप्त करने के लिए सुनिश्चित हो सकते हैं, और आप सुरक्षा में कुछ भी नहीं खो रहे हैं: रेफ़र को किसी भी तरह से फेक किया जा सकता है।


4
आप वास्तव में URL में रेफर को अधिक विश्वसनीय बनाकर सुरक्षा में कुछ खो रहे हैं। अधिकांश आधुनिक ब्राउज़रों में AJAX के अनुरोधों का संदर्भ जावास्क्रिप्ट के माध्यम से नहीं बदला जा सकता है; हालाँकि, URL स्पष्ट रूप से कर सकता है। इसका मतलब यह है कि XSS हमले की स्थिति में, संदर्भ URL परम से अधिक भरोसेमंद है। मुझे गलत मत समझो, संदर्भकर्ता अभी भी स्पष्ट रूप से उपयोगकर्ता इनपुट है जिसे पूरी तरह से भरोसा नहीं किया जा सकता है। लेकिन URL को बदलना किसी और के लिए उस डेटा को बिगाड़ना अधिक कठिन है।
फिलाइए

6

मुझे ऑपोसिट की समस्या थी: मैं चाहता था कि रेफ़र "पेजबी" हो, लेकिन कोई भी क्यूरेट ब्राउज़र इस तरह से प्रोसेस नहीं करता ...

इसलिए मैंने पेजबी पर एक HTML पुनर्निर्देशन की कोशिश की (301 या 302 पुनर्निर्देशन के बजाय):

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

और परिणाम आश्चर्यजनक था:

  • Referer Chrome के साथ पेजबी है
  • रेफ़र फायरफॉक्स और IE के साथ EMPTY है!

उम्मीद है कि यह मदद कर सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.