我正在尝试为JavaWeb应用程序添加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的设置:
我做错了什么?
更新: 我仍然无法解决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">
我做错了什么?