x-frame-options Cross Frame Scripting(Clickjacking)

客戶的資安檢查報告裡發現開發的網站沒有加入 x-frame-options 的設定值。

X-Frame-Options

共有三種值:

DENY
表示文件無論如何都不能被嵌入到 frame 中,即使是自家網站也不行。
SAMEORIGIN
唯有當符合同源政策下,才能被嵌入到 frame 中。
ALLOW-FROM uri
唯有列表許可的 URI 才能嵌入到 frame 中。

如果我們是使用 Tomcat 7.0.63 之後的版本可以直接修改 web.xml

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>SAMEORIGIN</param-value>
    </init-param>
</filter>

For filter-mapping part I have added.

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

如果是比較古老的舊版本,可以這樣子修改:

In Tomcat you need to use filters for that:

First, implement your own Filter. Something like this:

public class XFrameHeaderFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException {
        ((HttpServletResponse) resp).setHeader("x-frame-options", "allow");
        chain.doFilter(req, resp);
    }
}

Second, make this filter a part of your web.xml:

<filter>
  <filter-name>x-frame-header</filter-name>
  <filter-class>XFrameHeaderFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>x-frame-header</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Apache 解法:

Step 1:

於Apache資料夾下,找檔名為http.conf的檔案

Step 2:

打開httpd.conf後,搜尋#LoadModule headers_module modules/mod_headers.so,並將#去掉

Step 3:

於httpd.con文件中新增下列內容

#set up response header
<IfModule mod_headers.c>
Header set X-Frame-Options "SAMEORIGIN"
Header set Content-Security-Policy "default-src 'self'"
</IfModule>

X-Frame-Options “SAMEORIGIN” -> 唯有當符合同源政策下,才能被嵌入到 frame 中。
Content-Security-Policy “default-src ‘self'” -> 只允許本站資源(CSP主要是在減少跨站腳本攻擊)

新增完成後,記得要重開Apache server設定才會套用上去


設定 nginx

請加入以下指令到 http, server 或 location 組態設定檔:

add_header X-Frame-Options SAMEORIGIN;

設定 IIS

請加入以下指令到網站的 Web.config 檔:

<system.webServer>
  ...

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

  ...
</system.webServer>

設定 HAProxy

請加入以下指令到 frontend, listen, 或 backend 組態設定檔:

rspadd X-Frame-Options:\ SAMEORIGIN

Note:  設定 Meta tag 是無效的,像是 <meta http-equiv=”X-Frame-Options” content=”deny”> 便沒有任何效果,只有透過設定 HTTP header 才有效果,請勿採用。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *