tp3.2.3中的xss攻击基本防护

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

如下面一段代码:


(function(){

var a = {:$_GET['b']};

//....

})()

如果把接收的参数写成:””;alert(document.cookie);//,那么攻击就成功了,

有了这个漏洞之后如何利用,首先构造一个获取cookie然后跳转到指定服务器进行进行信息收集,然后再跳转回一个不易被怀疑的页面(但如果要做的事比较多,脚本比较多怎么办,

像当年新浪的xss一样,引入js脚本)。有没有更高级的做法,答案是有的,用jsonp就不用跳转了,这个我没有试验,另外还有一种方式,就是把链接生成二维码,

通过扫描二维码的方式也不易被发现,所以大家没事不要随便扫二维码,不要以为在微信中就认为链接不可见,get到链接的方法就是分享页面给自己,然后通过邮件转发就能看到链接.

优缺点:

优点:

效率高

缺点:

不便于维护,缺乏安全性

解决方案:

使用全局过滤

要求使用统一的函数进行参数接收,就算不用I函数也可以自定义一个函数

添加验证码等操作

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

在一个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函数单引号的问题

原文地址:https://www.cnblogs.com/hoewang/p/10257274.html