我正在阅读 CSRF 并且遇到了同步器令牌。我不明白为什么你不能做一个 CSRF 来获取令牌来做一个真正的 CSRF。
示例:在以下bank.com
位置有这样的表格https://bank.com/transfer
:
<form action="https://bank.com/do_transfer" method="post">
<input type="hidden" name="synchroniser_token" value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" >
<input type="hidden" name="to" value="ciro">
<input type="hidden" name="amount" value="100">
<button type="submit">Send 100$ to Ciro.</button>
</form>
此代码改编自https://stackoverflow.com/a/26895980/1512962
什么会阻止在客户端使用 JavaScript 进行malicioussite.com
GET https://bank.com/transfer
(使用已存储在 cookie 中的会话 ID)并为authenticity_token
? 然后,他们可以使用该 ID 来做一个真正的CSRF,本质上是一个 CSRF 来做另一个 CSRF。
它需要 JavaScript 来执行,所以它比简单的 0px X 0px 图像更难,但它不仅仅是可行的。