'XSS基础'

什么是XSS

跨站脚本攻击,是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。恶意用户利用XSS代码攻击成功后,可能得到很高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

常用的XSS攻击手段和目的

1.盗用cookie,获取敏感信息。
2.利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
3.利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的操作如发微博、加好友、发私信等操作。
4.利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
5.在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDOS攻击的效果。

分类

1,反射型
又称非持久性XSS,这种攻击方式只能执行一次。
反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,服务器接受该目标用户的请求并处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析后触发XSS代码。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

2,存储型
又称持久性XSS,攻击脚本永久的存放在目标服务器的数据库或文件中。
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
例如,攻击者在留言板中插入以下代码:

1
<script>alert(/hacker by sunian/)</script>

当其他用户访问留言板时,就会看到一个弹窗。

3,DOM型
DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档内容、结构及样式。
客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤和转义,那么应用程序就可能受到基于 DOM 的 XSS 攻击。(不与服务器交互,只发生在客户端处理数据的阶段)

利用方式:用户经过一个专门设计的URL,它由攻击者提交,而且包含XSS代码。服务器的响应不会包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致XSS漏洞

漏洞利用资料https://www.4hou.com/technology/12234.html (反射性和DOM型的利用方式相似)

三类原理简述

1,反射型XSS原理:用户访问一个带有XSS代码的URL请求时,服务端接收数据后处理,然后把带有XSS代码 的数据发送到浏览器,浏览器解析代码的数据,造成XSS漏洞。

2,存储型XSS原理:攻击者提交XSS代码后,被服务端数据库接受并存储,当用户访问时,这段代码程序被读出相应给到浏览器,造成XSS跨站脚本攻击。

3,DOM型XSS原理:客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM型XSS漏洞

漏洞防御

1,过滤输入的数据,如’ " < > on* 等非法字符
2,对输入的数据进行HTML实体编码,JS编码
3,使用HttpOnly,但httponly只能防止获取cookie,不能防XSS(面试时可能会问)