내가 작업중 인 MVC 응용 프로그램의 각 페이지는 다음 HTTP 헤더를 응답으로 설정합니다.
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
이것들이 보이지 않게하려면 어떻게해야합니까?
내가 작업중 인 MVC 응용 프로그램의 각 페이지는 다음 HTTP 헤더를 응답으로 설정합니다.
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
이것들이 보이지 않게하려면 어떻게해야합니까?
답변:
X-Powered-By
IIS의 사용자 지정 헤더입니다. 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");
}
X-Powered-By
헤더 가 제거되지 않습니다 . 에서이 작업을 수행하는 방법에 대한 다른 답변을 참조하십시오 web.config
.
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");
}
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
나는 나의이 구성을 발견 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 도구 링크에 대한 응답 헤더가 너무 크게 말하지 않도록 하십시오 .
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS"allowed = "false"/> </ verbs> </ requestFiltering> </ security>code
.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>
그러나 하위 프로젝트 에서이 모듈을 찾을 수없는 문제가있었습니다. 재미 없어.
.NET 버전에 대해 ''X-AspNetMvc-Version ''태그를 제거하려면 ''web.config ''파일을 다음과 같이 수정하십시오.
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
믿을 수 없을 정도로 어렵게 만드는 Microsoft에 감사드립니다. 또는 전 세계의 IIS 및 MVC 설치를 추적 할 수 있도록 의도 한 것일 수도 있습니다 ...
RemoveServerHeaderModule
는 WebApi 프로젝트거야 일이 아니다.
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 .
그림과 같이 윈도우 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의 테스트에서 로컬로 작동했습니다.
이 블로그를 확인하십시오 . 헤더를 제거하기 위해 코드를 사용하지 마십시오. 마이크로 소프트 에 따르면 불안정하다
내가 이것에 걸릴 :
<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>
완전성을 위해 Server
regedit를 사용하여 헤더 를 제거하는 또 다른 방법이 있습니다.
다음 레지스트리 키에 DisableServerHeader라는 DWORD 항목을 만들고 값을 1로 설정하십시오.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ 매개 변수
Web.config를 사용하여 적절한 솔루션을 찾고 싶지만 <rewrite>
다시 쓰기 모듈을 설치해야하기 때문에 사용하는 것이 좋지 않으며 심지어 헤더를 제거하지 않고 비우십시오.
X-Powered-By 헤더는 IIS에 의해 HTTP 응답에 추가되므로 IIS 관리자를 통해 서버 수준에서도 제거 할 수 있습니다.
web.config를 직접 사용할 수 있습니다.
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>