XSS跨站脚本攻击

一、简介

XSS(cross site script)是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。

二、原因解析

主要原因:过于信任客户端提交的数据,客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了。那么攻击者就可以肆无忌惮地展开攻击啦。

解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

三、XSS攻击分类

1、反射型XSS

又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。

2、存储型XSS

又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。

3、DOM Based XSS

当用户能够通过交互修改浏览器页面中的DOM并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。通过修改页面的DOM节点形成的XSS,称之为DOMBasedXSS。

容易导致DOM型的XSS的输入源包括:
Document.URL
Document.referrer
Document.cookie
Window.name
Location.[pathname|href|search|hash]
localStorage/globalStorage

三、XSS攻击

  1. 绕过XSS-Filter,利用 <> 标签注入 HTML/JavaScript 代码;
  2. 利用HTML标签的属性值进行XSS攻击。例如:;(当然并不是所有的Web浏览器都支持Javascript伪协议,所以此类 XSS 攻击具有一定的局限性)
  3. 空格、回车和Tab。如果XSS Filter仅仅将敏感的输入字符列入黑名单,比如javascript,用户可以利用空格、回车和Tab键来绕过过滤,例如:
  4. 利用事件来执行跨站脚本。例如:,当src错误,就会执行onerror事件;
  5. 利用CSS跨站。例如:body {backgrund-image: url(“javascript:alert(‘xss’)”)};
  6. 扰乱过滤规则。例如:
  7. 利用字符编码,通过这种技巧,不仅能让XSS代码绕过服务端的过滤,还能更好地隐藏Shellcode;(JS支持unicode、eacapes、十六进制、十进制等编码形式);
  8. 拆分跨站法,将XSS攻击的代码拆分开来,适用于应用程序没有过滤XSS关键字符(如<、>)却对输入字符长度有限制的情况下;
  9. DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面上,它不依赖于提交数据到服务器,而是从客户端获得DOM中的数据在本地执行。

四、XSS防御措施

1、使用 XSS Filter

针对用户提交的数据进行有效的验证,只接受我们规定的长度或内容的提交,过滤掉其他的输入内容。比如:

  • 表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。
  • 过滤或移除特殊的 html 标签:

你可能感兴趣的:(javascript,html)