XSS 漏洞简介
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.
XSS分类:
反射型: 非持久性XSS攻击,当用户访问已被插入攻击代码的链接时,攻击代码执行,完成该次攻击。
存储型:持久型XSS攻击,攻击者把攻击代码永久存储在目标服务器上中,例如数据库,消息论坛,留言板,访问者日志等。当用户进入页面,代码就会被执行。
DOM 型:DOM型与前两者的差别是,只在客户端进行解析,不需要服务器的解析响应
XSS危害:
1. 盗用cookie,获取敏感信息。(最常见)
在网页浏览中我们常常涉及到用户登录,登录完毕之后服务端会返回一个cookie值存储到客户端(浏览器)。这个cookie值相当于一个令牌,拿着这张令牌就等同于证明了你是某个用户。
如果你的cookie值被窃取,那么攻击者很可能能够直接利用你的这张令牌不用密码就登录你的账户。
2. 劫持流量实现恶意跳转——利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
3. 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
4. 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
5. 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
xss漏洞防御方式:
1、代码层面
输入过滤、输出编码(转义);配置Httponly头
(如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息)
htmlspecialchars()
- & (和号)成为 &
- " (双引号)成为 "
- ' (单引号)成为 '
- < (小于)成为 <
- > (大于)成为 >
- ENT_COMPAT - 默认。仅编码双引号。
- ENT_QUOTES - 编码双引号和单引号。
- ENT_NOQUOTES - 不编码任何引号。
2、架构层面
部署安全设备,例如wAF和IDS
3、业务层面
控制客户端输入规则:控制输入的长度,检测输入的合法性