干货分享,灵感创作,不定期更新,敬请期待。

thinkphp等框架开发中容易忽略的xss攻击

原创 xhq 9173℃ 0评论

虽然说现在的web开发框架都是挺成熟的框架,在性能、安全等方面都有比较好的表现,但问题往往出现在业务逻辑上,如上周我再公司发现的一个跨站脚本攻击,(通常公司是这么过滤的,max(0,$_GET[‘a’])、strip_tags($_GET[‘a’]),然而代码量大的话,就容易出现忽略的地方)
如下面一段代码:

 <script>
(function(){
 var a = {:$_GET['b']}; 
 //.... 
})()
</script>

如果把接收的参数写成:””;alert(document.cookie);//,那么攻击就成功了,
有了这个漏洞之后如何利用,首先构造一个获取cookie然后跳转到指定服务器进行进行信息收集,然后再跳转回一个不易被怀疑的页面(但如果要做的事比较多,脚本比较多怎么办,
像当年新浪的xss一样,引入js脚本)。有没有更高级的做法,答案是有的,用jsonp就不用跳转了,这个我没有试验,另外还有一种方式,就是把链接生成二维码,
通过扫描二维码的方式也不易被发现,所以大家没事不要随便扫二维码,不要以为在微信中就认为链接不可见,get到链接的方法就是分享页面给自己,然后通过邮件转发就能看到链接.
优缺点:
优点:
效率高
缺点:
不便于维护,缺乏安全性
解决方案:

  1. 使用全局过滤
  2. 要求使用统一的函数进行参数接收,就算不用I函数也可以自定义一个函数
  3. 添加验证码等操作

如何减少攻击带来的损失:

    在一个web项目里,由于多人合作,不一定能每一个细节都做的很好,所以

  • cookie启用httponly属性,thinkphp里似乎要3.2.3版本才有,没有也没关系,可以自己加上,在新版本的thinkphp找到cookie函数,跟旧版本的对比下就知道了,另外
    需要在配置里配置’COOKIE_HTTPONLY’ => true,这个可以在大部分浏览器保证cookie不被偷走

bug终结者
你以为这样就完了吗,往下看:
thinkphp(3.2.3core版测试,默认过滤’DEFAULT_FILTER’=>’htmlspecialchars’,)里I函数也无能为力的地方就是
不过滤单引号

 
(function(){
 var a = '{:$_GET["b"]}';
 var b = '{:I("b")}';//变量输入 ';alert(document.cookie);//
 console.log(a);
 console.log(b);
 
})()

这种情况I函数也帮不了你,最后,使用统一的过滤函数,并且注意I函数单引号的问题

转载请注明:爱游思 » thinkphp等框架开发中容易忽略的xss攻击

喜欢 (15)

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. 这里的变量输入是从url输入
    xhq2016-03-07 22:53
  2. wp导入不完整 :mrgreen:
    梦浪2016-09-11 10:58