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

时间:2015-05-30 23:18:18

标签: java jsp tomcat

我有Tomcat的CSRFPrevention过滤器在我的Tomcat 6.0.xx上正常运行。我现在想将一个页面列入白名单(即,使其免于应用于它的过滤器)。在我<filter-mapping>的{​​{1}}下,我有很多网址格式,其中一种是:

web.xml

此URL模式包含约50个JSP页面。但是,我想将这50页中的一页列入白名单。我宁愿不必将其他49个页面中的所有页面添加到<url-pattern>/secure/*</url-pattern>。反正只有一页白名单吗?

2 个答案:

答案 0 :(得分:1)

尝试init-param param entryPoints跳过网址,此处为home。将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>

答案 1 :(得分:1)

  

属性: entryPoints

     

描述:以逗号分隔的URL列表 将不会被测试   是否存在有效的随机数 。它们被用来提供一种方法   导航后导航回受保护的应用程序   从中。入口点将仅限于HTTP GET请求, 应该   不会触发任何安全敏感操作

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

在您的特定问题案例中,您只排除了1个项目

<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>

了解详情:This link将有助于解决问题。