后端基础

《架构师训练营》安全架构&高可用架构

2020-08-26  本文已影响0人  anOnion

极客时间《架构师训练营》第十一周学习笔记

安全架构

XSS 攻击

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

XSS 注入的方法不一而足,简单列举几个常见的方法:

预防攻击也有一些常用的套路:

SQL 注入

所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令

SQL 注入攻击的工作方式是提前终止目标 SQL 文本的字符串,然后追加一个新的命令,主要有两种形式:

防范 SQL 注入攻击的方法:

  1. 普通用户与系统管理员用户的权限要有严格的区分。
  2. 强迫使用预编译参数绑
  3. 加强对用户输入的验证,使用过滤器过滤常见 SQL 注入脚本
  4. 使用专业的漏洞扫描工具来寻找可能被攻击的点

CSRF 攻击

Cross-site request forgery, 跨站请求伪造。是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起跨站请求。

CSRF 攻击攻击原理及过程如下:

  1. 用户 C 打开浏览器,访问受信任网站 A,输入用户名和密码请求登录网站 A
  2. 在用户信息通过验证后,网站 A 产生 Cookie 信息并返回给浏览器,此时用户登录网站 A 成功,可以正常发送请求到网站 A
  3. 用户未退出网站 A 之前,在同一浏览器中,打开一个 tab 页访问网站 B
  4. 网站 B 接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点 A

防御 CSRF 手段:

  1. 验证 HTTP Referer 字段
  2. 在请求地址中添加 token 并验证
  3. 在 HTTP 头中自定义属性并验证

其他攻击和漏洞

信息加密

单向散列

单项散列加密的特性是:

实际应用:

对称加密

对称加密就是最传统的加密计算:加密和解密使用同一个密钥。加密解密过程:

  1. 明文->密钥加密->密文
  2. 密文->密钥解密->明文

对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高,通常在消息发送方需要加密大量数据时使用。由于加解密使用的是同一个密钥,因此如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

非对称加密

对称加密算法又称现代加密算法。非对称加密算法需要一对密钥:公开密钥和私有密。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。算法强度复杂,安全性依赖于算法与密钥,但是加密解密速度慢。常用的场景有:登陆认证、数字签名、数字证书等等。

高可用系统的度量

可用性指标

业界通常用多少个 9 来衡量网站的可用性,如是 4 个 9,即服务 99.99% 可用,只有 0.01% 的时间不可用,也就是一年中只有大约 53 分钟不可用。

故障分类管理

故障分类管理通常与考评挂钩,通过故障等级确定严重性,并对当事人按一定权重扣分,扣分多了就直接滚蛋

分类 描述 权重
事故及故障 严重故障,网站整体不可用 100
A 类故障 网站访问不顺畅,或核心功能不可用 20
B 类故障 非核心功能不可用,或核心功能少数用户不可用 5
C 类故障 以上故障以外的其他故障 1

高可用架构

见本周作业 1

运维

发布

网站需要保证 7*24 高可用运行,同时网站又需要不断的发布新功能。
不管发布内容大小都需要在服务器上关闭原有的应用,然后重新部署启动新的应用,整个过程还要求不影响用户的使用。一般的发布流程:

发布

自动化测试

在软件测试中,测试自动化(英语:Test automation)是一种测试方法,使用特定的软件,去控制测试流程,并比较实际的结果与预期结果之间的差异。通过将测试自动化,可以让正式的测试过程中的必要测试,可以反复进行;通过这种方法,也可以将难以手动进行的测试,交由软件来做。

自动化测试主要指四个方向:

适合适合自动化测试的场景:

常见的自动化测试工具有:

自动化部署

自动化部署就是部署过程中所有的操作全部自动化,无需人工干预,常见的工具有 Gitlab、Jenkins、TeamCity 等等。下面以 Jenkins 为例,简单介绍一介绍一下常见的步骤:

  1. 开发人员于 Git 等源码管理工具上提到 MR
  2. Git 通过 Webhook 或是其他插件触发 Jenkins 拉取源码至其工作空间
  3. Jenkins 构建源码,失败则通知开发人员
  4. 构建成功,则执行单元测试或是其他测试
  5. 测试不过则通知开发人
  6. 测试通过则生成发布包
  7. 再将发布包发布到各个 Web 服务器上
自动化部署

持续部署三步走:

  1. 持续集成:允许工程师随时向公共分支提交代码,并立即进行自动化测试。

  2. 持续交付:除了跑单元测试及软件打包,持续交付机制会将软件部署到各种测试环境中

  3. 持续部署:代码在没有人工干预的情况下被测试、构建、部署并推送到生产环境

其他

上一篇 下一篇

猜你喜欢

热点阅读