XXx外⽹检测到⽬标URL存在基于DOM的跨站脚本漏洞
为了配合XXx门户⽹站等级保护,xxx购置了xx的漏洞扫描服务器。经过扫描,发现我们外⽹WEB服务器上有⼀个检测到⽬标URL存在基于DOM的跨站脚本漏洞,具体请见附件。咨询过xx技术⼈员,他们的说法是外⽹WEB上的部关代码不符合规范。
这个外⽹算起来很⽼了,维护阶段出现这种东西,有点晕,毕竟不是⾃⼰写的代码。
以前很少去注意这些东西,这个到底是怎么回事呢。在⽹上了篇⽂章,有什么疑问的话会做解答。
1、那到底什么是跨站脚本漏洞呢?
跨站脚本漏洞(Cross Site Scripting,常简写作XSS)是Web应⽤程序在将数据输出到⽹页的时候存在问题,导致攻击者可以将构造的恶意数据显⽰在页⾯的漏洞。因为跨站脚本攻击都是向⽹页内容中写⼊⼀段恶意的脚本或者HTML代码,故跨站脚本漏洞也被叫做HTML注⼊漏洞(HTML Injection)。 与SQL注⼊攻击数据库服务器的⽅式不同,跨站脚本漏洞是在客户端发动造成攻击,也就是说,利⽤跨站脚本漏洞注⼊的恶意代码是在⽤户电脑上的浏览器中运⾏的。
2、有什么危害?
跨站脚本攻击注⼊的恶意代码运⾏在浏览器中,所以对⽤户的危害是巨⼤的——也需要看特定的场景:跨站脚本漏洞存在于⼀个⽆⼈访问的⼩站⼏乎毫⽆价值,但对于拥有⼤量⽤户的站点来说却是致命的。
最典型的场景是,⿊客可以利⽤跨站脚本漏洞盗取⽤户Cookie⽽得到⽤户在该站点的⾝份权限。据笔者所知,⽹上就有地下⿊客通过出售未公开的GMail、雅虎邮箱及hotmail的跨站脚本漏洞牟利。
由于恶意代码会注⼊到浏览器中执⾏,所以跨站脚本漏洞还有⼀个较为严重的安全威胁是被⿊客⽤来制造欺诈页⾯实现钓鱼攻击。这种攻击⽅式直接利⽤⽬标⽹站的漏洞,⽐直接做⼀个假冒⽹站更具欺骗性。
另外,控制了⽤户的浏览器,⿊客还可以获取⽤户计算机信息、截获⽤户键盘输⼊、刺探⽤户所处局域⽹信息甚⾄对其他⽹站进⾏GET Flood攻击。⽬前互联⽹已经有此类利⽤跨站脚本漏洞控制⽤户浏览器的⿊客⼯具出现。
当然,虽然跨站脚本攻击是在客户端浏览器进⾏,但是最终也是可以攻击服务器的。笔者就曾在安全测试过程中就利⽤某Blog程序的跨站脚本漏洞得到⽹站管理员⾝份并最终控制Web服务器。
3、这个是怎么产⽣的呢?
看了些⽂章,产⽣的⽅式⽆⾮就这⼏种。⼀是url要传参数,如果参数中含有<script>这样的脚本 ,⽽⼜没有对这些个参数进⾏处理的话,就会在页⾯中执⾏这个脚本,从⽽。。。还有就是,页⾯中使⽤document.write,如果这个⾥⾯含有< > ‘ 等⼀系列的符号时,会对页⾯造成影响 。等等啦,想知道更多,去看参考⽂章吧。
下⾯是扫描⼯具给出报告的选段:
解决办法:请分析并加强客户端 (JavaScript) 代码。 处理攻击者所能影响的输⼊源,通常是url,例如:document.URL,document.URLUnencoded,document.location(及其许多属性,ferrer ,window.location(及其许多属性)
检查页⾯中是否使⽤了以下代码作为输出:
* document.write(…)
* document.writeln(…)
* document.body.innerHtml=…
- 直接修改 DOM(包括 DHTML 事件),例如:
* document.forms[0].action=…(以及各种其他集合) * document.attachEvent(…)
* ate…(…)
* Command(…)
* document.body. …(通过主体对象访问 DOM)
* window.attachEvent(…)
- 替换页⾯URL,例如:
* document.location=…(以及指派给位置的 href、主机和主机名)
* document.location.hostname=…
* place(…)
* document.location.assign(…)
* document.URL=…
* window.navigate(…)
- 打开/修改窗⼝,例如:
* document.open(…)
* window.open(…)
* window.location.href=… (以及指派给位置的 href、主机和主机名)
- 直接执⾏脚本,例如: * eval(…)
* Script(…)
* window.setInterval(…)
* window.setTimeout(…)
我们这个外⽹的情况就是:
[plain]
URL:
html document是什么或者
[/plain]
⽽页⾯中⽤了window.location.href
[html]
<script type=”text/javascript”>
var str = ‘<?hello>’;
var str2 = window.location.href;
var link_href = str+’&url=’+str2;
document.write(“<a href=’”+link_href+”‘ class=’A14H’ target=’_blank’>点击提问</a>”);
</script>
[/html]
上⾯这些代码⼀个是会执⾏script(alert会执⾏),再就是有个单引号会导致标签提早闭合,导致页⾯难看。
鉴于外⽹多是静态⽂件,且不⽤传参,我直接把window.location.href换成了
window.location.protocol+”//”+window.location.hostname+window.location.pathname,情况解决。
当然了,更好的解决办法在于对url的编码。
<;编码为<
>编码为>
“编码为"
‘编码为'
实际上需要⽤单引号(’)闭合JavaScript代码,这⾥就需要按照JavaScript的语法把单引号转义: ‘ 转义为 \’声明: 本⽂ ” ” 采⽤ 协议进⾏授权.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论