使用随机头HTTP(S)请求安全(HTTP(S) request security using ra

2019-09-26 13:21发布

据我所知, CSRF是HTTP(S)的应用程序的一大安全隐患。

从外观上来看,大多数的框架发送CSRF令牌作为请求主体的一部分。 然而,在我的情况是有几个原因有些不雅; 最重要的是我不想与可能发送传输层混乱POST请求在许多不同的格式,不一定都是JSONx-www-form-urlencoded

作为一个解决方案,我想一个更侵入替代的; 具体地讲,我生成随机头:随机标题名称(公共前缀),含有随机CSRF令牌。

是否有任何安全(或其他种类)的风险是什么?

Answer 1:

你可以只设置X-Requested-With头,然后检查此服务器端。 许多框架,如jQuery,自动添加这AJAX请求。

X-Requested-With为指示该请求经由AJAX由事实上的标准。

因为它是不可能的这头被发送跨域没有服务器通过CORS选择加入你并不需要一个随机令牌。

因此,设置和检查非标准头是为了防止CSRF的一种有效方式。

在OWASP CSRF预防小抄并没有提到它,但是它确实提到检查Origin头。 然而, 这种逻辑并不简单因为许多浏览器不发送Origin于同一产地的请求。

另外这仅适用于AJAX请求。 与正常的表单POST,不可能添加额外的头。 此外,在过去曾有与像Flash插件,允许任何头被设置使攻击者能够使用Flash做跨域请求的错误。 然而,像这样的问题早已被修补。

如果你想有一个令牌,以及在深度防御策略的一部分,您能适应X-Requested-With包括随机令牌,然后检查。 例如X-Requested-With: XMLHttpRequest;0123456789ABCDEF

然后令牌可以简单地只是为了CSRF预防目的而创建cookie的值(当然,一个密码安全算法和熵源产生)。



Answer 2:

是否有任何安全(或其他种类)的风险是什么?

没有:只要你可以从客户端传递,并检查服务器上 - 你没事

另外,我应该多久刷新CSRF令牌? 我需要每个网站的访问和一天一个新的为每一个请求,或每隔几个请求,或一次,还是......?

一般来说,你不应该刷新它。 如果它使用强加密随机数生成器生成的 - 你可以有每个会话之一。 什么重要的是,这是不可能的猜测,所以它不应该由任何已知的数据导出。



文章来源: HTTP(S) request security using random headers