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

时间:2018-08-03 14:54:45

标签: security csrf csrf-protection

我们可以实施CSRF的令牌预防,例如,通过浏览器中的隐藏字段,该字段是通过页面上的javascript Web服务/ REST请求发送的,并在服务器上针对Cookie中的令牌进行检查的。

使用一些标准的服务器代码,javascript等,可以在我们的内部和外部Web应用程序中轻松完成此操作。

这似乎很好用,因为页面上的令牌正在验证请求的来源。

一切都很好。

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

这些客户端不执行javascript,因此不会受到CSRF的攻击。<​​/ p>

但是,缺少某种形式的IP白名单-在企业环境中这可能会带来很大问题-CSRD令牌会破坏非浏览器客户端。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您不必启用JS即可拥有CSRF漏洞。如果您有

之类的URL
http://example.com/site?logout=1

将您注销,该URL可以由用户在正常活动范围之外播放。 JS只是促成因素之一。

这就是说,您的CSRF令牌应该放入标准的HTTP标头中,并且这些标头不会破坏任何内容(除非您的客户端非常特殊,并且依赖确切的标头才能工作)

答案 1 :(得分:0)

好的-我们通过发布/检查无法操作的标头来解决此问题。 https://fetch.spec.whatwg.org/#forbidden-header-name 所以-检查其中之一的存在性,或添加您自己的标头(例如Sec-g)。然后,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
}