XSS原理及其预防

0x00 什么是XSS

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

0x01 XSS原理

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

0x02 XSS分类

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

    1.反射型XSS

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

    2.存储型XSS

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

    3.基于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代码和做一些调整。[来源于百度百科]

2018.3.26更新:对于DOM的个人理解

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值