web安全——跨站脚本攻击(XSS)
什么是XSS
XSS全称:跨站脚本(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets)的缩写CSS混合,所以改名为XSS;攻击者会向web页面(input表单、URL、留言版等位置)插入恶意JavaScript代码,导致管理员/用户访问时触发,从而达到攻击者的目的。
为什么会发生XSS
- 网站对用户的输入过滤不足,返回给用户的展示结果过滤不足。
- 网站的链接地址未经过过滤
XSS作用:
- 获取用户的cookie或其他有用的信息,利用平台负责接收并保存这些信息。
- 钓鱼
- 网站挂马
- 利用网站重定向
- 修改网页内容
- XSS蠕虫
XSS类型:
-
反射型
攻击者通过input表单或URL向web页面中插入恶意的JavaScript代码,当web接收到攻击者恶意的JavaScript代码即会执行JavaScript代码。(一次性,经过后端,不经过数据库) -
存储型XSS
持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。(经过后端,经过数据库) -
DOM型
不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom – xss是通过url传入参数去控制触发的。
反射型 < DOM型 < 存储型
XSS攻击
- 绕过XSS-Filter,利用<>标签注入Html/JavaScript代码;
- 利用HTML标签的属性值进行xss攻击。例如:
<img src="javascript:alert(‘xss’)"/>;
- 空格、回车和Tab。如果XSS Filter仅仅将敏感的输入字符列入黑名单,比如javascript,用户可以利用空格、回车和Tab键来绕过过滤,例如:<img src=“javas cript:alert(/xss/);”/>;
- 利用事件来执行跨站脚本。例如:<img src="#" “alert(1)"/>,当src错误的视乎就会执行onerror事件;
- 利用CSS跨站。例如:Body {backgrund-image: url(“javascript:alert(‘xss’)”)};
- 扰乱过滤规则。例如:<IMG SRC=“javaSCript: alert(/xss/);”/>;
- 利用字符编码,透过这种技巧,不仅能让XSS代码绕过服务端的过滤,还能更好地隐藏Shellcode;(JS支持unicode、eacapes、十六进制、十进制等编码形式)
- 拆分跨站法,将xss攻击的代码拆分开来,适用于应用程序没有过滤 XSS关键字符(如<、>)却对输入字符长度有限制的情况下;
例如:
<script>alert('hack')</script>
<script>confirm('hack')</script>
<script>prompt('hack')</script>
<img src=x onerror=alert(1)>
过滤script,可以用大小写绕过,或者使用其他标签<img>
修复XSS漏洞
- 输入与输出(对输入过滤,对输出编码)
- HttpOnly,HttpOnly是微软公司的Internet Explorer 6 SP1引入的一项新特性。这个特性为Cookie提供了一个新的属性,用以阻止客户端脚本访问Cookie。