Web 开发的安全之旅|青训营笔记

66 阅读2分钟

这是我参与【第五届青训营】笔记创作的第十一天。
主要从攻击、防御两个视角,简要介绍前端范畴内常见的安全问题,包括 XSS、CSRF、SQL 注入、DOS 等。

安全问题很常见,会危害到用户、公司、程序员等。

攻击

XSS:攻击者通过某种方式把恶意脚本注入。

XSS利用了 程序员盲目信任用户的提交内容+前端工程师直接将代码转化
XSS特点:

  1. 通常难以从UI上感知(暗地里执行脚本);
  2. 窃取用户信息(cookie/token);
  3. 绘制UI(例如弹窗),诱惑用户点击/填写表单。

Stored XSS

  • 恶意脚本被存在于数据库中
  • 访问页面->读数据==被攻击
  • 危害最大,对全部用户可见

Reflected XSS

  • 不涉及数据库
  • 从URL上攻击

DOM-based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,全在浏览器完成

Reflected XSS 和 DOM-based XSS 的区别:完成注入脚本的地方不同,前者在服务器完成,后者全在浏览器。

Mutation-based XSS

  • 利用了浏览器渲染DOM的特性(独特优化)
  • 不同浏览器会有区别(按浏览器进行攻击)
CSRF:
  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息
Injection(注入攻击)

SQL Injection(最常见)

DoS

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而导致雪崩效应。

中间人攻击
  • 明文传输
  • 服务器和浏览器信息篡改不可知
  • 对方身份未验明

防御

永远不信任用户提交的内容,不要将用户提交的内容转化为DOM

XSS————现成工具
前端: 主流框架默认防御XSS、google-closure-library
服务端: DOMPurify

CSP:安全脚本直接执行,否则报错
CSRF的防御
避免用户信息被携带:SameSite Cookie

Injection beyond SQL :
最小权限原则
建立允许名单 + 过滤
对URL类型参数进行协议、域名、ip等限制

HTTPS的一些特性:可靠性、完整性、不可抵赖性