当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

javascript中XSS的过滤

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

对于XSS的过滤,在很多网站中都是说,要过滤双引号,要过滤掉尖括号,这样就安全了。难道真的过滤了双引号和尖括号就完全安全了?在导入到javascript中的变量中,XSS是有非常多方法的,很多时候我们要根据具体的上下文来分析。而不是根据所谓的网上的一些通用方法来进行过滤,网上通用的方法在很多具体环境下都是漏洞百出的。
我们来看下面一个网上的例子:
?page=1
<style>
.code{border:1px solid #ccc;background:#ffff77;padding:10px;}
</style>
<pre>
<div class="code" id="test">
<a href="javascript:void(0);">这里只是测试用的链接..</a>
<a href="javascript:void(0);">这里只是测试用的链接..</a>
<a href="javascript:void(0);">这里只是测试用的链接..</a>
</div>
<script src="../jq.js"></script>
<script name="对面的妹子,看过来,看过来,看过来...">
try{
    var page=$('#test a[href="1"]');
    var b=documents.cookie;
}catch(e){
 
}
</script>
 
<div class="code">在提交的参数中已经过滤了:
“, [, ] , \, <, >
如果是你的话,你会怎样想办法去绕呢,有人给出了一种绕过的方法,有奇效,居然是用加号来达到弹出的目的:
?page=’%2balert(documents.cookie)%2b’
在使用加号做字符串连接的时候,www.xuhantao.com,中间的js会被执行,这个是之前好像没有怎么看到过的,能触发alert的操作绝对不止加号这一直,之前在其他文章中也看到过很多类似的技巧。因此在JS中,要过滤XSS,确实是一件比较麻烦的事情,因为需要考虑上下文的影响。
再看另一个:
?page=1
<style>
.code{border:1px solid #ccc;background:#ffff77;padding:10px;}
</style>
<pre>
<div class="code" id="test">
<a href="javascript:void(0);">这里只是测试用的链接..</a>
<a href="javascript:void(0);">这里只是测试用的链接..</a>
<a href="javascript:void(0);">这里只是测试用的链接..</a>
</div>
<script src="../jq.js"></script>
<script name="对面的妹子,看过来,看过来,看过来...">
try{
    var page='1';
    var b=documents.cookie;
}catch(e){
 
}
</script>
 
过滤了:
”, <, >, eval, window, alert
这里的上下文又不同,alert和eval都不能用了,怎么办呢,我们可以看到在页面中引入了jquery,那么应该可以从jquery带的函数下手吧,然后再通过字符串拼接来绕过对于alert的过滤,使用下面的方法来绕:
/example/test1-2-3.php?page=’%2bjQuery.globalEval(‘a’%2b’lert’%2b’(documents.cookie)’)%2b’
用到了jQuery.globalEval来做执行,绕过了限制。因此,在XSS的过滤中,上下文确实非常重要,如果没有对于上下文正确的理解,很难做出正确的过滤。看来熟悉javascript还是非常有用的,涛涛电脑知识网,准备迟点好好看看javascript,也可以用来改造博客什么的。

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1