浏览器和非浏览器客户端的CSRF令牌



我们可以为CSRF fine实现令牌预防,例如,通过在浏览器中隐藏一个字段,该字段在javascript web服务/REST请求中从页面发送,并在服务器上根据cookie中的令牌进行检查。

使用一些标准的服务器代码、javascript等,通过我们的内部和外部web应用程序,这可以相当轻松地完成。

由于页面上的令牌正在验证请求的来源,因此这似乎可以很好地工作并且有意义。

一切都很好。

问题是,我们还使用来自非broswer客户端的相同REST/SOAP端点,即企业网络中的其他服务。

这些客户端不易受到CSRF的攻击,因为它们不执行javascript。

然而,由于缺乏某种形式的IP白名单(在企业环境中可能会有很大问题(,CSRD令牌会破坏非浏览器客户端。

有什么想法吗?

您不需要启用JS就可以拥有CSRF漏洞。如果您有这样的URL

http://example.com/site?logout=1

该URL可以由用户在正常活动范围之外播放。JS只是其中一个促成因素。

也就是说,你的CSRF令牌应该进入标准的HTTP头,这些不太可能破坏任何东西(除非你的客户端非常特殊,并且依赖于确切的头来工作(

OK-我们通过发出/检查无法操作的头来解决这个问题。https://fetch.spec.whatwg.org/#forbidden-标头名称因此,要么检查其中一个的存在,要么从Sec开始添加您自己的标题,例如Sec IsBrowser,然后执行以下逻辑

IF(ForbiddenHeader is present and not null and not empty string/or check for a few)
{
OWASP at this point recommends if the ORIGIN is present then check its OK  -
OR if the Referer is present check if OK (OK meaning an expected value e.g. www.mysite)
Reject - if either of these tests fail
(OWASP says if you cant find either of these headers - choose to reject or proceed)
Then Check your CORS token
}
ELSE
{
Hopefully the caller was not a browser so were OK as nothing is there to automatically post our authentication token
}

最新更新