【发布时间】:2018-02-08 19:00:11
【问题描述】:
目前我正在尝试构建一个以 slim 作为后端和 angularJS 作为前端的网站。因此,我查看了几个教程和演示项目。这是最有趣的一个:https://github.com/alexdebril/slim-angular
开箱即用我对 CSRF 实施有疑问。在这个项目中,CSRF 保护是在中间件中实现的,以便应用于每个连接。好与不好无关紧要。
但是当我使用 composer 和 npm 安装所有依赖项时,项目运行不佳,因为每个服务器连接都会获得一个新的 CSRF 令牌,该令牌将存储在 PHP 会话中。
所以在这个项目的主页上,有一个 Angular 表单,它将用 csrf 令牌保护的字符串发送到服务器。然后服务器只回复相同的字符串,角度控制器将其打印出来。当我第一次触发表单提交时,一切都会好起来的,但是在第二次提交时,服务器将响应错误 400,因为他有一个 angular 还没有的新 csrf 令牌。
但是这个示例项目的创建者不可能犯这样的错误,不是吗?为什么我的 apache 为与同一用户的每个连接创建一个新的 csrf 令牌?我该如何解决这个问题?
我的依赖:
超薄\超薄 v3.8.1
苗条\csrf v0.7.0
angular v1.6.4 (route, aria, material, ui-bootstrap, cookie, http-auth-interceptor)
那么我怎样才能为每个用户只拥有一个 CSRF 令牌呢?
或者我如何必须以角度更新标记器服务才能始终使用最新的 CSRF 令牌?还是我需要一个观察者?检测到这个?
【问题讨论】:
-
slim-angular 的文档解释了如何标记每个请求。见slim-angular Tokenizer Example。