सवाल UrlScan के बिना Azure / IIS7 में अत्यधिक HTTP प्रतिक्रिया शीर्षलेख को हटा / छुपाएं / अक्षम करना


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

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

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

  • सर्वरआईआईएस द्वारा जोड़ा गया।
  • एक्स-ASPNET-संस्करण: HttpResponse क्लास में फ्लश के समय System.Web.dll द्वारा जोड़ा गया
  • एक्स-AspNetMvc-संस्करण: System.Web.dll में MvcHandler द्वारा जोड़ा गया।
  • एक्स-संचालित-तकआईआईएस द्वारा जोड़ा गया

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


76
2017-10-09 16:01


मूल




जवाब:


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

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

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

संपादित अप्रैल 2014: आप देशी आईआईएस मॉड्यूल के साथ PreSendRequestHeaders और PreSendRequestContext ईवेंट का उपयोग कर सकते हैं, लेकिन 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");
        }
    }

दूर करना। एक्स-ASPNET-संस्करण, web.config में ढूंढें / बनाएं <system.web> और जोड़:

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

    ...

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

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

दूर करना। एक्स-संचालित-तक, web.config में ढूंढें / बनाएं <system.webServer> और जोड़:

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

    ...

132
2017-10-09 16:01



भयानक उत्तर - धन्यवाद - dunnry
जब आईआईएस पर उपयोग नहीं किया जाता है तो Azure को पता होना चाहिए कि एप्लिकेशन पूल को एकीकृत मोड में होना चाहिए। और स्थानीय स्तर पर डिबगिंग करते समय ILLocal को हटाया जाना चाहिए। - IvanH
सी # में "योड स्थितियों" की कोई आवश्यकता नहीं है - यह एक सशर्त में असाइनमेंट की अनुमति नहीं देता है, en.wikipedia.org/wiki/Yoda_Conditions - tvanfosson
विस्तार के उत्तर के लिए धन्यवाद, हालांकि मैंने कोशिश की और चरणों का पालन किया लेकिन हर बार जब मैं asafweb का उपयोग कर साइट स्कैन करता हूं, तो यह अभी भी अत्यधिक शीर्षलेख (एक्स-एस्पनेट-संस्करण) के बारे में एक मुद्दा का उल्लेख करता है। मैंने इस हेडर को हटाने के लिए URLRewrite का भी उपयोग किया। क्या वे इसे हटाने की कोई अन्य संभावनाएं हैं? - Raymond A
एक अस्तित्वहीन फ़ाइल का अनुरोध करने की समस्या अभी भी है, उदा। "yoursite / foo.jpg ";। चूंकि यह अनुरोध एमवीसी द्वारा संसाधित नहीं किया गया है, इसलिए प्रतिक्रिया शीर्षलेख "सर्वर: आईआईएस x.y" अभी भी वहां होगा। एक समाधान जो Azure वेब साइट्स (और स्पष्ट रूप से केवल अजीब वेबसाइटों के लिए) के लिए काम करता है, इसे <system.web सर्वर>> <security xdt: ट्रांसफॉर्म = "सम्मिलित करें"> <requestFiltering removalServerHeader = "true" /> </ security > - adrian h.


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

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

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


10
2018-01-11 16:39



ये है ठीक ठीक मैं क्या देख रहा था। धन्यवाद। - Martin Costello
यह Azure के लिए काम कर सकता है, लेकिन कहीं और नहीं। उस लेख पर टिप्पणियां इस बात को समझती हैं, जैसा कि मेरा स्वयं का परीक्षण करता है। @ Giveme5minutes द्वारा उत्तर वह तरीका है जो काम करता है। - CrazyPyro
यह जानना अच्छा होगा कि इस फ़ंक्शन को बनाने के लिए क्या कार्यान्वित किया गया था: | खासकर जब से यूआरएल स्कैन ने इसे बॉक्स के बाहर लागू किया था। - felickz


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

यह यहां डेमो किया गया है: http://www.nwebsec.com/HttpHeaders/VersionHeaders (Azure में)

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


6
2017-10-09 19:29



"NWebsec आपको इन सभी संस्करण शीर्षकों को दबाने में मदद करता है, यानी सर्वर के अलावा सभी: माइक्रोसॉफ्ट-आईआईएस / 8.0 हेडर।" :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers - felickz
यह कोडप्लेक्स से गिटहब तक चले गए (कृपया लिंक अपडेट करें github.com/NWebsec/NWebsec/wiki ) - Nordes


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

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

<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>

3
2018-01-24 04:07





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

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

enter image description here

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

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

2
2017-07-11 22:06