javascript - 这是防止跨站点请求伪造 (CSRF) 攻击的安全方法吗?

标签 javascript ajax cookies csrf

因此我们的应用程序是:

  • 每个用户都必须登录
  • 登录页面回发到服务器,如果授权用户返回 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/

相关文章:

javascript - 如何使用 JQuery 和 formData 正确获取表单数据

javascript - 无状态JSON Web token 中存储的内容

javascript - java-script cookie输入字段字符串显示错误

http - 当在 303 重定向上设置 cookie 时,浏览器不发送 cookie

javascript - 使用 jQuery 验证器确定输入的值不是数字

php - Ajax图片上传表单返回forbidden 403错误

javascript - 是否有机会从 RxJs 'next' 中省略 'subscribe' 部分

php - 414 请求 URI 太大 - 此浏览器相关吗?

javascript - Paypal 中的 RESOURCE_NOT_FOUND

javascript - 尝试发送 USDC 时无法获取钱包签名者 @solana-labs/web3.js