我有一个关于 csrf 缓解的问题。文献建议在每个页面上使用一个令牌,该令牌必须与任何表格一起提交 - 该令牌必须对交易发生有效。
页面上的令牌如何防止 csrf?我不能只发出一个 http GET 请求,从 html 解析令牌,然后在 POST 中使用该令牌(在某个时间限制内),因为 http 是无状态的?
是的你可以。但这不是 CSRF。CSRF 是我偷偷地让你执行一个你不打算执行的操作。例如,如果你登录到一个特定的网站,我诱骗你点击这样的链接怎么办:
您单击该链接,令人沮丧的是,您最终删除了一个您不想删除的资源。或者,如果我让您查看这样的图像怎么办(查看 src):
<img src="http://test.com/action.php?delete_id=324" />
但是,如果 action.php 需要一个令牌怎么办?然后我(攻击者)将不得不尝试找出您当前使用的令牌。
http://test.com/action.php?delete_id=324&token=89723gdeHDdhipd823igb9bd87309287bhdebvtaGY
否则,该操作将不会发生并且请求将被拒绝(或至少应该被拒绝)。
CSRF 保护并非旨在防止 DOM 解析或机器人获取令牌并提交表单。CSRF 是指恶意站点向目标站点提交表单或请求,目的是更改某些设置或对登录的用户帐户执行操作。
当表单提交时,目标站点的用户 cookie 会随请求一起发送,因此如果没有反 CSRF 令牌,恶意站点可能会影响用户的帐户或在目标站点上执行某些操作。恶意站点无法获取用户的特定反 CSRF 令牌,因此尝试将失败。