[asp.net] UrlScan없이 Azure / IIS7에서 과도한 HTTP 응답 헤더 제거 / 숨기기 / 비활성화
과도한 헤더 를 제거해야합니다 (주로 침투 테스트를 통과하기 위해). UrlScan 실행과 관련된 솔루션을 살펴 보았지만 Azure 인스턴스가 시작될 때마다 UrlScan을 설치해야 하므로 이는 번거 롭습니다 .
startup.cmd에서 설치 관리자를 배포하지 않는 좋은 Azure 솔루션이 있어야합니다.
응답 헤더가 다른 위치에 추가된다는 것을 이해합니다 .
- 서버 : IIS에 의해 추가되었습니다.
- X-AspNet-Version : HttpResponse 클래스에서 Flush시 System.Web.dll에 의해 추가됨
- X-AspNetMvc-Version : System.Web.dll의 MvcHandler에 의해 추가되었습니다.
- X-Powered-By : IIS에 의해 추가됨
구성 할 수있는 방법 (를 통해 Web.config의 등?) IIS7이에 경고 “과도한 헤더”방지하기 위해 HTTP 응답 헤더를 활성화 / 비활성화 / 숨기기를 제거 할 수 있습니까 asafaweb.com을 을 만들지 않고는, 어떤 필요에 모듈 또는 배포 설치 프로그램은 IIS Azure 인스턴스가 시작될 때마다 실행됩니까?
답변
다음 변경 사항을 통해 사용자 지정 HttpModule 을 작성 하지 않고도 Azure에서 이러한 HTTP 응답 헤더를 제거 할 수 있습니다.
인터넷에있는 대부분의 정보는 오래되었으며 UrlScan (이후 IIS7에 통합되었지만 RemoveServerHeader=1
옵션이 제거됨)과 관련됩니다. 아래는 내가 찾은 가장 좋은 솔루션입니다 ( 이 블로그 , 이 답변 및 이 블로그를 결합한 덕분에 ).
Server 를 제거하려면 Global.asax로 이동하여 Application_PreSendRequestHeaders
이벤트를 찾아서 생성 한 후 다음을 추가합니다 ( BK 및 이 블로그 덕분 에 Cassini / 로컬 개발자에서도 실패하지 않음).
2014 년 4 월 편집 : 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-Version 을 제거하려면 web.config에서 찾기 / 만들고 <system.web>
추가합니다.
<system.web>
<httpRuntime enableVersionHeader="false" />
...
X-AspNetMvc-Version 을 제거하려면 Global.asax로 이동하여 Application_Start
이벤트를 찾고 / 만들고 다음과 같이 줄을 추가합니다.
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
X-Powered-By 를 제거하려면 web.config에서 다음을 찾아 생성 <system.webServer>
하고 추가합니다.
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
답변
MSDN 은 Azure 웹 사이트에서 헤더를 숨기는 방법에 대한 이 문서 를 게시 했습니다 . 이제 system.webServer에 항목을 추가하여 web.config에서 서버를 숨길 수 있습니다.
<security>
<requestFiltering removeServerHeader ="true" />
</security>
VS는 위의 경우 잘못된 것으로 눈살을 찌푸 릴 것입니다. 위의 링크에는 사진으로 코드가 있으며 찾기가 어렵습니다. MVC 버전은 x-powered-by 및 .Net 버전과 동일하게 위와 같이 응용 프로그램 시작에서 여전히 숨겨져 있습니다.
답변
NuGet에는 몇 줄의 구성과 코드 변경없이이를 달성하는 데 도움이되는 패키지가 있습니다. NWebsec. 버전 헤더 제거에 대한 문서는 https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers 에서 찾을 수 있습니다.
여기에서 데모 : http://www.nwebsec.com/HttpHeaders/VersionHeaders(Azure )
면책 조항 : 저는 프로젝트의 개발자입니다.
답변
답변
@ giveme5minutes 및 @AKhooli의 이전 답변이 Azure 웹 사이트 및 스캐너가보고 싶어하는 몇 가지 다른 항목과 관련되어 있으므로 ASafaWeb을 Azure 사이트에서 만족스럽게 만들기 위해 변경 한 사항입니다.
https만이 아닌 Azure 선호도 헤더 쿠키에 대해 여전히 불평하지만 선호도는 어쨌든 재생하려는 쿠키 유형입니다.
<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>