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