UrlScan के बिना Azure / IIS7 में अत्यधिक HTTP प्रतिक्रिया हेडर को छुपाना / छिपाना / अक्षम करना


86

मुझे अत्यधिक हेडर निकालने की जरूरत है (मुख्य रूप से पैठ परीक्षण पास करने के लिए)। मैंने उन समाधानों को देखने में समय बिताया है जिनमें उर्सस्कैन को चलाना शामिल है, लेकिन ये बोझिल हैं क्योंकि उर्सकेन को हर बार एक एज़्योर इंस्टेंस शुरू करने की आवश्यकता होती है

Azure के लिए एक अच्छा समाधान होना चाहिए जिसमें स्टार्टअप से स्थापित इंस्टॉलर शामिल नहीं हैं। cmd।

मैं समझता हूं कि प्रतिक्रिया शीर्षकों को विभिन्न स्थानों पर जोड़ा जाता है :

  • सर्वर : IIS द्वारा जोड़ा गया।
  • X-AspNet- संस्करण : HttpResponse वर्ग में फ्लश के समय System.Web.dll द्वारा जोड़ा गया
  • X-AspNetMvc- संस्करण : System.Web.dll में MvcHandler द्वारा जोड़ा गया।
  • X-Powered-by : IIS द्वारा जोड़ा गया

आईआईएस मॉड्यूल बनाने या इंस्टॉल करने की जरूरत के बिना asafaweb.com पर "अत्यधिक हेडर्स" चेतावनी से बचने के लिए HTTP रिस्पांस हेडर्स को हटाने / छिपाने / अक्षम करने के लिए IIS7 को कॉन्फ़िगर करने (वेब ​​के माध्यम से) करने के लिए क्या कोई तरीका है? हर बार एज़्योर इंस्टेंस शुरू होने पर चलाया जाए?

जवाबों:


139

निम्नलिखित परिवर्तन आपको कस्टम HttpModule लिखने के बिना Azure में इन HTTP प्रतिक्रिया हेडर को निकालने की अनुमति देते हैं ।

नेट पर अधिकांश जानकारी पुराना है, और इसमें UrlScan शामिल है (जिसे तब से IIS7 में एकीकृत किया गया है, लेकिन RemoveServerHeader=1हटाए गए विकल्प के साथ )। नीचे मैंने पाया सबसे साफ समाधान है ( इस ब्लॉग के लिए धन्यवाद , यह उत्तर , और यह ब्लॉग संयुक्त)।

सर्वर को हटाने के लिए, Global.asax पर जाएं, Application_PreSendRequestHeadersईवेंट ढूंढें / बनाएं और निम्नलिखित जोड़ें ( BK के लिए धन्यवाद और यह ब्लॉग कैसिनी / स्थानीय देव पर भी विफल नहीं होगा):

अप्रैल 2014 को संपादित: आप PreSendRequestHeaders और PreSendRequestContext घटनाओं का उपयोग देशी IIS मॉड्यूल के साथ कर सकते हैं, लेकिन IHttpModule को लागू करने वाले प्रबंधित मॉड्यूल के साथ उनका उपयोग न करें। इन गुणों को सेट करना अतुल्यकालिक अनुरोधों के साथ समस्याएँ पैदा कर सकता है । सही संस्करण BeginRequest घटना का उपयोग करने के लिए है।

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;
        if (application != null && application.Context != null)
        {
            application.Context.Response.Headers.Remove("Server");
        }
    }

वेब में X-AspNet- वर्जन को हटाने के लिए .config ढूंढें / बनाएं <system.web>और जोड़ें:

  <system.web>
    <httpRuntime enableVersionHeader="false" />

    ...

X-AspNetMvc- संस्करण को निकालने के लिए, Global.asax पर जाएं, Application_Startईवेंट ढूंढें / बनाएं और निम्नानुसार एक पंक्ति जोड़ें:

  protected void Application_Start()
  {
      MvcHandler.DisableMvcResponseHeader = true;
  }

Web.config में X-Powered-By को हटाने के लिए / बनाएं <system.webServer>और जोड़ें:

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>

    ...

वी.एस., कोई अशक्त करने की आवश्यकता की जांच का अनुरोध, प्रतिक्रिया, या Response.Headers में इशारा के अनुसार
क्रिस हैंस

1
जब IIS पर एज़्योर का उपयोग नहीं किया जाता है, तो यह जान लें कि एप्लिकेशन पूल को एकीकृत मोड में होना चाहिए। और .IsLocal स्थानीय रूप से डीबगिंग जब हटाया जाना चाहिए।
इवानथ

5
C # में "Yoda की स्थिति" की कोई आवश्यकता नहीं है - यह सशर्त में असाइनमेंट की अनुमति नहीं देता है, en.wikipedia.org/wiki/Yoda_Conditions
tvanfosson

1
विस्तार से उत्तर के लिए धन्यवाद, हालांकि मैंने कोशिश की और चरणों का पालन किया, लेकिन हर बार जब मैं asafweb का उपयोग करके साइट को स्कैन करता हूं, तो यह अभी भी अत्यधिक हेडर (एक्स-एस्पनेट-संस्करण) के बारे में एक समस्या का उल्लेख करता है। मैंने इस शीर्ष लेख को हटाने के लिए URLRewrite का भी उपयोग किया था। क्या वे इसे हटाने की कोई अन्य संभावनाएं हैं?
रेमंड ए

4
एक गैर-मौजूद फ़ाइल के अनुरोध की समस्या अभी भी है, उदाहरण के लिए " तुम्हारा / foo.jpg "। चूंकि यह अनुरोध MVC द्वारा संसाधित नहीं किया गया है, इसलिए प्रतिक्रिया शीर्ष लेख "सर्वर: IIS xy" अभी भी रहेगा। एक समाधान जो Azure वेब साइट्स के लिए काम करता है (और जाहिर तौर पर केवल azure वेब साइट्स के लिए) <system.webServer>: <सुरक्षा xdt: Transform = "Insert"> <requestFiltering removeSververHeader = "true" / </ Security के तहत इसे जोड़ना है >
एड्रियन एच।

12

MSDN ने इस लेख को Azure Websites पर हेडर्स को कैसे छिपाया जाए, इस पर प्रकाशित किया । अब आप system.webServer में प्रविष्टि जोड़कर सर्वर को web.config से छिपा सकते हैं

<security>
      <requestFiltering removeServerHeader ="true" />
</security>

वी.एस. हालांकि उपरोक्त के रूप में अमान्य होगा। ऊपर दिए गए लिंक में पिक्स के रूप में कोड है, जिसे खोजना मुश्किल है। MVC संस्करण अभी भी ऊपर के रूप में अनुप्रयोग प्रारंभ में छिपा हुआ है, एक्स-संचालित-द्वारा और .Net संस्करण के लिए समान है।


3
यह वही है जिसकी मुझे तलाश थी। धन्यवाद।
मार्टिन कॉस्टेलो

3
यह एज़्योर के लिए काम कर सकता है, लेकिन कहीं और नहीं। उस लेख की टिप्पणियां इस बात की पुष्टि करती हैं, जैसा कि मेरा स्वयं का परीक्षण है। @ Giveme5minutes का उत्तर वह तरीका है जो काम करता है।
क्रेजीप्रो

यह जानकर अच्छा लगेगा कि इस समारोह को बनाने के लिए क्या लागू किया गया था: | विशेष रूप से चूंकि URL SCAN ने पहले इसे बॉक्स से बाहर लागू किया था।
felickz

6

नूगेट पर एक पैकेज भी है जो आपको कुछ पंक्तियों के माध्यम से इसे प्राप्त करने में मदद करता है और कोड में कोई परिवर्तन नहीं करता है: NWebsec। संस्करण हेडर निकालने पर डॉक्स यहां देखे जा सकते हैं: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

यह यहां प्रदर्शित है: http://www.nwebsec.com/HttpHeaders/VersionHeaders (Azure में)

अस्वीकरण: मैं परियोजना पर डेवलपर हूं।


"NWebsec आपको इनमें से लगभग सभी संस्करण हेडर को दबाने में मदद करता है, अर्थात सर्वर: Microsoft-IIS / 8.0 हेडर।" :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
felickz


6

निक इवांस का जवाब एकदम सही है, लेकिन ...

यदि आप इन हेडर को किसी सुरक्षा उद्देश्य के लिए हटाते हैं , तो इसे बदलना न भूलें ASP.NET Session coockie name! क्योंकि जब आप इसे देखते हैं तो प्रयुक्त भाषा या सर्वर संस्करण का अनुमान लगाना आसान होता है:

यहां छवि विवरण दर्ज करें

कुकी का नाम बदलने के लिए: (रचनात्मक रहें)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>

कुकी के नाम को बदलने से सर्वर तकनीक के जोखिम से अधिक लाभ होते हैं - जैसे सामान्य, थोक सत्र कटाई के जोखिम को कम करता है
mlhDev

4

@ Giveme5minutes और @AKooli के पिछले उत्तरों को रोल करते हुए, क्योंकि वे Azure Websites से संबंधित हैं और कुछ अन्य आइटम जिन्हें स्कैनर देखना चाहता है, ये वो बदलाव हैं जो मैंने Azaf साइट के साथ ASafaWeb को खुश करने के लिए किए थे।

यह अभी भी Azure affinity हेडर कुकी के बारे में शिकायत करता है कि केवल https नहीं है, लेकिन affinity कुकी का प्रकार है जिसे आप फिर से खेलना चाहते हैं, है ना?

<system.web>
    <compilation debug="false">
    <httpRuntime enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />    
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!--removes Azure headers-->
      <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.