【发布时间】:2014-07-24 19:35:47
【问题描述】:
我正在尝试向 Java Web 应用程序添加 CSRF 保护。我用 CSRF 过滤器和过滤器映射到 servlet 配置了 web.xml。 但是,我不确定下一部分该怎么做。文档说返回给客户端的所有 URL 都是通过调用 HttpServletResponse#encodeRedirectURL(String) 或 HttpServletResponse#encodeURL(String) 进行编码的 他们还说您可以尝试: 或者可以将 nonce 作为请求参数传回,名称为 org.apache.catalina.filters.CSRF_NONCE,即常量 org.apache.catalina.filters.Constants.CSRF_NONCE_REQUEST_PARAM 的值。
更新 我仍然被禁止使用 403。有人有什么建议吗? 这是 web.xml 设置:
<filter>
<filter-name>CSRF</filter-name>
<filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
<init-param>
<param-name>entryPoints</param-name>
<param-value>/html,/html/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CSRF</filter-name>
<servlet-name>exampleservlet</servlet-name>
</filter-mapping>
这是JSP页面代码
<FORM METHOD="POST" ACTION="<%=response.encodeURL("/exampleservlet")%>">
<INPUT TYPE="HIDDEN" NAME="org.apache.catalina.filters.CSRF_NONCE" VALUE="<%=session.getAttribute("org.apache.catalina.filters.CSRF_NONCE")%>">
<INPUT TYPE="HIDDEN" NAME="id" VALUE="0">
我做错了什么?
【问题讨论】:
-
我们也有同样的问题。有人得到解决方案吗?
标签: tomcat tomcat7 csrf csrf-protection