漏洞描述

XSS(Cross Site Scripting)的中文名称为跨站脚本攻击,为了和层叠样式表(Cascading Style Sheets,CSS)的缩写进行区分,故将跨站脚本攻击的英文缩写为XSS。XSS是一种在Web应用中常见的安全漏洞,它允许用户将恶意脚本植入到Web页面中,当其他用户访问此页面时,植入的恶意脚本就会在其他用户的客户端中执行。

漏洞危害

一般来说,XSS的危害性没有SQL注入的大,但是一次有效的XSS攻击可以做很多事情,比如获取Cookie、获取用户的联系人列表、截屏、劫持等。
根据服务器后端代码的不同,XSS的种类也不相同,一般可以分为反射型、存储型以及和反射型相近的DOM型。主要漏洞危害有:窃取Cookie,键盘记录,截屏,网页挂马,命令执行。

漏洞类型

反射型xss

对用户的输入过滤不严导致用户URL中携带的参数直接输出在网页上,若此时URL中携带有恶意JavaScript语句,则会通过浏览器的解析引擎解析并执行。
比如当用户在搜索框中进行搜索时,返回结果通常会包括用户原始的搜索内容,此时便可能触发XSS漏洞。若此时攻击者精心构造包含XSS恶意代码的链接,诱导用户点击并成功执行其中的JavaScript脚本,此时轻则用户的信息被窃取,重则可能执行任意代码。
image.png

存储型XSS

存储型XSS与反射型XSS核心原理一致,都是将JavaScript通过程序输出到HTML页面中并交由浏览器引擎解析。相比于反射型XSS,存储型XSS危害更大。反射型XSS需构造恶意URL来诱导受害者点击,而存储型XSS由于有效载荷直接被写入了服务器中,且不需要将有效载荷输入到URL中,往往可以伪装成正常页面,迷惑性更强。因此存储型XSS漏洞对于普通用户而言很难及时被发现。
若过滤不严,存储型XSS极易造成网络蠕虫,导致大量Cookie被窃取。当然存储型XSS也可用作权限维持来窃取网站后台的登录信息。

image.png

漏洞修复

应用程序应该对:直接源自用户输入的值、可能受用户影响的值、受用户影响的数据存储库值(数据库、日志、文件等)或可能具有的任何其他信息的任何输出进行编码。

转义

还有其它的转义方式

  1. /** HTML转义 **/
  2. String s = HtmlUtils.htmlEscape("<div>hello world</div><p>&nbsp;</p>");
  3. System.out.println(s);
  4. String s1 = HtmlUtils.htmlUnescape(s);
  5. System.out.println(s1);

image.png

过滤

重点过滤以下符号,以及他们的各类型编码。不要去过滤事件,过滤不完的

  • <
  • >
  • =