Javascript中XSS的过滤

对于XSS的过滤,在很多网站中都是说,要过滤双引号,要过滤掉尖括号,这样就安全了。难道真的过滤了双引号和尖括号就完全安全了?在导入到Javascript中的变量中,XSS是有非常多方法的,很多时候我们要根据具体的上下文来分析。而不是根据所谓的网上的一些通用方法来进行过滤,网上通用的方法在很多具体环境下都是漏洞百出的。

我们来看下面一个网上的例子:
http://xsst.sinaapp.com/example/test1-2-2.php?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=document.cookie;
}catch(e){

}
</script>

<div class="code">

在提交的参数中已经过滤了:
“, [, ] , \, <, >

如果是你的话,你会怎样想办法去绕呢,有人给出了一种绕过的方法,有奇效,居然是用加号来达到弹出的目的:

http://xsst.sinaapp.com/example/test1-2.php?page=’%2balert(document.cookie)%2b’

在使用加号做字符串连接的时候,中间的js会被执行,这个是之前好像没有怎么看到过的,能触发alert的操作绝对不止加号这一直,之前在其他文章中也看到过很多类似的技巧。因此在JS中,要过滤XSS,确实是一件比较麻烦的事情,因为需要考虑上下文的影响。

再看另一个:
http://xsst.sinaapp.com/example/test1-2-3.php?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=document.cookie;
}catch(e){

}
</script>

过滤了:
”, <, >, eval, window, alert

这里的上下文又不同,alert和eval都不能用了,怎么办呢,我们可以看到在页面中引入了jquery,那么应该可以从jquery带的函数下手吧,然后再通过字符串拼接来绕过对于alert的过滤,使用下面的方法来绕:

http://xsst.sinaapp.com/example/test1-2-3.php?page=’%2bjQuery.globalEval(‘a’%2b’lert’%2b'(document.cookie)’)%2b’

用到了jQuery.globalEval来做执行,绕过了限制。因此,在XSS的过滤中,上下文确实非常重要,如果没有对于上下文正确的理解,很难做出正确的过滤。看来熟悉Javascript还是非常有用的,准备迟点好好看看Javascript,也可以用来改造博客什么的。

 

本文标题:Javascript中XSS的过滤
本文链接:https://www.nigesb.com/xss-filter-in-javascript.html
订阅本站:http://www.nigesb.com/feed
转载请注明来源,如果喜欢本站可以Feed订阅本站。

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>