XSS

XSS介绍及原理

Posted by Tattoo on 2019-02-25
Estimated Reading Time 4 Minutes
Words 1.3k In Total
Viewed Times

XSS漏洞介绍

XSS又叫CSS(Cross Site Script),跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。它指恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而达到恶意攻击用户的目的。

XSS漏洞原理

利用我们所知的各种方法,向Web页面插入JS代码,让JS代码可以被浏览器执行,访问该页面的用户则被攻击。

XSS漏洞分类

XSS跨站脚本一般分为三种类型分别是,反射型、存储型、DOM型XSS,下面依次介绍这三种类型的特点及原理。

1.反射型

反射型XSS又叫非存储型XSS。payload通过URL参数的GET方式传递进去,没有经过存储的过程,从后端直接输出到前端页面。反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客需要优使用户“点击”一个恶意链接,才能攻击成功触发攻击代码。才能攻击成功。反射型XSS也叫做“非持久型XSS”

当请求数据在响应中呈现为未编码和未筛选时,就会发生反映型XSS。有了社会工程的帮助,攻击者可以诱骗用户访问创建这样一个请求的页面,即允许攻击者在目标用户上下文中执行JavaScript。这种变化可以做什么取决于漏洞的性质,但是XSS 一般被利用来劫持会话、窃取凭据或者执行未经授权的操作。

2.存储型

存储型XSS会把用户输入的数据“存储”在服务端,有一个存储过程。存储型XSS攻击就是把攻击数据存进数据库,攻击行为就伴随着攻击数据一直存在。恶意攻击者往Web页面里插入恶意Script代码,网站系统未经过滤就将数据保存到了数据库中,当用户浏览该页的时候,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。

3.DOM型

这种类型的XSS并非按照“数据是否保存在服务端”来划分,DOM Based XSS从效果上来说也是反射型XSS。单独划分出来,因为DOM Based XSS的形成原因比较特别,DOM型XSS由前端JS处理,直接输出到前端页面,不经过后端处理。通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

漏洞危害

窃取用户Cookie,如果用户Cookie被窃取,攻击者可以不通过密码,而直接登录进用户账户;

使用XMLHttpRequest构造模拟用户操作;

XSS钓鱼攻击;

用户PC信息探测收集;

XSS蠕虫攻击;

上传脚本文件盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号;

利用xss漏洞上传脚本文件获得企业网站一定权限控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力;

盗窃企业重要的具有商业价值的资料;

控制受害者机器向其它网站发起攻击。

漏洞防御

1.使用HttpOnly

跨站点脚本攻击是困扰Web服务器安全的常见问题之一。跨站点脚本攻击是一种服务器端的安全漏洞,常见于当把用户的输入作为HTML提交时,服务器端没有进行适当的过滤所致。跨站点脚本攻击可能引起泄漏Web 站点用户的敏感信息。为了降低跨站点脚本攻击的风险,微软公司的Internet Explorer 6 SP1引入了一项新的特性。

这个特性是为Cookie提供了一个新属性,用以阻止客户端脚本访问Cookie。 像这样具有该属性的cookie被称为HTTP-only cookie。包含在HTTP-only cookie中的任何信息暴露给黑客或者恶意网站的几率将会大大降低。

2.输入输出检查

常见的WEB漏洞XSS SQLI等,都要求攻击者构造一些特殊字符,这些字符可能是正常用户不会用到的,所以输入检测就有存在的必要了,输入检查的逻辑,必须放在服务端代码中实现。如果只是在客户端使用JavaScript进行输入检查,是很容易被攻击者绕过的。目前WEB开发的普遍做法,是同时在客户端JavaScript和服务端中实现相同的输入检测。客户端JavaScript的输入检测,可以阻挡大部分误操作的正常用户,从而解决服务器资源。
输入检查用户输入的数据中是否包含一些特殊字符,如<,>,’,等如果发现存在特殊字符,则将这些字符过滤或者编码。
输出检测,除了富文本的输出外,在变来那个输出HTML页面时,可以使用编码或转义的方式来防御XSS攻击。


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !