XSS

二十几岁的时候,即使你对你的目标和志向很迷茫,很不确定,你却能强烈地感受到生活本身是什么,生活中的你是什么样子,会变成怎样。后来,这种不确定性越来越多,相互交叉,前后纠缠,虚假记忆日渐增加。想当初,你能记住你短暂人生的全部。后来,记忆变成了一件百衲衣。 ——朱立安·巴恩斯《终结的感觉》

0x00 什么是XSS

CSS(Cross Site Scripting,跨站脚本攻击),为了和层叠样式表(Cascading Style Sheet,CSS)区分,所以改为叫XSS。XSS攻击能让攻击者在受害者的浏览器中执行脚本,并劫持用户会话、破坏网络或将用户重定向到其他恶意的站点。

0x01 XSS原理

当应用程序的网页中包含不可信的,未经恰当验证或转义的数据时,或者使用可以创建HTML或JavaScript的浏览器API更新现有的网页时,就会出现XSS漏洞。举个栗子,当你在一些网站评论或留言的时候,你输入的不是正常的留言,而是一些恶意的HTML或JavaScript代码,刚好这个网站的安全措施做得没那么好,对于用户输入的数据没有进行过滤、转义等一些安全处理,然后你的恶意代码就被浏览器执行或者上传到数据库了。

0x02 XSS分类

分三种XSS类型,通常针对的都是用户的浏览器。

反射型XSS

应用程序或API包括未经验证和未经转义的用户输入,作为HTML输出的一部分。一个成功的攻击可以让攻击者在受害者的浏览器中执行任意的HTML和JavaScript。通常用户将需要与指向攻击者控制页面的某些恶意链接进行交互,例如恶意漏洞网站,广告等。

存储型XSS

应用程序或API间未“消毒”的的用户输入存储到了数据库,在后期在其他用户的或管理员的页面显示出来。存储型XSS一般被认为是高危或严重的漏洞。

基于DOM的XSS

DOM的全称为Document Object Model,即文档对象模型。基于DOM型的XSS是不需要与服务器交互的,它只发生在客户端处理数据阶段。这种类型的XSS会动态的将攻击者可控的内容加入页面的JavaScript框架、单页面程序会API存在这类型的漏洞。反射型和存储型XSS是后端(服务器端)代码漏洞造成的,payload在响应页面中,在DOM XSS中,payload不在服务器发出的HTTP响应页面中,当客户端脚本运行时(渲染页面时),payload才会加载到脚本中执行。

0x03 XSS预防

1.使用设计上就会自动编码来解决XSS问题的框架,如:Ruby 3.0或React JS。了解每个框架的XSS保护的局限性,并适当的处理未覆盖的用例。
2.为了避免反射型XSS和存储型XSS漏洞,最好的办法就是根据HTML输出的上下文(包括:主体、属性、JavaScript、CSS或URL)对所有不可信的HTTP请求数据进行恰当的过滤、转义。
3.在客户端修改浏览器文档时,为了避免DOM型XSS攻击,最好的选择是实施上下文敏感数据编码。如果这种情况不能避免,也可以采用类似上下文敏感的的转义技术应用浏览器的API。
4.使用内容安全策略(CSP)是对抗XSS的深度防御策略。如果不存在可以通过本地文件放置恶意代码的其他漏洞(如:路径遍历覆盖和允许在网络中传输的易受攻击的库),该策略是有效的。

上下文敏感(context-sensitive)

在过程间分析(Interprocedural Analysis)时,考虑函数调用的上下文信息。一个子过程或函数可能会被多个过程调用,那么在不同的过程调用它的时候,对于传给它的实际参数或当时的全局变量有可能会不同,这些被称之为上下文,上下文敏感是考虑了这些不同。

CSP

内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。CSP以白名单的机制对网站加载或执行的资源起作用。在网页中,这样的策略通过 HTTP 头信息或者 meta 元素定义。CSP虽然提供了强大的安全保护,但是他也造成了如下问题:Eval及相关函数被禁用、内嵌的JavaScript代码将不会执行、只能通过白名单来加载远程脚本。这些问题阻碍CSP的普及,如果要使用CSP技术保护自己的网站,开发者就不得不花费大量时间分离内嵌的JavaScript代码和做一些调整。

对于DOM的个人理解

因为DOM Tree,JavaScript可以通过DOM节点对HTML或XML文档进行修改,因为JavaScript要获得HTML或XML里的元素访问的入口,就必须通过DOM对象的属性或方法。DOM技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。


参考文献:OWASP TOP 10 2017 10项严重的WEB应用程序安全风险

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×