ASP.Net MVC डिफ़ॉल्ट HTTP हेडर कैसे निकालें?


176

एमवीसी एप्लिकेशन में प्रत्येक पृष्ठ मैं इन HTTP हेडर को प्रतिक्रियाओं के साथ सेट कर रहा हूं:

X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0

मैं इन्हें दिखाने से कैसे रोकूँ?


2
इस लेख को देखें IIS और ASP.NET में अनावश्यक HTTP हेडर को हटाते हुए, यह बताता है कि आपके सभी सूचीबद्ध हेडर को कैसे हटाया जाए।
पावले मोरशेन्युक

@PavelMorshenyuk क्षमा करें, क्या आपको सर्वर नाम को भी हटाने का कोई तरीका मिला? स्वीकृत उत्तर सर्वर को दूर नहीं करता है
neda Derakhshesh

जवाबों:


285

X-Powered-ByIIS में एक कस्टम हेडर है। IIS 7 के बाद से, आप इसे अपने निम्नलिखित में जोड़कर निकाल सकते हैं web.config:

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

अधिक जानकारी के लिए http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders को देखें


शीर्षलेख से web.configछुटकारा पाने के लिए इसे जोड़ें X-AspNet-Version:

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

अंत में, ईवेंट को हटाने X-AspNetMvc-Version, संपादित करने Global.asax.csऔर जोड़ने के लिए Application_Start:

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

आप Application_PreSendRequestHeadersइवेंट के माध्यम से रनटाइम पर हेडर को भी संशोधित कर सकते हैं Global.asax.cs। यदि आपका हेडर मान गतिशील है तो यह उपयोगी है:

protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
      Response.Headers.Remove("foo");
      Response.Headers.Add("bar", "quux");
}

4
+1 - ब्याज के लिए, 1) आप क्यों करेंगे? 2) क्या इसका कोई प्रतिकूल प्रभाव है?
ब्रिटिशडब्लूपर

69
ऐसा आप सुरक्षा कारणों से करते हैं कि आप अपने वेब पेज बनाने के लिए किस तकनीक का उपयोग करते हैं। यह हैकर्स को थोड़ा कठिन काम करने के लिए मजबूर करता है।
RedFilter

20
@BritishDeveloper यह एक अनुशंसा थी जो सुरक्षा समीक्षा से बाहर आई थी। मुझे लगता है कि इसका सबसे अच्छा अभ्यास आपकी प्रौद्योगिकी स्टैक का विज्ञापन नहीं करना है, क्योंकि यह हैकर्स को उस प्लेटफॉर्म के साथ विशिष्ट कमजोरियों को लक्षित करने में मदद करता है।
पॉल फ्रायर

1
@RedFilter आपके त्वरित और विस्तृत उत्तर के लिए धन्यवाद!
पॉल फ्रायर

6
IIS 8 पर यह X-Powered-Byशीर्ष लेख नहीं निकालता है । इसे प्राप्त करने के तरीके पर अन्य उत्तर देखें web.config
क्लीस

105

आप अपनी Global.asax फ़ाइल में कोड जोड़कर उन्हें भी हटा सकते हैं:

 protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
 {
   HttpContext.Current.Response.Headers.Remove("X-Powered-By");
   HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
   HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
   HttpContext.Current.Response.Headers.Remove("Server");
 }

29
मेरे मामले में केवल अंतिम तीन ने काम किया, "एक्स-पावर्ड-बाय" के लिए मुझे अभी भी ज़रूरत थी<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
फ्रैंक वैन आइकेलन

2
मेरे मामले में उपरोक्त हेडर में से कोई भी हटाया नहीं गया था। मैं .net 4.0 और IIS 7 का उपयोग कर रहा हूं। इस थ्रेड में अन्य टिप्पणियों के लिए धन्यवाद। मैंने "सर्वर" के अपवाद के साथ सभी अवांछित हेडर को निकालने में कामयाबी हासिल की है जो सबसे खराब स्थिति है।
फरजाद

2
क्या यह आपकी सामग्री फ़ाइलों / छवियों / आदि के खिलाफ काम करता है जो कोड पथ से नहीं जा रहे हैं?
मार्क सोउल

आपने "सर्वर" में क्या रखा है? क्या ऐसा होना चाहिए? प्रतिसाद। Headers.Remove ("सर्वर: Microsoft-IIS / 7.0"); ? या यह "सर्वर" होना चाहिए? कृपया मदद करें
neda Derakhshesh

किसी और के लिए अजीब है कि "PreSendRequestHeaders" वास्तव में पूर्व प्रतिक्रिया हेडर भेज रहा है?
JDPeckham

50

मुझे यह कॉन्फ़िगरेशन मिला, web.configजो कि New Web Site...विजुअल स्टूडियो में बनाया गया था (जैसा कि विरोध किया गया था New Project...)। चूंकि प्रश्न ASP.NET MVC अनुप्रयोग के रूप में प्रासंगिक नहीं है, लेकिन फिर भी एक विकल्प बताता है।

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

अद्यतन : इसके अलावा, ट्रॉय हंट का एक लेख है जिसका शीर्षक है Shhh ... अपने हेडर को इन हेडर को हटाने के साथ-साथ उनके और अन्य सुरक्षा कॉन्फ़िगरेशन के लिए स्कैन करने के लिए उनके ASafaWeb टूल के लिंक पर भी जोर से बात न करने दें


5
सबसे अच्छा विकल्प लेकिन iis7 की आवश्यकता होती है + आपको <स्पष्ट /> उन्हें ... हटाने की आवश्यकता नहीं है .. आप भी एक और भेद्यता को दूर करने के लिए इसे system.webserver में जोड़ना चाह सकते हैं: code <सुरक्षा> <अनुरोधफ़िल्टरिंग> <क्रिया> <क्रिया = "विकल्प" की अनुमति = "झूठी" /> </ verbs> </ requestFiltering> </ सुरक्षा>code
felickz

मुझे लगता है कि <स्पष्ट /> तत्व 'एक्स-पावररड-बाय' सहित सभी हेडर को साफ करता है, इसलिए <निकालें /> तत्व बेमानी है।
Jan H

33

.NET कोर

सर्वर हेडर को हटाने के लिए , Program.cs फ़ाइल के भीतर , निम्न विकल्प जोड़ें:

.UseKestrel(opt => opt.AddServerHeader = false)

डॉट नेट कोर 1 के लिए, .UseKestrel () कॉल के अंदर विकल्प जोड़ें। डॉट नेट कोर 2 के लिए, UseStartup () के बाद लाइन जोड़ें।

यदि X-Powered-by हैडर को हटाने के लिए , यदि IIS में तैनात किया गया है, तो अपने web.config को संपादित करें और system.webServer टैग के अंदर निम्न अनुभाग जोड़ें:

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

.NET 4.5.2

सर्वर हैडर को हटाने के लिए , अपने global.asax फ़ाइल के भीतर निम्नलिखित जोड़ें:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string[] headers = { "Server", "X-AspNet-Version" };

        if (!Response.HeadersWritten)
        {
            Response.AddOnSendingHeaders((c) =>
            {
                if (c != null && c.Response != null && c.Response.Headers != null)
                {
                    foreach (string header in headers)
                    {
                        if (c.Response.Headers[header] != null)
                        {
                            c.Response.Headers.Remove(header);
                        }
                    }
                }
            });
        }

    }

पूर्व .NET 4.5.2

अपनी परियोजना में निम्नलिखित c # वर्ग जोड़ें:

public class RemoveServerHeaderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Headers.Remove("Server");
    }
}

और फिर अपने web.config में निम्नलिखित <मॉड्यूल> अनुभाग जोड़ें:

<system.webServer>
    ....
 <modules>
    <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
 </modules>

हालाँकि मुझे एक समस्या थी जहाँ उप-परियोजनाएँ इस मॉड्यूल को नहीं ढूंढ सकीं। मज़ा नहीं।

X-AspNetMvc- संस्करण हेडर निकाल रहा है

.NET के किसी भी संस्करण के लिए '' X-AspNetMvc-Version '' टैग को हटाने के लिए, अपनी '' web.config '' फ़ाइल को शामिल करने के लिए संशोधित करें:

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

इस अविश्वसनीय रूप से कठिन बनाने के लिए धन्यवाद Microsoft। या हो सकता है कि आपका इरादा था ताकि आप दुनिया भर में IIS और MVC इंस्टॉल कर सकें ...


3
इस दिन और उम्र में यह एक "सबसे खराब अभ्यास" माना जाता है और यह विश्वास करना मुश्किल है कि माइक्रोसॉफ्ट अभी भी "सुरक्षित" चुनने के लिए डिफ़ॉल्ट और इसलिए मुश्किल "असुरक्षित" बनाता है। यह मुझे याद दिलाता है कि विंडोज डिफ़ॉल्ट रूप से आम फाइल एक्सटेंशन को कैसे छुपाता है ताकि उपयोगकर्ताओं को वायरस पर क्लिक करने में असम्भवता हो। मुझे याद है कि बिल गेट्स ने 2003 में "डिफ़ॉल्ट रूप से सुरक्षित" की घोषणा की थी - जो भी उस विचार के लिए हुआ था?
माइक नेल्सन

2
@mikenelson अगर यह आपको कोई बेहतर महसूस कराता है, तो nginx में सर्वर टैग को हटाने की कोशिश करना उतना ही मुश्किल है - मैंने स्वयं वास्तविक स्रोत कोड को हैक करने के लिए समाप्त कर दिया है।
रॉकलैंड

इसके बारे RemoveServerHeaderModuleमें WebApi प्रोजेक्ट में काम नहीं किया जा रहा है।
क्रिप्रू

32

जैसा कि IIS 7 पर आपके ASP.NET MVC वेब एप्लिकेशन को क्लोकिंग में वर्णित किया गया है , आप अपने वेब.config में निम्न कॉन्फ़िगरेशन अनुभाग को लागू करके X-AspNet- संस्करण हेडर को बंद कर सकते हैं:

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

और अपने Global.asax.cs को बदलकर X-AspNetMvc- वर्जन हैडर को हटा दें:

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

जैसा कि कस्टम हेडर में वर्णित है, आप अपने वेब के लिए निम्नलिखित विन्यास अनुभाग को लागू करके "X-Powered-By" हेडर को हटा सकते हैं।

<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer>

कॉन्फ़िगरेशन के माध्यम से "सर्वर" प्रतिक्रिया हेडर को निकालने का कोई आसान तरीका नहीं है, लेकिन आप एक HttpModuleविशिष्ट HTTP हेडर को हटाने के लिए कार्यान्वित कर सकते हैं जैसा कि IIS 7 में अपने ASP.NET MVC वेब एप्लिकेशन को क्लोकिंग करने में और कैसे-करने-हटाने के लिए- x-aspnet-version-x-aspnetmvc-version-and-x-Powered-by-the-response-header-in-iis7


Bkaid उत्तर का उपयोग करके मैं "सर्वर" हेडर को हटाने में सक्षम हूं। IIS 8.
tmorell

bkaid उत्तर ठीक है, लेकिन इसके लिए कोडिंग की आवश्यकता है, इसलिए मैंने उस समाधान को अधिक सुविधाजनक बताया, क्योंकि यह कॉन्फ़िगरेशन आधारित है।
RonyK

8

जैसा कि विंडोज एज़्योर वेब साइट्स पेज पर मानक सर्वर हेडर को हटाने पर दिखाया गया है , आप निम्न के साथ हेडर निकाल सकते हैं:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering removeServerHeader="true"/>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>

यह सर्वर हेडर और एक्स हेडर को हटाता है।

यह दृश्य स्टूडियो 2015 में मेरे परीक्षणों में स्थानीय रूप से काम करता था।


6
RemoveServerHeader = "true" को जोड़ने से मुझे मेरे ASP.NET 4.5.3 ऐप पर 500 त्रुटि
मिली

4
@LachlanB यह IIS 10 में जोड़ा गया था: IIS 10.0 ने दूरस्थ ग्राहकों को HTTP सर्वर हेडर भेजने के लिए हटाने के लिए हटाए गएSSververHeader विशेषता को जोड़ा। स्रोत: iis.net/configreference/system.webserver/security/…
SynerCoder

1
मुझे लगता है कि Azure पेज कोड ब्लॉक के बजाय स्क्रीनशॉट प्रदान करता है । वे वस्तुतः इन अनावश्यक और संभावित खतरनाक टैग को हटाने के लिए जितना संभव हो सके उतना सब कुछ करते हैं। इसके अलावा, मुझे विश्वास नहीं हो रहा है कि मैं इस मुद्दे को सही करने के लिए तीन साल पुराने SO प्रश्न का संदर्भ दे रहा हूं, जो सही होने के कोई संकेत नहीं दिखाता है।
किला-बाइट

1
मुझे लगता है कि यह Web.config X-AspNetMvc-Version हेडर को नहीं हटाता है। उस एक को हटाने के लिए हमें Global.asax stackoverflow.com/a/20739875/1678525
Jan H

8

Asp.Net Core में आप web.config फाइल्स को एडिट कर सकते हैं:

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

आप Kestrel विकल्पों में सर्वर हेडर को हटा सकते हैं:

            .UseKestrel(c =>
            {
                // removes the server header
                c.AddServerHeader = false;
            }) 

5

इस ब्लॉग की जाँच करें हेडर निकालने के लिए कोड का उपयोग न करें। यह Microsoft के अनुसार अस्थिर है

मेरे इस पर ले:

<system.webServer>          
    <httpProtocol>
    <!-- Security Hardening of HTTP response headers -->
    <customHeaders>
        <!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent 
                Internet Explorer from MIME-sniffing a response away from the declared content-type. -->
        <add name="X-Content-Type-Options" value="nosniff" />

        <!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not. 
                 By preventing a browser from framing your site you can defend against attacks like clickjacking. 
                 Recommended value "x-frame-options: SAMEORIGIN" -->
        <add name="X-Frame-Options" value="SAMEORIGIN" />

        <!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that 
                 they should only read the master crossdomain.xml file from the root of the website. 
                 https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
        <add name="X-Permitted-Cross-Domain-Policies" value="master-only" />

        <!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers. 
                 Recommended value "X-XSS-Protection: 1; mode=block". -->
        <add name="X-Xss-Protection" value="1; mode=block" />

        <!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites. 
                 If you have sensitive information in your URLs, you don't want to forward to other domains 
                 https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
        <add name="Referrer-Policy" value="no-referrer-when-downgrade" />

        <!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration -->
        <remove name="X-Powered-By" />

        <!-- Ensure the cache-control is public, some browser won't set expiration without that  -->
        <add name="Cache-Control" value="public" />
    </customHeaders>
</httpProtocol>

<!-- Prerequisite for the <rewrite> section
            Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/microsoft/url-rewrite -->
<rewrite>
    <!-- Remove Server response headers (OWASP Security Measure) -->
    <outboundRules rewriteBeforeCache="true">
        <rule name="Remove Server header">
            <match serverVariable="RESPONSE_Server" pattern=".+" />

            <!-- Use custom value for the Server info -->
            <action type="Rewrite" value="Your Custom Value Here." />
        </rule>
    </outboundRules>
</rewrite>
</system.webServer>

4

पूर्णता के लिए, हटाने का एक और तरीका है Server हेडर का उपयोग करके regedit का उपयोग ।

इस MSDN ब्लॉग को देखें

निम्न रजिस्ट्री कुंजी में DisableServerHeader नामक DWORD प्रविष्टि बनाएँ और मान को 1 पर सेट करें।

HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ पैरामीटर

मैं इसके बजाय Web.config का उपयोग करके एक उचित समाधान ढूंढूंगा, लेकिन इसका उपयोग <rewrite>करना अच्छा नहीं है क्योंकि इसे फिर से लिखना मॉड्यूल को स्थापित करने की आवश्यकता होती है, और तब भी यह हेडर को वास्तव में नहीं हटाएगा, बस इसे खाली करें।


यदि यह काम करता है तो यह मेरे मामले के लिए एक अच्छा समाधान की तरह लगता है। मेरे पास .net के विभिन्न संस्करणों में 30 वेबसाइटें हैं और इसलिए हेडर को हटाने और इन सभी साइटों में कोड अपडेट करने के 3 अलग-अलग तरीकों की आवश्यकता होगी। मैं कोड को संशोधित करने की तुलना में एक विन्यास सेटिंग या रजिस्ट्री चाहता हूँ।
माइक नेल्सन

मैंने इसे दो दिन पहले सफलतापूर्वक लागू किया, महान काम करता है।
रुडी

2

आप Application_EndRequest()इस कोशिश में कोई भी हेडर या कुछ भी बदल सकते हैं

protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}

1

X-Powered-by शीर्ष लेख IIS द्वारा HTTP प्रतिसाद में जोड़ा जाता है, इसलिए आप इसे IIS प्रबंधक के माध्यम से सर्वर स्तर पर भी निकाल सकते हैं:

आप सीधे web.config का उपयोग कर सकते हैं:

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