Jsp 在Tomcat中设置CsrfPreventionFilter
我正在尝试在Tomcat 8中设置内置的CsrfPreventionFilter 我想我已经阅读了StackOverflow中关于这个主题的所有问题和答案,但我仍然无法解决我的问题 我有Jsp 在Tomcat中设置CsrfPreventionFilter,jsp,tomcat,csrf-protection,Jsp,Tomcat,Csrf Protection,我正在尝试在Tomcat 8中设置内置的CsrfPreventionFilter 我想我已经阅读了StackOverflow中关于这个主题的所有问题和答案,但我仍然无法解决我的问题 我有home.jsp和reports.jsp home.jsp(一旦它接受了response.encodeUrl())的URL是 www.example.com/home.jsp?org.apache.catalina.filters.CSRF_NONCE=5E4BD8FEE1B4CC1DA79D8749050159
home.jsp
和reports.jsp
home.jsp
(一旦它接受了response.encodeUrl()
)的URL是
www.example.com/home.jsp?org.apache.catalina.filters.CSRF_NONCE=5E4BD8FEE1B4CC1DA79D874905015911
这是正确呈现的,不是因为nonce正在工作,而是因为我将home.jsp
设置为入口点。然而,它似乎证明了CSRFPreventionFilter已经启动并运行,并且成功地生成了nonce
如果我按CTRL+N,然后输入www.example.com/reports.jsp
,然后添加相同的nonce,即www.example.com/reports.jsp?org.apache.catalina.filters.CSRF_nonce=5E4BD8FEE1B4CC1DA79D874905015911
,那么我将得到第403页reports.jsp
未设置为入口点,但我希望它能够成功呈现,因为它提供了nonce
我做错了什么
(我的问题有点类似于;但我觉得答案可能不是CSRFPrevention过滤器的设置方式,而是我在内部处理响应/请求的方式中的一些问题,类似于@Pankaj Kumar在中的回答)
更新
下面是web.xml配置
<filter>
<filter-name>CSRFPreventionFilter</filter-name>
<filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
<init-param>
<param-name>entryPoints</param-name>
<param-value>/images/404.JPG,/login.jsp,/home.jsp,/images/im_login.gif,/js/events.js,/js/menu.js,/js/amount_validation.js,/js/calendar.js,/js/toolbar.js,/js/tablesort.js,/js/scripts.js,/css/style.css</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CSRFPreventionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
防止过滤器
org.apache.catalina.filters.CsrfPreventionFilter
入口点
/images/404.JPG、/login.jsp、/home.jsp、/images/im\u login.gif、/js/events.js、/js/menu.js、/js/amount\u validation.js、/js/calendar.js、/js/toolbar.js、/js/tablesort.js、/js/scripts/scripts/css/style.css
防止过滤器
/*
您需要从入口点
中删除js、css和图像路径,并为CsrfPreventionFilter
设置过滤器映射,使其不包含这些路径
原因是在tomcat中,默认情况下,nonecache的大小为5。在您的情况下,当js、css被请求时,tomcat会生成一个新的nonce(因为它们位于入口点中)并将其添加到缓存中,在5个这样的请求之后,您的初始nonce(为home.jsp生成)将从nonecache中清除,不再有效。因此,当您使用该时间发送合法请求时,会得到一个
403
。对于CsrfPreventionFilter
,什么是过滤器映射
?我用web.xml配置更新了我的问题home.jsp上有多少链接-更具体地说是调用response.encodeUrl()
。