我正在将 CSRF 预防机制添加到我的应用程序中。我浏览了很多帖子,但我的方法仍然存在不确定性。我打算同时使用同步令牌实现,我想用它来防止重复提交、返回按钮和刷新。所以我需要一个新的令牌来处理每个请求。目前在我的应用程序中,有常规的表单提交、url GET 和 AJAX 请求。实际上有一些新窗口弹出窗口,但我正在尝试消除/重写这些功能。这是我打算做的事情以及一些不确定性。
以下是一些初步假设:
- 在正常情况下,不会有两个函数同时从一个用户向服务器发送请求
- 阻止了所有 XSS
- 无法使用 JavaScript 访问 cookie
- 使用 HTTPS
我的流程和疑问:
- 令牌将生成并存储在会话中,然后与生成的 HTML 或 JSON 数据一起传递。通过标头传输的值是否与将其插入 HTML 或 JSON 一样安全?
- 每个请求都将携带此令牌以与会话中存储的值进行匹配。通过标头传递这个值会有什么问题吗?
- 为了最大限度地减少程序员的工作,我想提供统一的 JavaScript 函数来提交表单并进行 AJAX 调用,这样我就可以透明地在请求中添加令牌。因此,我计划将令牌放在一个 JavaScript 变量中,所有 JavaScript 程序都可以访问该变量。这样做有风险吗?
我的方法是否存在“独立”问题?
谢谢