青训营笔记-web开发的安全之旅

78 阅读3分钟

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

1. 攻击篇

  • xss攻击:
    • 特点:
      1. 通常难以从ui上感知(暗地执行脚本)
      2. 窃取用户信息(cookie/token)
      3. 绘制ui(例如弹窗),诱骗用户点击/填写表单
    • stored XSS
      1. 恶意脚本本存在数据库中
      2. 用户访问页面,读取数据就会被攻击
      3. 危害最大,对全部用户可见
    • Reflected xss
      1. 不涉及数据库,
      2. 从url上攻击
    • DOM-based xss
      1. 不需要服务器参与
      2. 恶意攻击的发起+执行,全在浏览器完成
    • Mutation-based xss
      1. 利用浏览器渲染DOM的特性(独特优化)
      2. 不同浏览器,会有区别(按浏览器进行攻击)
  • Cross-site request forgery (CSRF)攻击:
    • 特点:

      1. 在用户不知情的前提下
      2. 利用用户权限(cookie)
      3. 构造指定http请求,窃取或修改用户敏感信息
    • CSRF-GET/POST请求

      攻击者只需要构造GET请求按钮、POST请求表单即可。

    • injection攻击:

      1. 通常直接在请求体中写SQL参数或者SQL命令,已达到清除数据库、修改数据的目的。
      2. 不仅可以用于SQL服务端,在CLI脚手架、OS命令行等都可以运用。
      3. SSRF(Server-Side Request Forgery)服务端伪造请求,严格来说不算注入,但原理相似。
    • SSRF:

      1. 请求【用户自定义】的callback url
      2. webserver通常有内网访问权限
    • Denial of Service(DOS) 通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应

2. 防御篇

  • xss

    1. 永远不信任用户提交的内容,
    2. 不要将用户提交的内容直接转换成dom
    3. 前端主流框架默认防御xss
    4. google-closure-library
    5. 服务端(node)
    6. DOMPurify
    • 同源请求策略:
      要求协议,域名,端口号与服务端一致
    • CSP:
      1. 哪些源(域名)被认为是安全的
      2. 来自安全源的脚本可以执行,否则直接抛错
      3. 对eval+inline script说no
    • csrf:
      • if伪造请求===异常来源
      • then 限制请求来源→限制伪造请求
      • origin 同源请求中,get+head不发送
      • referer
    • csrf-token防护
      •   除了origin+referrer其他判断【请求来自于合法来源】的方式
        
      •   if(请求来自合法页面)
        
      •   then(服务器接受过页面请求)
        
      •   then(服务器可以标识)
        
    • csrf防护
      •   避免GET接口和POST接口合并等偷懒行为
        
      •   防护SameSite Cookie信息泄露,SameSite COokie依赖于第三方的Cookie请求,需要允许第三方域名采集Cookie
        
      •   防御CSRF需要注意逐级实施加权限制
        
  • Inject Protection

  • SQL防护

    • 最小原则:避免使用sudo || root 命令
    • 建立ip白名单+过滤,拒绝异常rm操作
    • 对URL类型参数、域名、IP等限制
    • 拒绝访问内网
  • 防范DoS攻击:

    • Regex DoS

      • 减少允许用户使用正则表达式请求
      • 增加校验, 对代码做扫描 +正则性能测试
    • Logical-DoS

      • 有些case,只有在请求量大道一定之后,才会体现
      • 分析代码的性能瓶颈:同步调用、串行逻辑、CPU密集操作
      • 限流
    • DDoS

      • 过滤:负载均衡、API网关
      • 抗量:CDN、快速扩容、 非核心服务降级备战
    • 中间人防御

      • HTTPS特性: 可靠性-明文加密,完整性:MAC验证;不可抵赖性-数字签名

      • HTTPS加密:在三次握手时进行hash加密,利用公钥和证书进行数字签名校验。

      • 将HTTP主动升级到HTTPS:需要之前要有一次HTTPS访问

      • 当静态资源被劫持篡改了,可以运用SRI对资源做hash验证。

结尾:

  • 安全无小事
  • 使用的依赖(npm package ,甚至是nodejs)可能成为最薄弱的一环
  • let-pad事件
  • eslint-scope事件
  • event-stream事件
  • 保持学习心态