跨站脚本攻击的英文全称是Cross-ite Scripting,缩写为CSS,但是为了和层叠样式表(Cascading Style Sheets,CSS)进行区分,所以称为XSS。
(1)XSS的攻击原理
XSS攻击本质上是一种注入类型的攻击。
正常情况下,Web应用只会执行应用内预定义的JS代码来实现应用自身的功能,但是如果应用对外部输入参数处理不当,攻击者可将恶意JavaScript代码注入当前Web页面,一旦受害者访问这些页面,攻击者注入的恶意代码就会执行。
当外部恶意代码被注入正常应用的页面以后,浏览器无法区分它是应用自身的代码还是外部注入的代码,这些恶意代码拥有和当前页面正常JS脚本一样的权限,例如读写Cookie、读写页面内容、发送HTTP请求等等。
(2)XSS的攻击类型
①、反射型XSS攻击,(Reflected XSS)
也可以称为非持久性XSS(Non-Persistent XSS)
这是XSS最常见的一种攻击类型,指的是服务端应用在收到客户端的请求后,未对请求中的参数做合法性校验或安全过滤,直接将参数用于构造HTML页面并返回给浏览器显示,如果参数中包含恶意脚本,就会以HTML代码的形式被返回给浏览器执行。
②、存储型XSS攻击
在存储型XSS攻击者,服务端应用将攻击者提交的恶意代码存储在服务端,受害者每次访问一个干净的URL时,服务端就在响应页面中嵌入之前存储的恶意代码,这些恶意代码将在受害者客户端执行。
③、基于DOM的XSS攻击
正常应用中的JavaScript程序也可以接收外部的输入数据并直接在客户端渲染和执行,如果处理不当,它就可能将外部数据当作代码来执行。通常是客户端的JavaScript脚本在修改和构造前档页面的DOM节点时触发恶意代码执行,并不是服务端直接返回恶意代码给客户端执行。
④、Self-XSS攻击
利用社会工程学欺骗用户,让他们自己去复制恶意代码并粘贴到浏览器中。
