我们可以通过 ajax 请求劫持 CSRF 令牌吗

can we hijack CSRF token by ajax request

我的问题是关于 csrf 令牌,这些令牌的目标以及我们能否伪造它..

问题识别

让我们假设我们有 bank.com 有这个 url 来对帐户进行交易 bank.com/ make -transactions?amount=100USD&to=[accountId] link 只有经过身份验证的用户(取决于 cookie 中的 SessionID)才能从 bank.com 站点

中具有交易表单的页面访问

当 malicious.com 放置一个带有隐藏字段的伪造表单,将其数据提交给上述 url 时,问题就来了。导致本次提交发送cookies中的SessionID(与bank.com相关),交易完成

CSRF 解决方案

此解决方案依赖于生成令牌(CSRF 令牌),该令牌随 bank.com 进行交易的页面(在隐藏字段中)发送并保存在当前用户会话中

并且在用户从交易页面提交数据后,将根据用户会话中的 CSRF 令牌值检查此令牌(将与数据一起提交),如果它们相等则交易有效,如果这并不意味着有问题,交易应该被拒绝

这样就可以防止 malicious.com 通过提交虚假请求进行交易。因为它无法获取此 CSRF 令牌并将其与请求一起注入。

我的问题

1- 如果 malicious.com 从用户浏览器向 bank.com 发出 ajax 请求(该请求将发送 bank.com 相关的 cookie,我说得对吗? ),它将从响应中提取 CSRF 令牌。并以伪造的形式注入该令牌。这会用这个被劫持的令牌伪造 bank.com 吗?

2- 我可以在单页应用程序中从 ajax 端点生成 CSRF 令牌吗(假设在执行操作之前。向服务器请求 CSRF 令牌并通过操作提交此令牌)或不(如果我可以知道我应该知道的) ?

感谢您抽出宝贵时间向我致以最诚挚的问候

what if the malicious.com makes ajax request from the user browser to bank.com

... 然后浏览器的 Same Origin Policy 将阻止恶意站点读取页面内容(除非您明确允许它使用 CORS ... 不要那样做)。

can I generate CSRF token from ajax endpoint in single page application (let say befor take the action