0

OpenSymphony SiteMesh を使用してページを組み立てるアプリケーションがあり、応答に X-FRAME-OPTIONS ヘッダーを追加するために OWASP ESAPI ClickjackFilter を追加しました。

ただし、web.xml で ClickjackFilter マッピングが SiteMeshFilter マッピングの後にある場合にのみ機能します。クリックジャッキング フィルターが最初に来る場合、X-FRAME-OPTIONS ヘッダーは追加されません。

これは機能します:

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/web/*</url-pattern>
</filter-mapping>

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

これは機能しません:

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

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/web/*</url-pattern>
</filter-mapping>

これら 2 つのフィルターの順序が重要なのはなぜですか?

4

2 に答える 2

0

これに対してすでにバグが報告されているようです (ところで、私はテストも確認もしていません)。バグ ID は 289 です。詳細: https://github.com/ESAPI/esapi-java-legacy/issues/289

于 2015-09-02T02:39:43.160 に答える
0

私の意見では、ESAPIClickjackFilter's doFilter()メソッドが正しく記述されていないためだと思います。次のように実装されます。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
        HttpServletResponse res = (HttpServletResponse)response;
        chain.doFilter(request, response);
        res.addHeader("X-FRAME-OPTIONS", mode );
        }

ただし、これは出力フィルターであるため、最初に のようなものを使用して応答をラップする必要がありますHttpServletResponseWrapper。次のように書くべきだと思います。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
        HttpServletResponse res =
            new javax.servlet.http.HttpServletResponseWrapper(
                                            (HttpServletResponse)response );
        chain.doFilter(request, res);
        res.addHeader("X-FRAME-OPTIONS", mode );
        }

そういう風に書かれていれば、適用する順番に関係なく動くはずだと思います。

注意: 私はこれをまったく検証していないことに注意してください (実際、コンパイルしようとさえしていません!) が、おそらくこれが間違っていると思います。理論的には、SiteMesh フィルターも奇妙なことをしている可能性がありますが、その可能性は低いと思います。誰かがこれが間違っていることを確認した場合は、私に知らせてください。ESAPI バグ レポートを提出します。

于 2015-06-06T21:37:02.573 に答える