强化报告中的跨站请求伪造问题

时间:2014-06-25 12:08:34

标签: java

我将在以下jsp中获得CSRF。

<html:form action="CenterNotificationAction?method=acknowledgeNotification">
<logic:iterate id="user_Request_ID" name="addedSer" property="userRequestID">
<INPUT TYPE="hidden" name="userRequestID" value="<bean:write name="user_Request_ID"/>">
</logic:iterate>
<logic:present name="addedSer" property="requestNotificationID">
<INPUT TYPE="hidden" name="requestNotificationID" value="<bean:write name="addedSer" property="requestNotificationID"/>">
</logic:present>    

<tr>
<td><img src="/images/spacer.gif" width="1" height="1" alt="" border="0"></td>
<td CLASS="PSEDITBOX_DISPONLY"></td>
<td align="right"><html:submit property="Acknowledge" value="Acknowledge" styleClass="PSPUSHBUTTON" style="width:120px;"/></td>
</tr>
</html:form>

任何人都可以建议我如何解决这个问题吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

问题是您需要确保攻击者无法伪造http请求。我不具备所有上下文,因此我不确定此请求的作用,似乎它捕获了用户的协议,这可能是防止伪造的关键。

解决此问题的典型方法: 1.在将表单发送到浏览器时,将包含加密强值的隐藏字段一次使用一次(加密nonce)。在服务器端的会话中记录该nonce 2.提交表单时将收到的nonce与发送到浏览器的nonce进行比较。如果两者不匹配,则拒绝该请求。如果两者相符,你就可以了。

OWASP有一个antiCSRF JSP标记库,可用于此目的。自从我使用它已经有一段时间了但是在我需要的时候效果很好。

https://www.owasp.org/index.php/CSRFGuard_3_Token_Injection#JSP_Tag_Library

不,我与OWASP项目没有任何关联。我也是在没有非JSP项目的OWASP标记的情况下手动完成的。如果你愿意,我可以指导你如何在没有OWASP标签的情况下做到这一点。

祝你好运!