xss攻击 | 青训营笔记

33 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

xss(3种)

跨站脚本攻击

  1. 反射型
  • 钓鱼网站窃取客户端上的cookies
  • 需要用户主动打开恶意的 URL 才能生效
  1. 存储型
  • XSS代码提交存储在服务器端(数据库,内存,文件系统等)只用提交一次 就可以感染多个用户
  • 目标用户访问该页面获取数据时,XSS代码会从服务器解析之后加载出来,返回到浏览器做正常的HTML和JS解析执行,XSS攻击就发生了。
  1. DOM型
  • 通过恶意脚本修改页面的 DOM 结构窃取用户数据或冒充用户

注意 DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞

预防:

  • 防止攻击者提交而恶意代码

    -- 在用户输入的过程中,过滤掉用户输入的恶劣代码,然后提交给后端,但是如果攻击者绕开前端请求,直接构造请求就不能预防了

    -- 转义html

  • 防止浏览器执行恶意代码

    • 在前端避免使用innerHTMLouterHTML,eval()等能把字符串作为代码运行的api

    • 纯前端渲染

      -- 先构造静态html,静态html中不包含与业务相关的数据 通过ajax加载业务数据,调用dom的api更新

      -- 在纯前端渲染中,我们会明确的告诉浏览器:下面要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等等。浏览器不会被轻易的被欺骗,执行预期外的代码了。

  • 避免内联事件和脚本

  • 输出内容长度限制

  • HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。

  • 验证码:防止脚本冒充用户提交危险操作。

  • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。