【问题标题】:How to add "X-Frame-Options" header in .htaccess file to protect against 'ClickJacking' attacks如何在 .htaccess 文件中添加“X-Frame-Options”标头以防止“ClickJacking”攻击
【发布时间】:2017-07-11 08:59:42
【问题描述】:

我有一个 Coldfusion Web 应用程序。为了保护我的站点免受跨帧脚本攻击,我计划在我的“.htaccess 文件”中添加一个值为“SAMEORIGIN”的 HTTP 响应标头“X-Frame-Options”。这是我指的文章:

https://geekflare.com/secure-apache-from-clickjacking-with-x-frame-options/, https://www.garron.me/en/bits/apache-htaccess-add-cache-control-header-file-type.html

下面的代码不起作用。

<FilesMatch "\.(cfm)$"> 
<ifModule mod_headers.c> Header append X-FRAME-OPTIONS 'SAMEORIGIN'</ifModule> 
</FilesMatch>

我是新手,有人可以帮助如何正确地做到这一点。

提前致谢。

【问题讨论】:

    标签: apache .htaccess security coldfusion http-headers


    【解决方案1】:

    从您的示例看来,您已经结合了您引用的两篇文章中的内容。

    Geekflare.com article 给出了这个 Apache 的例子:

    Header always append X-Frame-Options SAMEORIGIN
    

    Garron.me article 给出了这个 Apache 的例子:

    <filesMatch ".(html|htm)$">
    Header set Cache-Control "max-age=14400, must-revalidate"
    </filesMatch>
    

    在我看来,ColdFusion 页面上的 X-Frame-Options 标头会转化为这个:

    <filesMatch ".(cfml|cfm)$">
    Header always append X-FRAME-OPTIONS SAMEORIGIN
    </filesMatch>
    

    请注意,正则表达式中没有前导斜杠 \,就像您的代码中一样,SAMEORIGIN 周围不需要引号,并且您省略了 always 关键字。您还有一个额外的&lt;ifModule mod_headers.c&gt; 支票,我认为您不需要。我会将 ColdFusion 和 HTML 扩展结合到&lt;filesMatch ".(cfml|cfm|html|htm)$"&gt; 这样的条件中,以便为这些页面请求发送标头。

    我只是从您引用的文章中了解到这一点,但您已使用 ColdFusion 标记了您的问题,因此有多种选择。事实上,后来的 ColdFusion 版本(我相信它是在版本 10 中引入的)提供了一些开箱即用的保护。您可以对其进行自定义以满足您的需求。请参阅本文的“ClickJacking”部分 - Security improvements in ColdFusion 10

    来自该文档:

    ColdFusion 管理员使用 X-Frame-Options 防止点击劫持。您还可以进一步扩展此选项以保护您的应用程序,如下所示:

    1. 打开位于&lt;Server-doc-root&gt;/WEB-INF的Web.xml文件。

    2. 使用已指定的两个过滤器之一为您的应用程序添加 URL 过滤器映射:CFClickJackFilterSameOriginCFClickJackFilterDeny

    现在假设您有一个应用程序testClick,您想通过拒绝应用程序的框架来防止点击劫持。为此,请在 web.xml 文件中添加以下内容。

    &lt;filter-mapping&gt;
    &lt;filter-name&gt;CFClickJackFilterDeny&lt;/filter-name&gt;
    &lt;url-pattern&gt;/testClick/*&lt;/url-pattern&gt;
    &lt;/filter-mapping&gt;

    从我的一台服务器查看web.xml 文件包括以下内容(注意他们如何为 ColdFusion 管理员添加保护):

    <!-- CF ClickJacking deny protection Filter  -->
    <filter>
        <filter-name>CFClickJackFilterDeny</filter-name>
        <filter-class>coldfusion.bootstrap.BootstrapFilter</filter-class>
        <init-param>
            <param-name>filter.class</param-name>
            <param-value>coldfusion.filter.ClickjackingProtectionFilter</param-value>
        </init-param>
        <init-param>
            <param-name>mode</param-name>
            <param-value>DENY</param-value>
        </init-param>
    </filter>
    
    <!-- CF ClickJacking same origiin protection Filter  -->
    <filter>
        <filter-name>CFClickJackFilterSameOrigin</filter-name>
        <filter-class>coldfusion.bootstrap.BootstrapFilter</filter-class>
        <init-param>
            <param-name>filter.class</param-name>
            <param-value>coldfusion.filter.ClickjackingProtectionFilter</param-value>
        </init-param>
        <init-param>
            <param-name>mode</param-name>
            <param-value>SAMEORIGIN</param-value>
        </init-param>
    </filter>
    
    <!-- CF ClickJacking Filter mapppings starts. For ColdFusion Administrator we are allowing
    sameorigiin frames. Use Deny or some other mode of this filter as appropriate for the 
    application and add required url pattern
    -->
    <filter-mapping>
        <filter-name>CFClickJackFilterSameOrigin</filter-name>
        <url-pattern>/CFIDE/administrator/*</url-pattern>
    </filter-mapping>
    <!-- End CF ClickJacking Filter mappings -->
    

    因此,为了保护您的整个 ColdFusion 站点,您可以为站点的根目录添加一个 filter-mapping /*

    <filter-mapping>
        <filter-name>CFClickJackFilterSameOrigin</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    您甚至可以使用 &lt;cfheader&gt; 标记来包含响应标头(但您必须在所有页面或 Application.cfc 等中执行此操作)

    <cfheader name="X-FRAME-OPTIONS" value="SAMEORIGIN" />
    

    【讨论】:

      【解决方案2】:

      我已通过在 .htaccess 文件中将 Header set X-Frame-Options DENY 添加到 IfModule mod_headers.c 之外并在 Apache 的 mod_headers.so 文件中启用 Header 模块来解决此问题。

      【讨论】:

        猜你喜欢
        • 2012-07-07
        • 1970-01-01
        • 2017-02-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-04
        • 2013-11-16
        • 2017-12-10
        • 1970-01-01
        相关资源
        最近更新 更多