添加安全性 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>

参考:Adding Custom Headers Globally