UrlScan없이 Azure / IIS7에서 과도한 HTTP 응답 헤더 제거 / 숨기기 / 비활성화


86

과도한 헤더 를 제거해야합니다 (주로 침투 테스트를 통과하기 위해). 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 인스턴스가 시작될 때마다 실행됩니까?

답변:


139

다음 변경 사항을 통해 사용자 지정 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>

    ...

VS의 힌팅에 따르면 요청, 응답 또는 응답을 null 검사 할 필요가 없습니다.
Chris Haines

1
Azure가 아닌 IIS에서 사용되는 경우 응용 프로그램 풀이 통합 모드에 있어야합니다. 그리고 .IsLocal은 로컬로 디버깅 할 때 제거되어야합니다.
IvanH 2013-08-16

5
C #에서 "요다 조건"에 대한 필요가 없습니다 - 그것은 조건에서 할당을 허용하지 않습니다 en.wikipedia.org/wiki/Yoda_Conditions
tvanfosson

1
자세한 답변을 주셔서 감사합니다. 그러나 단계를 시도하고 따랐지만 asafweb을 사용하여 사이트를 스캔 할 때마다 과도한 헤더 (X-AspNet-Version)에 대한 문제가 여전히 언급됩니다. 이 헤더를 제거하기 위해 URLRewrite를 사용하기도했습니다. 그것들을 제거 할 수있는 다른 가능성이 있습니까?
Raymond A

4
존재하지 않는 파일 (예 : " yoursite / foo.jpg ") 을 요청하는 데 여전히 문제가 있습니다 . 이 요청은 MVC에 의해 처리되지 않기 때문에 응답 헤더 "Server : IIS xy"가 여전히 존재합니다. Azure 웹 사이트 (그리고 분명히 하늘색 웹 사이트에만 해당)에서 작동하는 한 가지 솔루션은 <system.webServer> : <security xdt : Transform = "Insert"> <requestFiltering removeServerHeader = "true"/> </ security 아래에 추가하는 것입니다. >
adrian h.

12

MSDN 은 Azure 웹 사이트에서 헤더를 숨기는 방법에 대한 이 문서 를 게시 했습니다 . 이제 system.webServer에 항목을 추가하여 web.config에서 서버를 숨길 수 있습니다.

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

VS는 위의 경우 잘못된 것으로 눈살을 찌푸 릴 것입니다. 위의 링크에는 사진으로 코드가 있으며 찾기가 어렵습니다. MVC 버전은 x-powered-by 및 .Net 버전과 동일하게 위와 같이 응용 프로그램 시작에서 여전히 숨겨져 있습니다.


3
이것이 바로 제가 찾던 것입니다. 감사합니다.
Martin Costello 2015

3
이것은 Azure에서 작동하지만 다른 곳에서는 작동하지 않을 수 있습니다. 그 기사에 대한 의견은 내 자신의 테스트와 마찬가지로 이것을 확신합니다. @ giveme5minutes의 대답은 작동 방식입니다.
CrazyPyro 2015 년

이 함수를 만들기 위해 구현 된 것이 무엇인지 아는 것이 좋을 것입니다. 특히 URL SCAN은 이전에 이것을 즉시 구현했기 때문입니다.
felickz

6

NuGet에는 몇 줄의 구성과 코드 변경없이이를 달성하는 데 도움이되는 패키지가 있습니다. NWebsec. 버전 헤더 제거에 대한 문서는 https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers 에서 찾을 수 있습니다.

여기에서 데모 : http://www.nwebsec.com/HttpHeaders/VersionHeaders(Azure )

면책 조항 : 저는 프로젝트의 개발자입니다.


"NWebsec은 서버 : Microsoft-IIS / 8.0 헤더를 제외한 거의 모든 버전 헤더를 억제하도록 도와줍니다." :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
felickz

codeplex에서 GitHub로 이동했습니다 ( github.com/NWebsec/NWebsec/wiki 링크를 업데이트하십시오 )
Nordes

6

Nick Evans의 대답은 완벽하지만 ...

보안을 위해 이러한 헤더를 제거하는 경우 ASP.NET Session coockie name! 다음을 보면 사용 된 언어 나 서버 버전을 추측하기가 더 쉽기 때문입니다.

여기에 이미지 설명 입력

쿠키 이름을 변경하려면 : (창의적으로)

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

쿠키 이름을 변경하면 서버 기술 노출보다 더 많은 이점이 있습니다. 예를 들어 일반적인 대량 세션 수집 위험 감소
mlhDev

4

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