XSS攻击

一、什么是 XSS 攻击?
XSS 全称是 Cross Site Scripting (即跨站脚本),为了和 CSS 区分,故叫它XSS 。

  • 场景:目标网站的目标用户
  • 执行:由浏览器解释执行
  • 不被预期的的代码
    发生在目标网站的目标浏览器,当用户渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行时,XSS就发生了。

二、XSS类型

  1. 反射型XSS(非持久型XSS)
    XSS代码出现在URL中,作为输入调教到服务器,服务器解析后响应,在响应内容中返回到浏览器中执行。
    场景:
    XSS代码如下:

    
    

    提交如下代码

    http://www.foo.com/xss/reflect1.php?x=
    

    服务器解析时,echo就会完整第输出到响应体中,然后浏览器解析触发。

  2. 存储型XSS(持久型XSS)
    提交的XSS代码会存储在服务器中,下次请求目标页面时不用再提交XSS代码
    场景:常见的场景是留言评论区提交一段脚本代码,如果前后端没有做好转义的工作,那评论内容存到了数据
    库,在页面渲染过程中直接执行, 相当于执行一段未知逻辑的 JS 代码,是非常恐怖的。这就是存储型的
    XSS 攻击。

  3. DOM XSS
    DOM XSS的XSS代码不需要服务器解析响应,出发XSS靠浏览器的DOM解析,可以认为完全是客户端的事情。
    **场景:**WIFI路由器劫持或者本地恶意软件,盗取Cookie
    例:

    
    

    www.test.com/index.html#alert(document.cookie);
    

    cookie就被盗取了,当然这种方法太明显了,alert(document.cookie)部分应该为一段脚本,将cookie上传到黑客的浏览器。

三、危害

  • 窃取Cookie
  • 监听用户行为,比如输入账号密码后直接发送到黑客服务器
  • 修改 DOM 伪造登录表单
  • 在页面中生成浮窗广告
  • 删除目标文件、恶意篡改数据

四、防范措施
明白了三种XSS攻击的原理,我们能发现一个共同点: 都是让恶意脚本直接能在浏览器中执行。那么要防范它,就是要避免这些脚本代码的执行。
为了完成这一点,必须做到一个信念,两个利用。

  1. 千万不要相信任何用户的输入!
    无论是在前端和服务端,都要对用户的输入进行转码或者过滤。
    • 输入校验:长度、值类型、是否有特殊符号(<>)
    • 输出编码
  2. 利用 CSP
    CSP,即浏览器中的内容安全策略,它的核心思想就是服务器决定浏览器加载哪些资源,具体来说可以
    完成以下功能:
    • 限制其他域下的资源加载。
    • 禁止向其它域提交数据。
    • 提供上报机制,能帮助我们及时发现 XSS 攻击。
  3. 利用 HttpOnly
    很多 XSS 攻击脚本都是用来窃取Cookie, 而设置 Cookie 的 HttpOnly 属性后,JavaScript 便无法读取
    Cookie 的值。这样也能很好的防范 XSS 攻击。
    OWASP提供了不错的XSS防御方案

五、总结
XSS 攻击是指浏览器中执行恶意脚本, 然后拿到用户的信息进行操作。主要分为存储型、反射型和DOM型。防范的措施包括:
一个信念: 不要相信用户的输入,对输入内容转码或者过滤,让其不可执行。
两个利用: 利用 CSP,利用 Cookie 的 HttpOnly 属性。

参考文献:
《Web前端黑客技术揭秘》

你可能感兴趣的:(知识碎片,web安全,安全,xss)