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