政务公开系统专栏首页的跨站攻击漏洞

概述

     前段时间,顺义区对我们的专栏系统进行了扫描,扫描出了几个漏洞,大部分是因为我们使用了默认配置,没有对一些安全选项进行设置。比如jmx-console、web-console等的默认不用密码就能登录,查看系统配置等。还有就是普元的EOS配置的项目中有一个axis和axis2两个Web模块,这两个模块中都有一个happyaxis.jsp的页面,这两个页面也会显示系统的配置信息。这些错误只需要将对应的页面删掉,或者去掉这些web模块就可以了。一个比较明显的漏洞就是跨站攻击的漏洞。

问题分析

     这个跨站攻击的漏洞是访问一个地址,参数中包含了一些js脚本,因为参数错误,会转到错误页面,在错误页面中执行了对应的js脚本。

     原来在EOS的错误页面中会显示错误信息,将错误堆栈都显示出来了。这个错误信息客户早就提出来说应该更友好一些,我们考虑的也就是把错误信息隐藏起来,开始想的是为了方便开发人员获得错误信息,加了一个按钮“显示详细错误信息”,点击该该按钮,显示错误错误堆栈。

     这个错误堆栈是通过普元的eos:error标签显示的,后来发现是因为这个标签没有对输出的内容进行过滤,而是直接将错误内容显示在页面上,而造成了跨站攻击的错误,形成现象如下:

     在输入参数中有一个值的后面被加上了如下代码:<img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;alert(27944)>

     在错误提示页面中会提示输入的某个参数值是xxx(其中包含了上面的脚本),因此在页面上就执行alert脚本了。

解决方案

     要解决该问题有两个解决方案:

     1. 在错误页面上只提示系统发生了错误,而不要将错误信息显示出来。

     2. 改造普元的eos:error标签,将异常信息进行过滤。

          2.1 普元公司改造自己的标签

          2.2 扩展普元的标签,用自己的标签来替换

     因为发生错误都是通过分析日志,而且客户看到错误信息根本没用,因此我们选中了第一个解决方案。

经验总结

     使用自定义标签或者编写servlet往页面上输出内容的时候,不能直接将某些变量的值直接输出到out中,而应该对内容进行过滤,然后输出到页面上。

posted on 2008-08-04 15:03  liwp_Stephen  阅读(433)  评论(0编辑  收藏  举报

导航