因此我们的应用程序是:
- 每个用户都必须登录
- 登录页面回发到服务器,如果授权用户返回 SPA 应用程序。
- SPA 应用完全是 AJAX
- HTTPS
通常我们会发送一个sessionid
cookie 和一个csrftoken
cookie。 token cookie 值将作为 x-header 包含在任何 AJAX 帖子中,并且在每次请求时在服务器上验证所有内容。
由于 SPA 页面是在将其返回到浏览器之前构建的,因此我们可以在其中嵌入任何我们喜欢的内容。我们希望最终用户能够登录多个选项卡,一个不影响其他。
我们更愿意做什么:
- 像以前一样将 sessionid 作为 cookie 发送,但 cookie 名称是随机的。
- 没有 csrftoken,而是将随机 cookie 名称嵌入到将 x-header 添加到 AJAX post 请求的 javascript 例程中。
- 服务器将从 x-header 中获取 sessionid。
这让我们有机会允许多次登录,每次登录都有一个唯一的 sessionid
cookie 名称,但每个发布请求都有一个标准化的 x-header 名称。
这会像 sessionid cookie、csrftoken cookie/x-header 方法一样安全吗?
最佳答案
是的,添加一个攻击者无法从有效用户 session 复制的 header 是一种方法。
例如X-Requested-With
可以添加到每个 AJAX 请求(JQuery 默认执行此操作),您只需在服务器端收到请求时检查此 header 是否存在。如果服务器未通过 CORS 选择加入,则无法跨域发送此 header 。
您可以将其与 token 结合使用 - see my answer here。
例如
X-Requested-With: XMLHttpRequest;0123456789ABCDEF
关于javascript - 这是防止跨站点请求伪造 (CSRF) 攻击的安全方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30040804/