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?
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àyvà blog 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>
...
Đã 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.
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.
Đư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>
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:

Để thay đổi tên cookie: (sáng tạo)
<system.web>
<sessionState cookieName="PHPSESSID" />
</system.web>