Câu hỏi Loại bỏ / Ẩn / Vô hiệu hóa các tiêu đề phản hồi HTTP quá mức trong Azure / IIS7 mà không có UrlScan


Tôi cần phải loại bỏ tiêu đề quá mức (chủ yếu để vượt qua thử nghiệm thâm nhập). Tôi đã dành thời gian xem xét các giải pháp liên quan đến việc chạy UrlScan, nhưng chúng rất cồng kềnh UrlScan cần phải được cài đặt mỗi khi một cá thể Azure được bắt đầu.

Phải có một giải pháp tốt cho Azure không liên quan đến việc triển khai trình cài đặt từ startup.cmd.

Tôi hiểu rằng các tiêu đề phản hồi được thêm vào Những nơi khác nhau:

  • Máy chủ: được thêm vào bởi IIS.
  • Phiên bản X-AspNet: được thêm vào bởi System.Web.dll tại thời điểm Flush trong lớp HttpResponse
  • Phiên bản X-AspNetMvc: Được thêm bởi MvcHandler trong System.Web.dll.
  • X-Powered-By: được thêm vào bởi IIS

Có cách nào để cấu hình (thông qua web.config vv?) IIS7 để loại bỏ / ẩn / vô hiệu hóa các tiêu đề phản ứng HTTP để tránh cảnh báo "Tiêu đề quá mức" tại asafaweb.com, mà không cần tạo một mô-đun IIS hoặc triển khai trình cài đặt cần phải chạy mỗi khi một cá thể Azure bắt đầu?


76
2017-10-09 16:01


gốc




Các câu trả lời:


Các thay đổi sau cho phép bạn xóa các tiêu đề phản hồi HTTP này trong Azure không có viết một HttpModule tùy chỉnh.

Hầu hết thông tin trên mạng đã lỗi thời và liên quan đến UrlScan (đã được tích hợp vào IIS7, nhưng với RemoveServerHeader=1 đã xóa tùy chọn). Dưới đây là giải pháp gọn gàng nhất tôi đã tìm thấy (nhờ blog này, câu trả lời nàyblog này kết hợp).

Để xóa Máy chủ, truy cập Global.asax, tìm / tạo Application_PreSendRequestHeaders sự kiện và thêm phần sau (nhờ BK và blog này điều này cũng sẽ không thất bại trên Cassini / dev địa phương):

Đã chỉnh sửa tháng 4 năm 2014: Bạn có thể sử dụng các sự kiện PreSendRequestHeaders và PreSendRequestContext với các mô-đun IIS gốc, nhưng không sử dụng chúng với các mô-đun được quản lý triển khai IHttpModule. Đặt các thuộc tính này có thể gây ra sự cố yêu cầu không đồng bộ. Phiên bản chính xác là sử dụng sự kiện 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óa Phiên bản X-AspNet, trong web.config tìm / tạo <system.web> và thêm:

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

    ...

Để xóa Phiên bản X-AspNetMvc, truy cập Global.asax, tìm / tạo Application_Start sự kiện và thêm một dòng như sau:

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

Để xóa X-Powered-By, trong web.config tìm / tạo <system.webServer> và thêm:

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

    ...

132
2017-10-09 16:01



câu trả lời tuyệt vời - cảm ơn - dunnry
Khi được sử dụng trên IIS, Azure không biết rằng nhóm ứng dụng phải ở chế độ Tích hợp. Và .IsLocal nên được loại bỏ khi gỡ lỗi cục bộ. - IvanH
Không cần "điều kiện Yoda" trong C # - nó không cho phép chuyển nhượng trong một điều kiện, en.wikipedia.org/wiki/Yoda_Conditions - tvanfosson
Cảm ơn câu trả lời chi tiết, tuy nhiên tôi đã thử và theo dõi các bước nhưng mỗi khi tôi quét trang web bằng cách sử dụng asafweb, nó vẫn đề cập đến một vấn đề về tiêu đề quá mức (X-AspNet-Version). Tôi thậm chí còn sử dụng URLRewrite để xóa tiêu đề này. Họ có khả năng loại bỏ nó không? - Raymond A
Vẫn có sự cố khi yêu cầu tệp không tồn tại, ví dụ: "yoursite / foo.jpg "; Vì yêu cầu này không được xử lý bởi MVC, tiêu đề phản hồi "Máy chủ: IIS x.y" sẽ vẫn ở đó. Một giải pháp hoạt động cho Azure Web Sites (và dường như CHỈ dành cho các trang web xanh) là thêm vào dưới <system.webServer>: <security xdt: Transform = "Insert"> <requestFiltering removeServerHeader = "true" /> </ security > - adrian h.


Đã xuất bản MSDN bài viết này về cách ẩn tiêu đề trên trang web Azure. Bây giờ bạn có thể ẩn máy chủ từ web.config bằng cách thêm mục nhập vào system.webServer

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

VS sẽ cau mày ở trên là không hợp lệ. Liên kết trên có mã như bức ảnh, khó tìm. Phiên bản MVC vẫn bị ẩn trong ứng dụng bắt đầu như trên, tương tự cho phiên bản x-powered-by và .Net.


10
2018-01-11 16:39



Đây là chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn. - Martin Costello
Điều này có thể làm việc cho Azure, nhưng không hoạt động ở bất kỳ nơi nào khác. Các ý kiến ​​trên bài viết đó đã mô tả điều này, cũng như thử nghiệm của riêng tôi. Câu trả lời của @ giveme5minutes là cách hoạt động. - CrazyPyro
Sẽ được tốt đẹp để biết những gì đã được thực hiện để thực hiện chức năng này: | Đặc biệt là vì URL SCAN trước đây đã triển khai thực hiện điều này ngoài hộp. - felickz


Ngoài ra còn có một gói trên NuGet giúp bạn đạt được điều này thông qua một vài dòng cấu hình và không có thay đổi về mã: NWebsec. Bạn có thể tìm thấy tài liệu về xóa tiêu đề phiên bản tại đây: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

Nó được giới thiệu ở đây: http://www.nwebsec.com/HttpHeaders/VersionHeaders (bằng Azure)

Disclaimer: Tôi là nhà phát triển trong dự án.


6
2017-10-09 19:29



"NWebsec giúp bạn loại bỏ gần như tất cả các tiêu đề phiên bản này, tức là tất cả trừ tiêu đề Máy chủ: Microsoft-IIS / 8.0". :( github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers - felickz
Nó chuyển từ codeplex sang GitHub (vui lòng cập nhật liên kết github.com/NWebsec/NWebsec/wiki ) - Nordes


Đưa ra các câu trả lời trước đó từ @ giveme5minutes và @AKhooli khi chúng liên quan đến Azure Websites cộng với một vài mục khác mà trình quét muốn xem, đây là những thay đổi mà tôi đã thực hiện để làm cho ASafaWeb hài lòng với một trang web Azure.

Nó vẫn than phiền về cookie tiêu đề mối quan hệ Azure không chỉ https nhưng ái lực là loại cookie bạn muốn phát lại, đúng không?

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

3
2018-01-24 04:07





Câu trả lời của Nick Evans là hoàn hảo, nhưng ...

Nếu bạn xóa các tiêu đề này cho Bảo vệ mục đích, đừng quên thay đổi ASP.NET Session coockie name ! Bởi vì nó dễ dàng hơn để đoán ngôn ngữ được sử dụng hoặc phiên bản máy chủ khi bạn thấy điều này:

enter image description here

Để thay đổi tên cookie: (sáng tạo)

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

2
2017-07-11 22:06