所以,我被告知我已经开始处理的应用程序在发布请求时已经采取了跨站点伪造请求(CSFR)的预防措施,但不是针对获取请求。
我也被告知我可以获得原点的来源和原点的目标,比较每个的主机,并根据它们是否匹配。截至目前,我在进行一些研究之后目前有以下内容,但我还没有,可以使用一些额外的帮助。我对这个职业很陌生,所以我甚至不确定自己是否走在正确的轨道上。
String refererHost = ((HttpServletRequest) request).getHeader("referer");
String targetHost = request.getServerName();
try {
refererHost = new URI(refererHost).getHost();
if(!refererHost.equals(targetHost))
{
((HttpServletResponse) response).sendRedirect( ((HttpServletRequest)request).getContextPath()+ADMIN_LOGOFF_URL);
}
} catch (MalformedURIException | NullPointerException e) {
request.getRequestDispatcher(ADMIN_LOGOFF_URL).forward(request, response);
}
答案 0 :(得分:1)
OWASP有建议。您发布的代码(假设是过滤器)是其中一项建议,因此您可以走上正确的道路。还建议使用令牌 - 希望您可以重复使用已经完成的POST操作而无需过多的重新分解。
另外,检查您的框架(如果有)是否为CSRF提供支持,这样您就不必编写自己的代码。
答案 1 :(得分:0)
首先,有一个命名问题:它的名字是CSRF。 在这里我引用一个参考站点:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
跨站点请求伪造(CSRF)是一种迫使最终用户的攻击 在他们所在的Web应用程序上执行不需要的操作 目前已通过验证。 CSRF攻击专门针对目标 由于攻击者没有,因此状态改变请求,而不是数据被盗 查看对伪造请求的响应的方法。
状态更改请求是可以更改目标站点状态的请求。如果应用程序写得很好,那么GET方法只有在改变其状态时才应该调用POST,应该调用DELETE或UPDATE(所以你必须保护POST方法,但不仅如此)。
让我们举一个例子来澄清。我们假设您已登录到您的银行帐户。如果您受到攻击,PC上的应用程序可能会调用POST来执行电汇,方法与点击合法应用程序中的按钮相同。
这种攻击保护自己的合理方法是什么? 我知道其中两个。
第一个是在调用危险的页面之前创建一个随机令牌(将其视为GET方法获取的页面,以显示要求收件人的屏幕)。该随机令牌必须保存在用户的会话中,并且还作为隐藏字段出现在页面中。在服务器端执行POST方法时,必须将来自隐藏字段的随机令牌与存储在用户会话中的随机令牌进行比较。如果他们不匹配,则必须拒绝交易。
第二个包括要求确认,可能是通过验证码给用户。
有关更详细的信息,我建议您从本网站开始: enter link description here 对于每个开发人员而言,这是一个非常好的起点,因为安全性是每个应用程序都应具备的质量。