我有Tomcat的CSRFPrevention过滤器在我的Tomcat 6.0.xx上正常运行。我现在想将一个页面列入白名单(即,使其免于应用于它的过滤器)。在我<filter-mapping>
的{{1}}下,我有很多网址格式,其中一种是:
web.xml
此URL模式包含约50个JSP页面。但是,我想将这50页中的一页列入白名单。我宁愿不必将其他49个页面中的所有页面添加到<url-pattern>/secure/*</url-pattern>
。反正只有一页白名单吗?
答案 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将有助于解决问题。