添加自定义响应 header 到 web.config

Add custom response header to web.config

我的网站容易受到点击劫持漏洞的影响。做一些研究,看起来简单的方法之一是简单地将 X-Frame-Options: SAMEORIGIN 添加到响应 header。这是一个非常古老的 Web 应用程序(大约上次更新是 2004 年),并且是 运行 IIS 6 with ASP.NET 2.0.

在较新的版本中,我可以简单地将以下部分添加到 web.config

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="X-Frame-Options" value="SAMEORIGIN" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

到此为止。但是,我似乎无法验证这是否可以使用 IIS 6。

IIS 6 和 ASP.NET 2.0 是否可以只在 web.config 文件中完成?如果是这样,如何?如果不是,我必须进行哪些代码更改才能获得相同的结果?只需添加

Context.Response.AddHeader("X-Frame-Options", "SAMEORIGIN");

Global.asax#Application_EndRequest够了吗?

我认为您无法仅通过更新 web.config 来完成此操作,因为您的目标是 II6(因为 IIS7+ 中添加了对 <customHeaders> 部分的支持)。

您可能需要做的是创建一个类似于 this blog post 中提到的方法的自定义 HttpModule,该方法将处理实际添加的 Header,它可能看起来像这样:

public class SameOriginHeaderModule : IHttpModule
{
     private HttpApplication _application;

     public void Init(HttpApplication context)
     {
         _application = context;
         context.PreSendRequestHeaders += OnPreSendRequestHeaders;
     }

     void context_EndRequest(object sender, EventArgs e)
     {
         // If your request exists, add the header
         if (_application.Context != null)
         {
              var response = _application.Response;
              response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
         }
     }

     public void Dispose()
     {

     }
 }

然后您需要在 web.config 文件中注册此模块,如下所示:

<configuration>
    <system.web>
        <httpModules>
            <add name="SameOriginHeaderModule" type="SameOriginHeaderModule" />
        </httpModules>
    </system.web>
</configuration>