前端安全

被动攻击

被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻 击模式。在被动攻击过程中,攻击者不直接对目标Web 应用访问发起攻击

主动攻击

主动攻击(active attack)是指攻击者通过直接访问 Web 应用, 把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的 资源进行攻击,因此攻击者需要能够访问到那些资源

XSS

概念

Cross-Site Scripting,跨站脚本攻击

是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进 行的一种攻击

类型

  1. 反射型

    xss攻击代码在url中,作为输入代码提交到服务器,服务器解析后响应给浏览器,最后浏览器执行这段xss代码

  2. 存储型

    xss代码,存储在服务器

  3. 基于DOM的XSS

    依靠浏览器的dom解析,不与服务器交互

防御

xss本质是'html注入',用户的输入数据被当成html代码的一部分来执行

  1. 输入过滤

    用户输入、url参数、post请求参数、ajax

  2. 输出编码

    在HTML标签或属性中输出数据,使用HTMLEncode,将字符转化为html实体字符。通常转化& < > " ' / 这几个字符。

    在Script标签或事件中输出数据,使用JavaScriptEncode,使用转义符 \ 对特殊字符转义。除了数字和字母,对小于127的字符编码使用\xHH表示,对大于127的字符用Unicode表示。

  3. 其他

    将cookie设置为Http-only,js脚本将无法读取cookie

    CSP 内容安全策略,本质建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行

    • 设置HTTP Header的Content-security-Policy

      • 只允许加载本站资源

        Content-Security-Policy: default-src ‘self’
        
      • 图片只允许加载 HTTPS 协议

        Content-Security-Policy: img-src https://*
        
      • 允许加载任何来源框架

        Content-Security-Policy: child-src 'none'
        

CSRF

概念

Cross-Site Request Forgeries,跨站点请求伪造

攻击 者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信 息或设定信息等某些状态更新,属于被动攻击

步骤

  1. 受害者登录受信任网站A,并在本地生成Cookie
  2. 受害者访问危险网站B, 网站B中发送请求给网站A,请求会自动带上Cookie

防御

  1. 加入验证码(因为CSRF攻击往往在受害者不知情的时候成功)

  2. 尽量使用POST请求

  3. 验证请求首部字段Referer

    首部字段 Referer 会告知服务器请求的原始资源的 URI,验证Referer字段以确定发出的请求是否是从本站点发出的,若不是则拒绝

    通常网站的页面与页面之间有一定的逻辑联系,例如想要发送登录的请求example.com/api/login时,通常用户在登录的页面example.com/login下。那么我们只需要验证请求的Referer是否为example.com/login即可

    缺陷:某些情况下浏览器不会发送Referer,并且Referer可能被篡改

  4. Anti CSRF Token

    CSRF能够成功的原因是,攻击方可以完全伪造客户的请求,因为用户的信息存放在cookie中

    Toker是一个随机数,同时存放在表单和用户cookie中,通过在form表单或头信息中传递token,发送请求后服务器对请求实体的token和cookie中的token进行对比,并且验证正确后会销毁