XSS漏洞及修复方案

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等内容。

XSS的原理是WEB应用程序混淆了用户提交的数据和脚本的代码边界,导致浏览器把用户的输入当成了脚本代码来执行。XSS的攻击对象是浏览器一端的普通用户。

XSS攻击类型

反射型XSS

反射型XSS,又称非持久型XSS。也就是攻击相当于受害者而言是一次性的,具体表现在受害者点击了含有的恶意JavaScript脚本的url,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行响应的脚本。

存储型XSS

存储型XSS,也就是持久型XSS。攻击者上传的包含恶意js脚本的留言等信息被Web应用程序保存到数据库中,Web应用程序在生成新的页面的时候如果包含了该恶意js脚本,这样会导致所有访问该网页的浏览器解析执行该恶意脚本。这种攻击类型一般常见在博客、论坛等网站中。

DOM型XSS

DOM,全称是Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构和样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞,而且不需要与服务器进行交互。
客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

XSS危害

XSS可以造成的危害有很多,常见的有以下:

  • 网络钓鱼,包括获取各类用户账号
  • 窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作
  • 劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等
  • 强制弹出广告页面、刷流量等
  • 网页挂马
  • 进行大量的客户端攻击,如DDoS
  • 获取客户端信息,如用户的浏览历史、真实ip、开放端口等
  • 控制受害者机器向其他网站发起攻击
  • 结合其他漏洞,如CSRF,实施进一步危害
  • 传播跨站脚本蠕虫

XSS修复方案

输入编码转义

对输入的数据进行HTML转义,使其不会识别为可执行脚本

Spring HtmlUtils

String result = HtmlUtils.htmlEscape(source);

白名单过滤

根据白名单的标签和属性对数据进行过滤,以此来对可执行的脚本进行清除(如script标签,img标签的onerror属性等)


<dependency>
    <groupId>org.jsoupgroupId>
    <artifactId>jsoupartifactId>
    <version>1.13.1version>
dependency>

String result = Jsoup.clean(source, Whitelist.basic());

默认的基础白名单配置
XSS漏洞及修复方案_第1张图片


参考资料:

  1. XSS攻击
  2. Java处理富文本中的XSS攻击

你可能感兴趣的:(网络安全,XSS,修复方案,Java)