ASP.Net MVC 기본 HTTP 헤더를 제거하는 방법?


176

내가 작업중 인 MVC 응용 프로그램의 각 페이지는 다음 HTTP 헤더를 응답으로 설정합니다.

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

이것들이 보이지 않게하려면 어떻게해야합니까?


2
IIS 및 ASP.NET에서 불필요한 HTTP 헤더 제거 문서를 확인하십시오 . 나열된 헤더를 모두 제거하는 방법에 대해 설명합니다.
Pavel Morshenyuk

@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) 부작용이 있습니까?
BritishDeveloper

69
보안상의 이유로 웹 페이지를 생성하는 데 사용하는 기술을 혼란스럽게하기 위해이 작업을 수행합니다. 이로 인해 해커가 조금 더 열심히 일하게됩니다.
RedFilter

20
@BritishDeveloper 이것은 보안 검토에서 나온 권장 사항입니다. 해커가 해당 플랫폼의 특정 취약성을 대상으로하는 데 도움이되므로 기술 스택을 광고하지 않는 것이 가장 좋습니다.
Paul Fryer

1
@RedFilter 빠르고 자세한 답변 감사합니다!
Paul Fryer

6
IIS 8에서는 X-Powered-By헤더 가 제거되지 않습니다 . 에서이 작업을 수행하는 방법에 대한 다른 답변을 참조하십시오 web.config.
Knelis

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
제 경우에는 마지막 3 명만이 "X-Powered-By"에 대해 효과가 <system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
있었습니다

2
필자의 경우 위의 헤더 중 어느 것도 제거되지 않았습니다. 이 스레드의 다른 의견 덕분에 .net 4.0과 IIS 7을 사용하고 있습니다. 최악의 경우 인 "서버"를 제외하고 원하지 않는 헤더를 모두 제거했습니다.
Farjad

2
코드 경로를 거치지 않는 콘텐츠 파일 / 이미지 / 등에 대해 작동합니까?
Mark Sowul

"서버"에 무엇을 넣었습니까? 이럴까요? Response.Headers.Remove ( "서버 : Microsoft-IIS / 7.0"); ? 또는 "서버"여야합니까? 도와주세요
neda Derakhshesh 2016

"PreSendRequestHeaders"가 실제로 사전 전송 응답 헤더라는 다른 사람에게는 이상하지 않습니까?
JDPeckham

50

나는 나의이 구성을 발견 web.config하는이었다에 대한 New Web Site...(A 반대로 비주얼 스튜디오에서 만든 New Project...)을. 이 질문에는 ASP.NET MVC 응용 프로그램이 관련이 없지만 여전히 옵션이라고 나와 있습니다.

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

업데이트 : 또한 Troy Hunt에는 Shhh 라는 제목의 기사가 있습니다. 이 헤더를 제거하는 자세한 단계와 헤더 및 기타 보안 구성을 스캔하기위한 ASafaWeb 도구 링크에 대한 응답 헤더가 너무 크게 말하지 않도록 하십시오 .


5
가장 좋은 옵션이지만 iis7 +가 필요합니다. <clear /> 필요하지 않습니다 ... 제거만으로 충분합니다. 또한 다른 취약점을 제거하기 위해 이것을 system.webserver에 추가 할 수 있습니다 : code <security> <requestFiltering> <verbs> <add verb = "OPTIONS"allowed = "false"/> </ verbs> </ requestFiltering> </ security>code
felickz 2016 년

<clear /> 요소는 'X-Powererd-By'를 포함한 모든 헤더를 지우므로 <remove /> 요소는 중복 적이라고 생각합니다.
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 내에 다음 <modules> 섹션을 추가하십시오.

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

그러나 하위 프로젝트 에서이 모듈을 찾을 수없는 문제가있었습니다. 재미 없어.

X-AspNetMvc-Version 헤더 제거

.NET 버전에 대해 ''X-AspNetMvc-Version ''태그를 제거하려면 ''web.config ''파일을 다음과 같이 수정하십시오.

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

믿을 수 없을 정도로 어렵게 만드는 Microsoft에 감사드립니다. 또는 전 세계의 IIS 및 MVC 설치를 추적 할 수 있도록 의도 한 것일 수도 있습니다 ...


3
오늘날과 같은 시대에는 이것이 "가장 최악의 실천"으로 간주되며 Microsoft가 여전히 "안전하지 않은"을 기본값으로 설정하고 "안전한"을 선택하는 것은 까다 롭다고 믿기가 어렵습니다. Windows가 기본적으로 일반 파일 확장자를 숨기고 의심하지 않는 사용자가 바이러스를 클릭하는 방법을 상기시킵니다. 2003 년에 빌 게이츠가 "기본적으로 안전하다"고 발표 한 것 같습니다.
mike nelson

2
@ mikenelson 그것이 nginx에서 Server 태그를 제거하려고 시도하는 것이 더 나아 졌다면 실제 소스 코드 자체를 해킹해야했습니다.
Rocklan

정보 RemoveServerHeaderModule는 WebApi 프로젝트거야 일이 아니다.
krypru 2016 년

32

IIS 7 에서 ASP.NET MVC 웹 응용 프로그램 클로킹에 설명 된대로 다음 구성 섹션을 web.config에 적용하여 X-AspNet-Version 헤더를 해제 할 수 있습니다.

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

Global.asax.cs를 다음과 같이 변경하여 X-AspNetMvc-Version 헤더를 제거하십시오.

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

사용자 정의 헤더에 설명 된대로 다음 구성 섹션을 web.config에 적용하여 "X-Powered-By"헤더를 제거 할 수 있습니다.

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

구성을 통해 "서버"응답 헤더를 쉽게 제거 할 수있는 방법은 없지만 IIS 7에서 ASP.NET MVC 웹 응용 프로그램 클로킹서버에서 서버를 제거하는 방법 HttpModule 설명 된대로 특정 HTTP 헤더를 제거하도록 구현할 수 있습니다. x-aspnet-version-x-aspnetmvc-version-and-x-powered-in-the-the-response-header-in-iis7 .


bkaid 답변을 사용하여 "서버"헤더를 제거 할 수 있습니다. IIS 8
tmorell

bkaid 답변은 훌륭하지만 코딩이 필요하므로 구성 기반이기 때문에 더 편리한 것으로 설명 된 솔루션을 찾았습니다.
RonyK

8

그림과 같이 윈도우 Azure 웹 사이트에 표준 서버 헤더를 제거 페이지, 다음, 헤더를 제거 할 수 있습니다 :

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

서버 헤더와 X 헤더가 제거됩니다.

이것은 Visual Studio 2015의 테스트에서 로컬로 작동했습니다.


6
removeServerHeader = "true"를 추가하면 ASP.NET 4.5.3 앱에서 500 오류가 발생했습니다
Rocklan

4
@LachlanB IIS 10에 추가되었습니다. IIS 10.0은 HTTP 서버 헤더를 원격 클라이언트로 보내는 것을 막기 위해 removeServerHeader 속성을 추가했습니다. 출처 : iis.net/configreference/system.webserver/security/…
SynerCoder

1
Azure 페이지 가 코드 블록이 아닌 스크린 샷을 제공한다는 점이 마음에 듭니다 . 문자 그대로 가능한 불필요하고 잠재적으로 위험한 태그를 제거하기 위해 최선을 다합니다. 또한이 문제를 해결하기 위해 3 세의 SO 질문을 참조하고 있다고 믿을 수 없습니다.
killa-byte

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

이 블로그를 확인하십시오 . 헤더를 제거하기 위해 코드를 사용하지 마십시오. 마이크로 소프트 에 따르면 불안정하다

내가 이것에 걸릴 :

<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

완전성을 위해 Serverregedit를 사용하여 헤더 를 제거하는 또 다른 방법이 있습니다.

이 MSDN 블로그를 참조하십시오 .

다음 레지스트리 키에 DisableServerHeader라는 DWORD 항목을 만들고 값을 1로 설정하십시오.

HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ 매개 변수

Web.config를 사용하여 적절한 솔루션을 찾고 싶지만 <rewrite>다시 쓰기 모듈을 설치해야하기 때문에 사용하는 것이 좋지 않으며 심지어 헤더를 제거하지 않고 비우십시오.


이것이 작동하면 제 경우에는 좋은 해결책처럼 들립니다. 다른 버전의 .net에 30 개의 웹 사이트가 있으므로 모든 사이트에서 헤더를 제거하고 코드를 업데이트하는 3 가지 방법이 필요합니다. 코드를 수정하는 것보다 구성 설정이나 레지스트리가 필요합니다.
mike nelson

나는 이틀 전에 이것을 성공적으로 적용했으며 훌륭하게 작동했습니다.
Rudey

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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.