我在我的应用程序中禁用了laravel CSRF Token安全性,这样做的原因是我使用的是javascript前端框架而不是blade(angularjs),我有一个使用与我的web app相同路由的移动应用程序所以启用它会导致我得到令牌不匹配"错误或" inavlid token"。
我的问题是,我已经使我的客户端代码完全独立于我的服务器端代码,我该如何实现此功能?
另外,如果API使用与Web应用程序相同的路径,我将如何使其在我的移动应用程序上运行。
答案 0 :(得分:1)
据我所知,语句"我已经使我的客户端代码完全独立于我的服务器端代码",你的意思是,你的后端与angularJS应用程序位于不同的主机/端口上。
这会让人烦恼,因为CORS: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
CSRF如何运作:
您的应用程序在步骤2中失败,因为只有当协议,主机和端口与前端应用程序匹配时,浏览器才会保存cookie。
如果要实现自定义CSRF令牌,则必须制作$http
拦截器服务,该服务将处理向请求添加CSRF并在请求后更新当前CSRF。
Doc:https://docs.angularjs.org/api/ng/service/ $ http(部分拦截器)
要测试我是否正确,您可以使用已禁用的网络安全性运行浏览器。然后将保存CSRF令牌。
铬/铬:
cd
到chrome文件夹chrome --disable-web-security
一切都取决于应用中的HTTP客户端。 CSRF实际上是cookie,它们必须在与GET不同的每个请求中发送,并在这些请求之后更新。请确保您的图书馆正在保存CSRF Cookie,并且您的网络应用会发送CSRF Cookie(不是标题)。