添加安全性 headers 以帮助防止 c# asp.net 中的注入攻击
Add security headers to help protection from injection attacks in c# asp.net
我有一个 C# asp.net application.It 已发送到安全评估,以下是风险。
-Missing "Content-Security-Policy" header
-Missing "X-Content-Type-Options" header
-Missing "X-XSS-Protection" header
-It was observed that server banner is getting disclosed in HTTP response.
-It was observed that service version is getting disclosed in HTTP response.
我在 web.cofig 文件中有以下代码
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By"/>
<add name="X-Frame-Options" value="DENY"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<add name="X-Content-Type-Options" value="nosniff "/>
</customHeaders>
</httpProtocol>
我以为这会添加 headers。但安全团队表示这个问题还没有解决。 this.And 对于 Banner 披露是否有替代方案,我无权访问服务器。我可以在应用程序中解决这个问题吗?
经过研究我发现这个:在 Global.asax 里面我有这个代码:
protected void Application_PreSendRequestHeaders()
{
// Response.Headers.Remove("Server");
Response.Headers.Set("Server", "My httpd server");
Response.Headers.Remove("X-AspNet-Version");
Response.Headers.Remove("X-AspNetMvc-Version");
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
var app = sender as HttpApplication;
if (app != null && app.Context != null)
{
app.Context.Response.Headers.Remove("Server");
}
}
这是正确的解决方法吗?请帮助
在 Application_BeginRequest
期间添加和删除 headers 总是会导致服务器抱怨在设置 headers 后无法执行操作,这总是令人头疼。
通常“X-AspNet-Version”和“X-AspNetMvc-Version”是 IIS 自定义 header,删除它们取决于您使用的 IIS 版本。
对于新版本的 IIS,您可以在 Web.Config 中进行设置:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
在旧版本中,您需要使用 IIS 管理器(参见 https://www.google.com/search?q=iis+remove++X-AspNet-Version&ie=utf-8&oe=utf-8):
您可以在 Global.asax
中删除 app_start 中的 MVC header
MvcHandler.DisableMvcResponseHeader = true;
您的 web.config 应该可以正常工作:
<add name="X-Frame-Options" value="DENY"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<add name="X-Content-Type-Options" value="nosniff "/>
如果没有,Application_PreSendRequestHeaders 是添加或删除 header 的合适位置。
HttpContext.Current.Response.Headers.Add("X-Frame-Options", "DENY");
HttpContext.Current.Response.Headers.Add("X-XSS-Protection", "1; mode=block");
HttpContext.Current.Response.Headers.Add("X-Content-Type-Options", "nosniff");
HttpContext.Current.Response.Headers.Remove("Server");
您可以在网络浏览器上使用网络开发人员控制台(通常通过点击 F12
打开)并单击网络选项卡以查看 header 服务器发送的内容。
确保在 system.webServer
中添加 httpProtocol,如下所示:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
<add name="X-Xss-Protection" value="1; mode=block" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
要删除 "server" header,请在您的 Global.asax 文件中添加以下代码
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
}
您可以使用 web.config 全局添加任何 header,例如
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Cache-Control" value="no-store" />
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="Strict-Transport-Security" value="max-age=31536000" />
</customHeaders>
</httpProtocol>
</system.webServer>
我有一个 C# asp.net application.It 已发送到安全评估,以下是风险。
-Missing "Content-Security-Policy" header
-Missing "X-Content-Type-Options" header
-Missing "X-XSS-Protection" header
-It was observed that server banner is getting disclosed in HTTP response.
-It was observed that service version is getting disclosed in HTTP response.
我在 web.cofig 文件中有以下代码
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By"/>
<add name="X-Frame-Options" value="DENY"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<add name="X-Content-Type-Options" value="nosniff "/>
</customHeaders>
</httpProtocol>
我以为这会添加 headers。但安全团队表示这个问题还没有解决。 this.And 对于 Banner 披露是否有替代方案,我无权访问服务器。我可以在应用程序中解决这个问题吗? 经过研究我发现这个:在 Global.asax 里面我有这个代码:
protected void Application_PreSendRequestHeaders()
{
// Response.Headers.Remove("Server");
Response.Headers.Set("Server", "My httpd server");
Response.Headers.Remove("X-AspNet-Version");
Response.Headers.Remove("X-AspNetMvc-Version");
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
var app = sender as HttpApplication;
if (app != null && app.Context != null)
{
app.Context.Response.Headers.Remove("Server");
}
}
这是正确的解决方法吗?请帮助
在 Application_BeginRequest
期间添加和删除 headers 总是会导致服务器抱怨在设置 headers 后无法执行操作,这总是令人头疼。
通常“X-AspNet-Version”和“X-AspNetMvc-Version”是 IIS 自定义 header,删除它们取决于您使用的 IIS 版本。
对于新版本的 IIS,您可以在 Web.Config 中进行设置:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
在旧版本中,您需要使用 IIS 管理器(参见 https://www.google.com/search?q=iis+remove++X-AspNet-Version&ie=utf-8&oe=utf-8):
您可以在 Global.asax
中删除 app_start 中的 MVC headerMvcHandler.DisableMvcResponseHeader = true;
您的 web.config 应该可以正常工作:
<add name="X-Frame-Options" value="DENY"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<add name="X-Content-Type-Options" value="nosniff "/>
如果没有,Application_PreSendRequestHeaders 是添加或删除 header 的合适位置。
HttpContext.Current.Response.Headers.Add("X-Frame-Options", "DENY");
HttpContext.Current.Response.Headers.Add("X-XSS-Protection", "1; mode=block");
HttpContext.Current.Response.Headers.Add("X-Content-Type-Options", "nosniff");
HttpContext.Current.Response.Headers.Remove("Server");
您可以在网络浏览器上使用网络开发人员控制台(通常通过点击 F12
打开)并单击网络选项卡以查看 header 服务器发送的内容。
确保在 system.webServer
中添加 httpProtocol,如下所示:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
<add name="X-Xss-Protection" value="1; mode=block" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
要删除 "server" header,请在您的 Global.asax 文件中添加以下代码
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
}
您可以使用 web.config 全局添加任何 header,例如
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Cache-Control" value="no-store" />
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="Strict-Transport-Security" value="max-age=31536000" />
</customHeaders>
</httpProtocol>
</system.webServer>