跨站点请求伪造(CSRF)缓解

时间:2013-07-18 07:13:15

标签: php csrf

我对csrf缓解有疑问。文献建议在每个页面上使用一个令牌,该令牌必须与任何表格一起提交 - 此令牌必须对交易有效。

如何在页面上设置令牌以保护csrf? 我不能只发出一个http GET请求,从html中解析令牌,然后在POST(在一定时间限制内)使用该令牌,因为http是无状态的吗?

2 个答案:

答案 0 :(得分:4)

是的,你可以。但这不是CSRF。 CSRF是我偷偷让你执行你不打算执行的行动的时候。例如,如果您登录到某个特定网站并且我欺骗您点击这样的链接该怎么办:

  

http://test.com/action.php?delete_id=324

您单击该链接并感到沮丧,您最终删除了您不想删除的资源。或者如果我让你看到这样的图像(看看src):

<img src="http://test.com/action.php?delete_id=324" />

但是,如果action.php需要令牌呢?然后我(攻击者)必须尝试找出你当前使用的令牌。

  

http://test.com/action.php?delete_id=324&token=89723gdeHDdhipd823igb9bd87309287bhdebvtaGY

否则,行动将不会发生,请求将被拒绝(或至少应该被拒绝)。

答案 1 :(得分:1)

CSRF保护的目的不是阻止DOM解析或机器人获取令牌并提交表单。 CSRF是指恶意网站向目标网站提交表单或请求,目的是更改某些设置或对登录用户的帐户执行操作。

当提交表单时,用户的目标站点的cookie随请求一起发送,因此没有反CSRF令牌,恶意站点可能会影响用户的帐户或在目标站点上执行某些操作。恶意站点无法获取用户的特定反CSRF令牌,因此尝试将失败。