2011-10-04 9 views
7

का उपयोग कर HTTP रेफरर डेटा स्पूफिंग HTTP और रेफरर हेडर पर विश्वास न करने के लिए अक्सर कई अन्य साइटें चेतावनियों से भरे हुए हैं क्योंकि वे 'आसानी से' स्पूफेड या फिकड हैं।एएसपी.NET

इससे पहले कि मैं आगे जाऊं - नहीं, मैं कोई अच्छा नहीं हूं - लेकिन मैं कुछ रेफरर-निर्भर परीक्षणों को चलाने के लिए चाहता हूं।

जबकि मुझे संदेह नहीं है कि फर्जी रेफरर्स के बारे में चेतावनियां सच हैं, तो मुझे पर पर बहुत विस्तृत जानकारी नहीं मिल सकती है, जिससे उन्हें छेड़छाड़ की जा सकती है। यहां तक ​​कि Wikipedia article केवल सामान्य शर्तों में इसके बारे में बात करता है।

मैं फ़ायरफ़ॉक्स के लिए RefControl addin के साथ खेलना चाहता हूं।

प्रोग्रामेटिक रूप से (विशेष रूप से एएसपी.नेट में) UrlReferrer केवल पढ़ने योग्य संपत्ति है, इसलिए मुझे नहीं लगता कि मैं नकली रेफरर डेटा के साथ अनुरोध कैसे बंद कर सकता हूं अगर मैं इसे सेट नहीं कर सकता? क्या मुझे वास्तव में इसे मैन्युअल रूप से करना है?

मैं उपयोगकर्ता द्वारा आपूर्ति किए गए चर के साथ रेफरर हेडर को पॉप्युलेट करने के लिए अपनी साइट पर अनुरोध भेजने के लिए ASP.NET का उपयोग कैसे करूं?

संपादित करें: मेरी टिप्पणी के अनुसार नीचे, मैं आदर्श रूप में एक इनकमिंग अनुरोध ले रेफरर डेटा manupulate और फिर अनुरोध पर एक पृष्ठ पर बरकरार पास करना चाहते हैं। यदि मैं इसे बना सकता हूं तो खरोंच से एक नया निर्माण करके और मूल गुणों की प्रतिलिपि बनाकर बरकरार रहें, तो यह भी ठीक है।

+0

तुम्हारा मतलब है [ WebRequest.Create] (http://msdn.microsoft.com/en-us/library/0aa3d588.aspx) अनुरोध भेजने के लिए, एएसपी.NET नहीं? या आप वास्तव में किसी वेब अनुरोध के बिना अपने पृष्ठों का यूनिट-परीक्षण कर रहे हैं, यानी आपको संदर्भ कक्षाओं का नकल करने की आवश्यकता है ताकि आप उन्हें संशोधित कर सकें? – Rup

+0

ठीक है, मैंने सोचा था कि मैं "पाथथ्रू" अनुरोध का एक प्रकार करने के लिए एएसपी.नेट का उपयोग करूंगा, यानी जब मैं अपने टेस्ट पेज पर जाता हूं, तो यह मेरे अनुरोध को दूसरे पृष्ठ पर जाने से पहले संदर्भक को आसानी से जोड़ता है। यदि मैं WebRequest के साथ ऐसा कर सकता हूं, तो आपके प्रश्न का उत्तर "हां" है! – Widor

उत्तर

6

मैं अगर यह वास्तव में क्या आप चाहते हैं पता नहीं है, लेकिन सामान्य रूप में, आप का एक सा का उपयोग करके HttpContext.Current.Request में UrlReferer संपत्ति (भले ही वह केवल पढ़ने के लिए है) का मूल्य धोखा में सक्षम होना चाहिए प्रतिबिंब।

उदाहरण के लिए:

FieldInfo fi = HttpContext.Current.Request.GetType().GetField("_referrer", BindingFlags.NonPublic | BindingFlags.Instance); 

string initialReferer = HttpContext.Current.Request.UrlReferrer.ToString(); 
if (fi != null) 
    fi.SetValue(HttpContext.Current.Request, new Uri("http://example.com")); 
string fakedReferer = HttpContext.Current.Request.UrlReferrer.ToString(); 

वी.एस. पर; इन से पहले और UrlReferrer बदलने के बाद मान हैं:

initialReferer 
"http://localhost/Test/Default.aspx" 
fakedReferer 
"http://example.com/" 

आप ILSpy का उपयोग कर System.Web विधानसभा को खोलते हैं तो आप देखेंगे कि UrlReferrer संपत्ति इस तरह दिखता है:

public Uri UrlReferrer 
{ 
    get 
    { 
     if (this._referrer == null && this._wr != null) 
     { 
      string knownRequestHeader = this._wr.GetKnownRequestHeader(36); 
      if (!string.IsNullOrEmpty(knownRequestHeader)) 
      { 
       try 
       { 
        if (knownRequestHeader.IndexOf("://", StringComparison.Ordinal) >= 0) 
        { 
         this._referrer = new Uri(knownRequestHeader); 
        } 
        else 
        { 
         this._referrer = new Uri(this.Url, knownRequestHeader); 
        } 
       } 
       catch (HttpException) 
       { 
        this._referrer = null; 
       } 
      } 
     } 
     return this._referrer; 
    } 
} 
+0

धन्यवाद, यह आशाजनक लग रहा है। अगर मैं 'Response.Redirect' का उपयोग करता हूं, तो नकली रेफरर संरक्षित नहीं है, लेकिन यह' सर्वर। ट्रांसफर 'के साथ काम करता है। – Widor

+0

@ विडियो दिलचस्प है, लेकिन समझ में आता है। Response.Redirect ब्राउज़र के लिए एक गोल roundtrip और सर्वर पर वापस करता है। – Icarus

3

यह संभावना है कि आप जो चाहते हैं उसे प्राप्त नहीं करेंगे। लेकिन आप एक HttpWebRequest के आतंक को संपादित कर सकते हैं। मुझे नहीं लगता कि संदर्भ में आपके अनुरोध के संदर्भकर्ता को संपादित करने का एक तरीका है।

using System.Net; 

HttpWebRequest Req= (HttpWebRequest)System.Net.HttpWebRequest.Create("http://somewhere.com/"); 
Req.Referer = "http://www.fakesite.com";