Skip to content

XSS 攻击

xss 全称是 Cross Site Scripting(跨站脚本), 为了和 css 区分,故叫 xss

xss 攻击是指浏览器执行恶意脚本,从而拿到用户的信息进行操作

这些操作一般可以完成下面这些事情

  1. 窃取用户 cookie
  2. 监听用户行为,比如输入账号密码后发送到黑客服务器
  3. 修改 Dom 伪造登录表单
  4. 在页面生成浮窗广告

xss 攻击有三种方式

  • 存储型

    存储型的 xss 将脚本存储到了服务端的数据库,然后再客户端执行这些脚本,从而达到攻击的效果

    常见的场景是留言评论区提交一段代码,如果前后端没有做好转义的工作,那评论存到了数据库,在页面渲染过程中直接执行,相当于执行 一段 js 代码

  • 反射型

    反射型 xss 指的是恶意脚本作为网络请求一部分,比如

    bash
    http://baidu.com?q=<script>alert('1')</script>

    这样服务端会拿到 q 参数,然后将内容返回浏览器端,浏览器将这些内容作为 html 的一部分解析.发现是一个脚本直接执行

  • 文档型

    文档型的 xss 不会经过服务器,而是作为中间人的角色,在数据传输过程中劫持到网络数据包,然后修改里面 html 文档,这样劫持方式 包括 wifi 路由劫持或者本地恶意软件劫持等

防范方法:

主旨:防止攻击者提交恶意代码,防止浏览器执行恶意代码

  • 对数据进行严格的输入编码:

    • html 元素的编码、js 编码、css 编码、url 编码等;
    • 避免拼接 html,eg:Vue/React 技术栈,避免使用 v-html/dangerouslyHtml
  • CSP:http header,即 Content-Security-Policy,旧浏览器可以设置 X-XSS-Protection

    • default-src 'self':所有内容均来⾃站点的同⼀个源(不包括其⼦域名)
    • default-src 'self': *.trusted.com:允许内容来⾃信任的域名及其⼦域名 (域名不必须与 CSP 设置所在的域名相同)
    • default-src https://baidu.com:该服务器仅允许通过HTTPS⽅式并仅从lubai.com域名来访问⽂档
  • 输入验证:phone,url,电话号码,邮箱做校验判断

  • 开启浏览器的 XSS 防御:http only Cookie,禁止 js 读取 cookie 值,完成 xss 注入也无法窃取 cookie,eg:set-cookie,httponly

  • 验证码