如何使用Tomcat的CSRFPrevention过滤器将JSP页面列入白名单?



Tomcat的CSRFPrevention过滤器在Tomcat 6.0.xx上运行良好。现在我想将单个页面列入白名单(也就是说,使其免于应用于的过滤器)。在web.xml中的<filter-mapping>下,我有许多URL模式,其中之一是:

<url-pattern>/secure/*</url-pattern>

这个URL模式包含大约50个JSP页面。不过,我想把这50页中的一页列入白名单。我不希望把其他49页都添加到web.xml中。有办法把一页纸列入白名单吗?

尝试init-param参数entryPoints跳过url,这里是home。对多个url使用csv:

  <filter>
    <filter-name>CsrfFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
    <init-param>
      <param-name>entryPoints</param-name>
      <param-value>/home</param-value>
    </init-param>
  </filter>

属性: entryPoints

描述:一个逗号分隔的url列表,其中将不被测试查找是否存在有效的nonce。它们是用来提供一种方法导航离开后导航回受保护的应用程序从它。入口点将被限制为HTTP GET请求和应该.

(来源:https://tomcat.apache.org/tomcat-8.0-doc/config/filter.html#CSRF_Prevention_Filter)


在您的特定问题案例中,您只能排除一个条目
<filter>
    <filter-name>CSRFPreventionFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
    <init-param>
        <param-name>entryPoints</param-name>
        <param-value>/secure/foo.jsp</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CSRFPreventionFilter</filter-name>
    <url-pattern>/secure/*</url-pattern>
</filter-mapping>


为了通用性,我有一个例子,排除2个JSP页面和1个CSS文件,在顶级web应用程序目录设置过滤器

<!-- CSRF Prevention Filter -->
<filter>
    <filter-name>CSRFPreventionFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
    <init-param>
        <param-name>entryPoints</param-name>
        <param-value>/web/pages/foo.jsp,/web/pages/bar.jsp,/web/en_US/css/style.css</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CSRFPreventionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

阅读更多:这个链接将帮助解决方案清晰。

最新更新