我们对一个项目进行了安全扫描。很少检测到csrf问题。建议在页面中应用csrf\u nonce值。
应用程序有以下页面:/dashboard、/groups、/activities、/tasks、/data
图像放在/images下css文件放在/styles下javascripts放在/js下
注:
此应用中没有登录名。服务器检测会话是否有效和活动。然后请求被转发到其他资源,比如jsp页面。请注意,存在请求转发,而不是请求重定向。要访问登录页面,必须点击/dashboard。
/ Jmeter 板和所有其他内部页面都有对图像、js文件和css文件等资产的引用。
为了在webapp中启用nonce,我们实现了以下更改: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>/dashboard</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CSRFPreventionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
从浏览器访问/dashboard时显示的login.jsp:下面一行确保每当任何窗体执行post请求时,隐藏的输入字段都会将nonce提交回服务器。在本例中,它是登录表单。
<INPUT type="hidden" name="CSRF_NONCE" value="<%=response.encodeURL("HandleLoginSubmit")%>">
对于csrfpreventionfilter,我们也有必要对url进行编码。所以表单提交给一个动作,这个动作现在用服务器生成的nonce编码。
<form method="post" name="loginform" action="<%=response.encodeURL("HandleLoginSubmit")%>">
当用户访问/groups页面时,显示group\u display.jsp。表单提交给使用服务器生成的nonce编码的操作。它还有一个输入隐藏字段,负责将noce发回服务器。
<form method="post" action="<%=response.encodeURL("BW_Neighborhoods")%>">
<input type="hidden" name="CSRF_NONCE" value="<%=response.encodeURL("BW_Neighborhoods")%>">
作为/dashboard页面的入口点,我在查看login.jsp页面时没有任何问题。如果我尝试为其他两个页面复制相同的修复,我会得到403禁止的错误。activity\u display.jsp、group\u display.jsp和login.jsp等页面中的可用图像不会显示。我还尝试将图像路径放在入口点。
我想知道是什么导致了这里的问题。我似乎把事情做对了。我还尝试将nonce缓存大小增加到10,但没有成功。期待着一些严重的帮助,因为这个问题是与我等待已久。
暂无答案!
目前还没有任何答案,快来回答吧!