【问题标题】:Add custom response header to web.config将自定义响应标头添加到 web.config
【发布时间】:2016-04-04 18:32:19
【问题描述】:

我的网站容易受到点击劫持漏洞的影响。做一些研究,看起来一种简单的方法是简单地将X-Frame-Options: SAMEORIGIN 添加到响应头中。这是一个非常古老的 Web 应用程序(大约上次更新是 2004 年),并且运行 IIS 6 和 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就够了吗?

【问题讨论】:

    标签: asp.net web-config iis-6 asp.net-2.0


    【解决方案1】:

    我不相信您可以仅通过更新 web.config 来完成此操作,因为您的目标是 II6(因为在 IIS7+ 中添加了对 &lt;customHeaders&gt; 部分的支持)。

    您可能需要做的是创建一个自定义的 HttpModule,类似于this blog post 中提到的方法,它可以处理实际添加的可能看起来像这样的 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>
    

    【讨论】:

    • 是否有任何理由使用自定义模块而不是我将其添加到 Global.asax 文件的第二种方法?我喜欢自定义模块的想法,只是好奇是否有理由使用一个而不是另一个。
    • 其实我没有注意到sn-p的代码。是的,这也应该足够了,尽管您可能希望尽可能以Application_PreSendRequestHeaders 事件为目标,因为这可能是添加标头的更好时机。
    猜你喜欢
    • 2018-10-04
    • 2019-06-10
    • 2018-02-26
    • 2017-07-04
    • 1970-01-01
    • 2021-12-28
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多