从ajax响应中获取新的csrf哈希标记是否安全?

时间:2017-07-08 14:07:04

标签: php security zend-framework csrf csrf-protection

我使用zend 1框架,我有多次使用ajax的表单,我用csrf保护它,但是在第一次请求csrf令牌到期后我需要新的一个。从服务器端传递新的csrf令牌并在前端使用它来进行新的ajax调用是否安全?

2 个答案:

答案 0 :(得分:1)

拥有滚动的CSRF令牌总是一个糟糕的设计,因为如果用户打开了多个窗口,则会出现争用条件,其中CSRF令牌当前有效。

实施任何安全系统时,请尝试使用现有库或记录良好的技术。不要从臀部开枪,阅读CSRF prevention Cheat sheet

旋转CSRF令牌不会提高安全性,因为相同的旁路技术将始终获得当前的CSRF令牌。所有CSRF缓解都依赖于Same-Origin Policy - 如果您的应用程序具有SOP绕过 - 例如弱crossdomain.xml文件或不安全的CORS规则集或XSS - 那么攻击者可以使用此漏洞来读取任何HTTP响应。对于任何给定的Web应用程序,某些HTTP响应必须具有CSRF令牌,并且可以使用SOP绕过来读取此令牌并在浏览器和Web应用程序之间进行交互。

使用什么类型的CSRF缓解并不重要 - XSS总是可以用来强制浏览器执行用户可以执行的任何操作。如果一个易受反射XSS漏洞的请求也需要一个CSRF令牌,那么它将很难或无法利用。出于这个原因,CSRF& XSS有一种石头剪刀的关系。

答案 1 :(得分:-1)

如果您遇到防伪令牌行为问题,您是否考虑过使用SameSite cookies标志?

长话短说。当您发送跨域请求时(例如,站点A向站点B发送请求),您的浏览器将非常友好地检查您是否有该站点的cookie,因此您可能容易受到XSRF攻击。我们使用防伪令牌在发送请求的有效实体和服务器之间创建共享密钥。但正如您所看到的,实施可能存在一些问题。

另一方面,同站点cookie标记允许您配置通过跨源请求发送cookie的方式。有两种模式,严格模式和宽松模式。

在严格模式下,您的Cookie永远不会通过跨源请求发送。这似乎是一个很好的方法,但你还需要考虑不会通过GET请求发送cookie,所以如果有人被重定向到你的网站,他将需要再次登录,因为cookie没有被发送到请求。

松散模式几乎相同,但它允许您的cookie通过安全的HTTP动词(GET,HEAD,OPTIONS和TRACE)发送,因此您可以防止POST / PUT CSRF攻击,但是你'用户通过GET请求浏览时仍然会有一个很好的行为。

编辑:即使在SameSite Cookie标志听起来像是一个非常好的选项时也只是添加它,它只是由Chrome和Opera实现的,所以如果您的用户群是使用各种各样的人不同的浏览器和不同的版本,它可能不是您的应用程序的最佳选择。