Web开发安全-防御者篇 | 青训营笔记

131 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 10 天

本堂课重点内容

本堂课分别从攻击者和防御者两个角色出发,讲解了Web开发时存在的安全问题和防范措施,本篇文章主要记录了Web开发的防御技术。

Web开发安全——防御篇

  1. 跨站脚本攻击XSS防御
  • 原则:永远不要信任用户提交内容,不能直接转换成DOM而是转换成字符串
  • 前端主流框架都是默认防御XSS攻击的,也有工具:google-closure-library
  • 服务端(Node)使用DOMPurify
  • 如果非要动态生成DOM
    • new一个DOM的时候一定要对string进行转义
    • 扫描svg图片
    • 尽量不允许用户自定义跳转行为
  • 内容安全策略CSP(Content Security Policy)
    • 基于同源策略:协议、域名、端口都相同

    • 由开发者定义哪些源是安全的,安全源脚本可以执行,非安全源的抛出错误

    • 服务器响应头部

      Content-Security-Policy: script-src 'self' https://domain.com

    • 浏览器的meta

      <meta http- equiv="Content-Security-Policy" content="script-src self">

  1. CSRF的防御
  • 原则:限制请求来源 => 限制伪造请求
  • Origin + Referrer 形式
  • 校验token,token应该设置有效期
  • iframe攻击:http响应头 ,X-Frame-Options: DENY(不能加载iframe)/ SAMEORIGIN(必须同源)
  • anti-pattern:不能将GET、POST写成同一个
  • SameSite Cookie:“我页面的Cookie只能为我所用”,从根源解决
    • 限制条件:Cookie domain属性和当前页面域名是否匹配

    • 第一方Cookie ✔;第三方Cookie ✘

    • 依赖第三方Cookie服务怎么办

      Set -Cookie: SameS ite=None; Secure;

  • 从node层面讲:生成中间件,专门防御CSRF
  1. Injection
  • 找到项目中查询SQL的地方,使用prepared statement
  • 最小权限原则
  • 建立白名单
  • 对URL类型参数进行协议、域名、ip的限制
  1. DoS
  • 基于正则:避免贪婪匹配;使用代码扫描工具,进行正则性能测试;拒绝用户使用的正则
  • 防御关键:流量治理、快速扩容、非核心服务降级
  1. 传输层
  • 防御中间人:使用https
  • https特点:可靠(TLS加密层)、完整(MAC验证)、不可抵赖性(数字签名)
  • HSTS 将http主动升级成https,需要先有一次https请求
  1. SRI

个人总结

正所谓“防人之心不可无”,开发者在开发时要留个心眼,安全无小事,使用第三方依赖也可能会带来漏洞。另外,黑客的攻击技术也是在不断成长的,为了保护我们自己的技术成果和客户隐私,我们也要不断学习和成长。

老师推荐课后读物

SameSite 那些事 Amazon.com: Web Application Security: Exploitation and Countermeasures for Modern Web Applications