首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ESAPI ClickjackFilter必须在SiteMesh过滤器之后出现?

为什么ESAPI ClickjackFilter必须在SiteMesh过滤器之后出现?
EN

Stack Overflow用户
提问于 2015-06-05 00:57:01
回答 2查看 1.7K关注 0票数 0

我们有一个使用OpenSymphony SiteMesh来组装页面的应用程序,我们已经添加了OWASP来将X帧选项头添加到响应中。

但是,只有当ClickjackFilter映射在web.xml中的SiteMeshFilter映射之后才能工作。如果首先使用点击筛选器,则不添加X帧选项头。

这样做是可行的:

代码语言:javascript
复制
<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>

这不管用:

代码语言:javascript
复制
<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>

为什么这两个过滤器的顺序很重要?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-06 21:37:02

在我看来,我认为这是因为ESAPI ClickjackFilter's doFilter()方法写得不正确。它的实现方式如下:

代码语言:javascript
复制
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的东西包装响应。我认为应该这样写:

代码语言:javascript
复制
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错误报告。

票数 0
EN

Stack Overflow用户

发布于 2015-09-02 02:39:43

看起来已经有一个针对此的bug (使用了一个假定的修复,BTW,我还没有测试或以其他方式确认)。错误ID是289。详细信息:https://github.com/ESAPI/esapi-java-legacy/issues/289

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30656658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档