Mỗi trang trong một ứng dụng MVC tôi đang làm việc với các tiêu đề HTTP này để trả lời:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Làm thế nào để tôi ngăn chặn những điều này hiển thị?
Mỗi trang trong một ứng dụng MVC tôi đang làm việc với các tiêu đề HTTP này để trả lời:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Làm thế nào để tôi ngăn chặn những điều này hiển thị?
Câu trả lời:
X-Powered-By
là một tiêu đề tùy chỉnh trong IIS. Kể từ IIS 7, bạn có thể xóa nó bằng cách thêm vào phần sau web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Tiêu đề này cũng có thể được sửa đổi theo nhu cầu của bạn, để biết thêm thông tin, hãy tham khảo http://www.iis.net/ConfigReference/system.webServer/httpProtatio/customHeaders
Thêm phần này để web.config
thoát khỏi X-AspNet-Version
tiêu đề:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Cuối cùng, để xóa X-AspNetMvc-Version
, chỉnh sửa Global.asax.cs
và thêm phần sau vào Application_Start
sự kiện:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Bạn cũng có thể sửa đổi các tiêu đề trong thời gian chạy thông qua Application_PreSendRequestHeaders
sự kiện trong Global.asax.cs
. Điều này hữu ích nếu giá trị tiêu đề của bạn là động:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
tiêu đề. Xem câu trả lời khác về làm thế nào để đạt được điều này trong web.config
.
Bạn cũng có thể xóa chúng bằng cách thêm mã vào tệp global.asax của mình:
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>
Tôi đã tìm thấy cấu hình này trong web.config
đó dành cho một người New Web Site...
được tạo trong Visual Studio (trái ngược với a New Project...
). Vì câu hỏi nêu một ứng dụng ASP.NET MVC, không liên quan, nhưng vẫn là một tùy chọn.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Cập nhật : Ngoài ra, Troy Hunt có một bài viết có tiêu đề Shhh Do not đừng để tiêu đề phản hồi của bạn nói quá to với các bước chi tiết về cách loại bỏ các tiêu đề này cũng như liên kết đến công cụ ASafaWeb của anh ấy để quét chúng và các cấu hình bảo mật khác.
code
<security> <requestFiltering> <verbs> <add verb = "TÙY CHỌN" được phép = "sai" /> </ động từ> </ requestFiltering> </ security>code
Như được mô tả trong Che giấu ứng dụng web ASP.NET MVC của bạn trên IIS 7 , bạn có thể tắt tiêu đề X-AspNet-Version bằng cách áp dụng phần cấu hình sau cho web.config:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
và xóa tiêu đề X-AspNetMvc-Version bằng cách thay đổi Global.asax.cs của bạn như sau:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Như được mô tả trong Tiêu đề tùy chỉnh Bạn có thể xóa tiêu đề "X-Powered-By" bằng cách áp dụng phần cấu hình sau cho web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
Không có cách nào dễ dàng để loại bỏ tiêu đề phản hồi "Máy chủ" thông qua cấu hình, nhưng bạn có thể thực hiện HttpModule
để xóa Tiêu đề HTTP cụ thể như được mô tả trong Che giấu ứng dụng web ASP.NET MVC của bạn trên IIS 7 và trong cách gỡ bỏ máy chủ- x-aspnet-version-x-aspnetmvc-version-and-x-Powered-by-from-the-answer-header-in-iis7 .
Lõi .NET
Để xóa tiêu đề Máy chủ , trong tệp Program.cs , hãy thêm tùy chọn sau:
.UseKestrel(opt => opt.AddServerHeader = false)
Đối với lõi mạng chấm 1, hãy thêm tùy chọn bên trong lệnh gọi .UseKestrel (). Đối với lõi net dot 2, hãy thêm dòng sau UseStartup ().
Để xóa tiêu đề X-Powered-By , nếu được triển khai vào IIS, hãy chỉnh sửa web.config của bạn và thêm phần sau vào bên trong thẻ system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Để xóa tiêu đề Máy chủ , trong tệp global.asax của bạn, hãy thêm vào như sau:
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);
}
}
}
});
}
}
Trước .NET 4.5.2
Thêm lớp c # sau vào dự án của bạn:
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");
}
}
và sau đó trong web.config, hãy thêm phần <mô-đun> sau:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
Tuy nhiên tôi gặp vấn đề khi các dự án phụ không thể tìm thấy mô-đun này. Không vui.
Để xóa thẻ '' X-AspNetMvc-Version '', đối với mọi phiên bản .NET, hãy sửa đổi tệp '' web.config '' của bạn để bao gồm:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Cảm ơn Microsoft đã làm cho điều này khó khăn không thể tin được. Hoặc có thể đó là ý định của bạn để bạn có thể theo dõi các bản cài đặt IIS và MVC trên toàn thế giới ...
RemoveServerHeaderModule
nó sẽ không hoạt động trong dự án WebApi.
Như được hiển thị trên Xóa tiêu đề máy chủ tiêu chuẩn trên trang Windows Azure Web Site , bạn có thể xóa các tiêu đề bằng cách sau:
<?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>
Điều này loại bỏ tiêu đề Máy chủ và các tiêu đề X-.
Điều này đã làm việc tại địa phương trong các thử nghiệm của tôi trong Visual Studio 2015.
Trong Asp.Net Core, bạn có thể chỉnh sửa các tệp web.config như vậy:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Bạn có thể xóa tiêu đề máy chủ trong các tùy chọn Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Kiểm tra blog này Đừng sử dụng mã để loại bỏ các tiêu đề. Nó không ổn định theo Microsoft
Tôi đảm nhận việc này:
<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>
Để hoàn thiện, có một cách khác để loại bỏ Server
tiêu đề, sử dụng regedit.
Tạo một mục DWORD có tên là DisableServerHeader trong khóa Sổ đăng ký sau và đặt giá trị thành 1.
HKLM \ HỆ THỐNG \ CurrentControlset \ Services \ HTTP \ Tham số
Tôi muốn tìm một giải pháp thích hợp bằng Web.config, nhưng sử dụng <rewrite>
không tốt vì nó yêu cầu mô-đun viết lại phải được cài đặt, và thậm chí sau đó nó sẽ không thực sự xóa tiêu đề, chỉ làm trống nó.
Bạn có thể thay đổi bất kỳ tiêu đề hoặc bất cứ điều gì trong Application_EndRequest()
thử này
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
Tiêu đề X-Powered-By được IIS thêm vào phản hồi HTTP, do đó bạn có thể xóa tiêu đề ngay cả ở cấp máy chủ thông qua Trình quản lý IIS:
Bạn có thể sử dụng web.config trực tiếp:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>