xss跨站脚本攻击
什么是XSS
跨站脚本攻击 (Cross Site Script),缩写CSS,为了和层叠样式表(Cascading Style Sheet,CSS)区别,在安全领域叫做“XSS”,是一种Web应用程序的漏洞。
原理:
攻击者向有XSS 漏洞的网站中(web页面)插入恶意的JavaScript代码,当用户浏览该网站页面时,嵌入其中的代码就会自动执行,从而达到恶意攻击的用户目的。
XSS漏洞的危害
- 盗取用户Cookie
- 破坏页面结构
- 重定向到其它网站
- 传播蠕虫病毒。
XSS漏洞的分类
反射型 XSS (非持久型)
黑客**诱使用户“点击”**带有XSS代码的恶意链接,用户点击该恶意链接后向服务器发送请求,服务器处理后把带有 XSS 代码的数据返回到用户浏览器,浏览器解析这段带有 XSS 代码的数据后,最终造成 XSS 漏洞。这个过程就像一次反射,故称为反射型 XSS 漏洞。
存储型 XSS (持久型 XSS)
存储型XSS漏洞是因为服务器端将用户输入的恶意脚本没有通过任何验证就直接“存储”在数据库,并且每次通过调用数据库的方式,将该恶意脚本在没有被编码或转义的情况下将数据呈现在浏览器上
基于 DOM 的 XSS
此分类并非按照“数据是否保存在服务器端”来划分,从效果来看,DOM 式XSS 其实是一种特殊类型的反射型 XSS。通过修改页面的DOM节点形成的XSS(网页本身的 JavaScript也是可以改变 HTML)。相比前两种XSS漏洞,这里不需要使用服务器进行解析。
XSS Payload
-
传统测试方式
<script>alert('1')</script>
任意有输入功能的地方,使用上面代码尝试是否可以有如下的弹窗:
alert()(警告消息框)可替换为如下:
confirm()(确认消息框)
如
<script>confirm("单机“确认”继续,单击“取消”停止")</script>
prompt()(提示消息框)
如<script>prompt("您的名字?")</script>
-
JavaScript事件:
onload、onerror、onclick、onmouseover
<body onload=alert(‘xss’)> //页面加载完毕后立即发生 <div onclick ="alert('xss’)”> //元素被点击时发生 <img src=# onerror=alert(‘xss’)> //数据加载期间发生错误时执行 <div onmouseenter="alert('xss')"> //事件在鼠标指针移动到元素上时触发
-
Javascript URL
<a href="javascript:alert(‘test’)">登录</a>
-
获取cookie:
只需将弹窗内容改为document.cookie即可。
例:
<script>alert(document.cookie)</script>
Xss漏洞绕过姿势
-
大小写转换
-
双写绕过
-
利用JavaScript事件弹窗
-
1、使用事件
2、结合程序执行顺序即危险字符删除顺序,进行双写
-
转义字符
把Xss语句转换成16进制
-
闭合标签
Xss漏洞防御
-
1、HTML实体。
对用户输入的参数进行html编码。
如php中的htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
& -> & < -> < > -> > " -> "
-
2、使用XSS Filter。
-
3、白名单和黑名单结合过滤。
-
4、设置会话Cookie的HTTP Only属性,客户端的JS脚本便不能获取Cookie信息了。
-
5、输入内容长度控制。