CSRF令牌安全

时间:2015-06-03 08:03:16

标签: javascript angularjs laravel-5

我在我的应用程序中禁用了laravel CSRF Token安全性,这样做的原因是我使用的是javascript前端框架而不是blade(angularjs),我有一个使用与我的web app相同路由的移动应用程序所以启用它会导致我得到令牌不匹配"错误或" inavlid token"。

我的问题是,我已经使我的客户端代码完全独立于我的服务器端代码,我该如何实现此功能?

另外,如果API使用与Web应用程序相同的路径,我将如何使其在我的移动应用程序上运行。

1 个答案:

答案 0 :(得分:1)

网页部分

据我所知,语句"我已经使我的客户端代码完全独立于我的服务器端代码",你的意思是,你的后端与angularJS应用程序位于不同的主机/端口上。

这会让人烦恼,因为CORS: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

CSRF如何运作:

  1. 后端应用:使用CSRF令牌向浏览器发送cookie
  2. 浏览器:从后端应用程序保存令牌
  3. 浏览器:使用下一个POST / PUT / DELETE请求发送令牌
  4. 您的应用程序在步骤2中失败,因为只有当协议,主机和端口与前端应用程序匹配时,浏览器才会保存cookie。

    如果要实现自定义CSRF令牌,则必须制作$http拦截器服务,该服务将处理向请求添加CSRF并在请求后更新当前CSRF。

    Doc:https://docs.angularjs.org/api/ng/service/ $ http(部分拦截器)

    要测试我是否正确,您可以使用已禁用的网络安全性运行浏览器。然后将保存CSRF令牌。

    铬/铬:

    1. 转到终端
    2. cd到chrome文件夹
    3. 运行chrome --disable-web-security
    4. 移动应用

      一切都取决于应用中的HTTP客户端。 CSRF实际上是cookie,它们必须在与GET不同的每个请求中发送,并在这些请求之后更新。请确保您的图书馆正在保存CSRF Coo​​kie,并且您的网络应用会发送CSRF Coo​​kie(不是标题)。