文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.3.2 漏洞防范
防御 CSRF 漏洞的最主要问题是解决可信的问题,即使是管理员权限提交到服务器的数据,也不一定是完全可信的,所以针对 CSRF 的防御有以下两点:1)增加 token/referer 验证避免 img 标签请求的水坑攻击,2)增加验证码。
4.3.2.1 Token 验证
Token 翻译中文为“标志”,在计算机认证领域叫令牌。利用验证 Token 的方式是目前使用的最多的一种,也是效果最好的一种,可以简单理解成在页面或者 cookie 里面加一个不可预测的字符串,服务器在接收操作请求的时候只要验证下这个字符串是不是上次访问留下的即可判断是不是可信请求,因为如果没有访问上一个页面,是无法得到这个 Token 的,除非结合 XSS 漏洞或者有其他手段能获得通信数据。
图 4-9 (引用自乌云网)
Token 实现测试代码如下:
<?php session_start (); function set_token () { $_SESSION['token'] = md5 ( time () +rand ( 1 , 1000 )); } function check_token () { if ( isset ( $_POST['token'] ) &&$_POST['token'] === $_SESSION['token'] ) { return true ; } else{ return false ; } } if ( isset ( $_SESSION['token'] ) &&check_token ()) { echo "success" ; } else{ echo "failed" ; } set_token ();? > <form method="post"> <input type="hidden" name="token" value="<?=$_SESSION['token']?>"> <input type="submit"/> </form>
运行结果,如果请求里面的 Token 值跟服务器端的一致,则输出“success”,否则输出“failed”。
4.3.2.2 验证码验证
验证码验证没有 Token 那么实用,考虑到用户体验,不可能让用户每个页面都去输入一次验证码,这估计用户得疯掉,所以一般这种方式只用在敏感操作的页面,比如像登录页面,实现方式跟 Token 差不多,这里就不再详细给出代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论