java源代码风险漏洞 java代码漏洞扫描( 八 )


XSS漏洞成因是由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“”、“”) , 然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行 。
分为三种类型:
1)反射型(数据流向:浏览器 -后端 - 浏览器)
反射型XSS脚本攻击即如我们上面所提到的XSS跨站脚本攻击方式 , 该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据 。由于此种类型的跨站代码存在于URL中 , 所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施 。
2)存储型(数据流向是:浏览器 -后端 - 数据库 - 后端- 浏览器)
存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性 。
存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码 。
3)基于DOM(数据流向是:URL--浏览器 )
基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击 。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用 。
解决方法:
1).输入过滤 。对用户的所有输入数据进行检测,比如过滤其中的“”、“”、“/”等可能导致脚本注入的特殊字符,或者过滤“script”、“javascript”等脚本关键字,或者对输入数据的长度进行限制等等 。同时,我们也要考虑用户可能绕开ASCII码,使用十六进制编码来输入脚本 。因此,对用户输入的十六进制编码,我们也要进行相应的过滤 。只要能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS攻击 。
2).输出编码 。通过前面对XSS攻击的分析,我们可以看到,之所以会产生XSS攻击,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代码的一部分 。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码 , 然后再输出到目标页面中 。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字 , 而不会成为目标页面HTML代码的一部分得到执行.
3、CSRF跨站请求伪造漏洞防护
CSRF是CrossSite Request Forgery的缩写,乍一看和XSS差不多的样子,但是其原理正好相反 , XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求 。
字面理解意思就是在别的站点伪造了一个请求 。专业术语来说就是在受害者访问一个网站时,其 Cookie 还没有过期的情况下,攻击者伪造一个链接地址发送受害者并欺骗让其点击 , 从而形成 CSRF 攻击 。
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址 。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站 。
解决方案:
配置FILTER拦截用户所有请求(POST/GET),对用户请求Referer头URL进行合法性校验 。

推荐阅读