CSRF,怎么做饭?

时间:2012-01-03 23:38:47

标签: kohana token csrf protection

我想知道,CSRF保护的重点是什么?我的意思是,生成令牌并将带有令牌的隐藏字段放入表单中,然后在POST完成后,控制两个令牌。我正在测试我的网页以及我做的所有事情 - 我刚刚复制了整个生成的表单(html源代码)并更改了表单操作属性。不是网络机器人做类似的事情或我只是不明白的东西?如何实现高效的CSRF保护?

P.S我正在使用Kohana(Security :: token和Security :: check)

谢谢!

2 个答案:

答案 0 :(得分:2)

来自Wikipedia

  

攻击通过在访问的页面中包含链接或脚本来工作   用户已知(或应该)已经访问过的站点   认证。例如,一个用户Bob可能正在浏览聊天   其他用户Fred发布消息的论坛。假设   Fred已经精心设计了一个引用动作的HTML图像元素   Bob的银行网站(而不是图像文件),例如

<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=Fred">
  

如果Bob的银行将他的身份验证信息保存在cookie中,如果   cookie没有过期,然后Bob的浏览器尝试加载   因此,图像将提交带有他的cookie的提款表格   在没有Bob批准的情况下授权交易。

通过在表单中​​生成并包含随机令牌,您可以通过检查发布的令牌是否与生成的令牌匹配(通常存储在用户会话中)来避免此类攻击。
Kohana docs清楚地说明应该如何做到这一点:

  

您可以将此令牌作为隐藏字段插入到表单中:

echo Form::hidden('csrf', Security::token());
  

然后在使用验证时检查它:

$array->rules('csrf', array(
    'not_empty'       => NULL,
    'Security::check' => NULL,
));

答案 1 :(得分:1)

已经有一些内置帮助程序用于生成安全令牌并在表单上使用它。可以生成令牌,将其插入隐藏字段,然后使用Validator验证安全助手类。

请参阅文档:http://kohanaframework.org/3.0/guide/api/Security#token