我在
/login
端点上调用服务器,它返回一个会话 cookie 以及返回值中的 CSRF 令牌(无法将其存储为 cookie,因为它不安全)。我可以在客户端的哪里存储 CSRF 值,以便我可以在对服务器的调用中使用它?如果它只是在 JS 内存中,即使我的会话仍然有效,我一离开页面就会丢失它,并且存储为 cookie 是不安全的。或者是否无法存储,每次关闭页面时都必须点击端点才能获取?
将其存储在 Localstorage 中,因为没有其他前端域可以访问您的 csrfToken,因为它与您的前端域关联存储。
例如,hacker.com 无法从 your-domain.com
上设置的 localStorage 访问 csrfToken但我仍然想知道黑客是否可以欺骗子域名为 your-domain.com.
<body>
<form class="form" action="bankApi/bank-transfer" method="POST">
<input type="text" name="account" value="456" />
<input type="text" name="amount" value="1000000" />
<input type="submit" value="Click me!" />
</form>
<script>
const form = document.querySelector(".form");
// Extracting csrfToken from localStorage for this hacker.com domain is NOT possible.
form.submit();
</script>