XSS:跨站脚本攻击

漏洞产生的原理:浏览器未对用户的输入内容做严格审查,同时html语言具有文本和标签属性,浏览器会将恶意构造的输入识别成标签,从而执行。

漏洞攻击原理:攻击者利用特殊字符构造恶意的脚本代码,欺骗浏览器将其识别成标签,从而达到使浏览器执行恶意操作的目的。

可能产生的后果:例如利用js脚本可以盗取用户cookie,或者其他的未授权操作。如果时存储型xss,甚至可以引发ddos攻击。

存储型XSS:往往发生在需要缓存的地方,例如文章上传,评论发表。攻击者将恶意代码传入服务器中进行缓存。如此一来,任意一个用户访问该页面都会引发恶意代码的执行。

反射型XSS:服务器本身没有恶意脚本存在,攻击者事先制作好攻击链接,并且诱导用户去点击,例如搜索窗口这种。一旦用户点击发出请求后,XSS代码出现在url中作为输入传入服务器,服务器端解析响应,XSS代码随着响应内容回送到浏览器端,浏览器解析后执行恶意操作。这个过程就像一次反射。

漏洞的防御修复:针对漏洞产生的原理,往往是最有效的。在不需要html输入的地方,严格对html标签,一些特殊字符过滤或者转义掉,例如尖括号,引号,alert,onclick等。

可能还有经常可见的DOM型XSS,但是DOMXSS不应该是和存储型和反射型XSS并列分类的。

因为存储型XSS和反射型XSS的分类标准是服务器端是否缓存恶意脚本,是按照漏洞触发形式分类的。

而DOM XSS则是按照利用端口分的,利用了浏览器的DOM接口的,属于DOMXSS,未利用的属于非DOM XSS

所以,DOM XSS和存储型XSS,就好像对称密码和分组密码,他们是不同分类标准的。

可以同时是 DOM-besed 存储型 XSS,也可以是对称的分组密码:例如DES。

所以应当这样分类:按照存储形式:存储型,反射型

按照接口分:DOM XSS;非DOM XSS

DOM XSS

DOM型XSS:

DOM:文档对象模型,是页面将元素以为对象的树状呈现的一种模型,以便于javascript组织处理。

  每个页面都有很多的元素,当访问页面时,会创建一个顶级的文档对象,后续的元素则以树状排列为其余文档对象,各个对象有自己的属性等等。

  而JS脚本修改页面则是通过查找树形文档对象模型,然后修改其属性来操作页面的。也就DOM模型。

  所以也就是说JS脚本可以通过DOM来动态的修改页面,整个过程都是在浏览器端实现的,或者说前端,没有到达服务器,或是数据库。

  而修改页面的这个接口,也就是对象属性。

利用原理:攻击者利用一些需要赋值的对象属性,来传入恶意脚本,从而当浏览器利用DOM进行新页面渲染的时候,执行我们传入的恶意操作。

  常见的可利用的属性为:innerHTML,这个属性使用很多而且是可以被赋值的,所以常常出现安全问题。

  然后是JS经常使用的DOM内置的location来传入用户的输入。

攻击流程:攻击者传入带有参数的url,浏览器解析url,获得参数。然后浏览器调用DOM,改写属性来动态调整页面,这个过程也叫渲染。然后返回调整后的页面。在这一流程中,攻击者将脚本代码作为参数传    入,就会利用DOM调用改写属性,从而执行恶意操作。

  这叫做基于DOM的XSS。

  此处如果,传入的参数先进入服务器,存入数据库,然后再被返回到本地浏览器做解析,再调用DOM渲染,执行恶意操作。则称为DOM存储型XSS。

  所以是否是DOMXSS基于最终执行代码时,是否利用DOM接口。

 防御:输入端做好特殊字符的转义输出端先进行编码,如输出到HTML则进行HTML编码、输出到JS则进行JS编码

 




DOM型XSS:

DOM:文档对象模型,是页面将元素以为对象的树状呈现的一种模型,以便于javascript组织处理。

  每个页面都有很多的元素,当访问页面时,会创建一个顶级的文档对象,后续的元素则以树状排列为其余文档对象,各个对象有自己的属性等等。

  而JS脚本修改页面则是通过查找树形文档对象模型,然后修改其属性来操作页面的。也就DOM模型。

  所以也就是说JS脚本可以通过DOM来动态的修改页面,整个过程都是在浏览器端实现的,或者说前端,没有到达服务器,或是数据库。

  而修改页面的这个接口,也就是对象属性。

利用原理:攻击者利用一些需要赋值的对象属性,来传入恶意脚本,从而当浏览器利用DOM进行新页面渲染的时候,执行我们传入的恶意操作。

  常见的可利用的属性为:innerHTML,这个属性使用很多而且是可以被赋值的,所以常常出现安全问题。

  然后是JS经常使用的DOM内置的location来传入用户的输入。

攻击流程:攻击者传入带有参数的url,浏览器解析url,获得参数。然后浏览器调用DOM,改写属性来动态调整页面,这个过程也叫渲染。然后返回调整后的页面。在这一流程中,攻击者将脚本代码作为参数传    入,就会利用DOM调用改写属性,从而执行恶意操作。

  这叫做基于DOM的XSS。

  此处如果,传入的参数先进入服务器,存入数据库,然后再被返回到本地浏览器做解析,再调用DOM渲染,执行恶意操作。则称为DOM存储型XSS。

  所以是否是DOMXSS基于最终执行代码时,是否利用DOM接口。

 防御:输入端做好特殊字符的转义输出端先进行编码,如输出到HTML则进行HTML编码、输出到JS则进行JS编码