2016-09-13 162 views
0

我在Symfony REST项目中执行CSRF时遇到问题。我正在使用AngularJS,一个AuthToken cookie是使用NG $cookie服务存储的,并且在发送给服务器的每个请求中都有一个X-Auth-Token header,这个问题我真的需要实现一个CSRF保护吗? 其他问题,如果答案是肯定的,我怎样才能做到这一点Symfony?因为它在服务器会话中存储令牌,而不是RESTful,例如实现DjangoCSRF系统的最佳方法是什么(我猜他们将CSRF令牌存储在cookie中,然后将其与输入令牌的表单进行比较? 对不起我的英文不好,谢谢!Rest API中的CSRF保护

+1

CSRF令牌用于确保粗略的脚本或页面无法在会话打开时向您的站点发送请求,因此您使用CSRF令牌来证明自己是谁。如果您在应用程序中存储了令牌,然后在每个请求中发送该令牌,则无需使用CSRF,因为您正在证明自己身份验证令牌的身份。 – qooplmao

回答

1

基本上你需要CSRF保护,当攻击者(从他自己的应用程序)可以使用户的你无意中颁发给应用程序,改变服务器状态的有效的请求。

总之这通常意味着非GET请求(除非GET更改了他们不应该的东西),因为cookie会基于cookie进行认证,因为即使请求了req uest是从另一个网站制作的。

如果头中有访问令牌(用于身份验证),则需要将其添加到Angular应用程序中的请求中,并且攻击者无法这样做,因此您不需要CSRF保护。

如果基于令牌的身份验证将令牌作为cookie发送,则需要CSRF保护。在这方面,这基本上与简单Cookie认证相同。

0

我认为你的案例最简单的就是使用这个专门用于处理你的用例的包https://github.com/dunglas/DunglasAngularCsrfBundle

基本上它是如何工作的:

  • 服务器应用程序伪造XSRF-TOKEN,将其存储在会话,并把它作为一个cookie的角度应用
  • 的角度应用程序读取cookie并设置X-XSRF-TOKEN对未来请求
  • 服务器的X XSRF- TOKEN在每个请求(使用请求收听)与存储在会话中的令牌的值进行比较

如果令牌d不匹配,请求失败。