安全稳定 - 安全架构高可用
安全架构
Web 攻击与防护
XSS 攻击
诱导执行恶意脚本
存储型 Stored XSS Attacks
反射型 Reflected XSS Attacks
其他:DOM Based XSS
防御
危险的 html 进行转义和消毒
SQL 注入攻击
使用应用的漏洞, 生成恶意的 SQL
防御
使用 SQL 预编译参数绑定。
CSRF 攻击
跨站伪造请求,
防御
通过每次请求生成一个 token 值, 判断提交者是否合法
Referer check:HTTP 请求头的 referer 域中记录着请求来源。
ErrorCode
回显错误码
防御
报错时跳转指定错误页
HTML 注释
HTML 注释导致漏洞可以注入 js 代码
防御
代码扫描避免 html 注释漏洞
文件上传
对上传文件无检测,导致可以上传可执行文件,引发漏洞
防御
设置上传文件白名单, 只允许上传可靠文件类型
路径遍历
通过 URL 相对路径遍历服务器未开放的目录、文件
防御
是将 JavaScript、CSS 等资源文件独立服务器、独立域名,其他文件不使用静 态 URL 访问,动态参数不包含文件路径信息。 通过调整中间配置阻止访问。
Web 应用防火墙
WAF:
AWS 方案:
AWS WAF Security Automations
from https://aws.amazon.com/cn/solutions/implementations/aws-waf-security-automations/
Azure 方案:Azure Web Application Firewall
from https://docs.microsoft.com/en-us/azure/web-application-firewall/overview
支持 Oracle Cloud Infrastructure Web Application Firewall (WAF) Oracle EBS 部署方案
可以看到部署使用了内外网隔离, 在公网区域, 数据库区域部署 WAF
ModSecurity 是一个开源的 Web 应用防火墙
网站安全漏洞扫描
网站安全漏洞扫描工具是根据内置规则,模拟黑客攻击行为,用以发现网站安全漏洞的 工具。许多大型网站的安全团队都有自己开发的漏洞扫描工具,不定期的对网站的服务 器进行扫描,查漏补缺
加密与解密
单向散列加密
对称加密
非对称加密
密钥安全管理与加解密服务系统架构
也可以选择采用硬件加密策略
反垃圾与风控
贝叶斯分类算法
布隆过滤器黑名单
电商风控
账户风险: 包括账户被黑客盗用,恶意注册账号等几种情形。
买家风险: 买家恶意下单占用库存进行不正当竞争;黄牛利用促销抢购低价商品;此外还有 良品拒收,欺诈退款以及常见于 B2B 交易的虚假询盘等。
卖家风险:不良卖家进行恶意欺诈的行为,例如货不对板,虚假发货,炒作信用等,此外还 有发布违禁商品、侵权产品等。
交易风险: 信用卡盗刷,支付欺诈,洗钱套现等。
规则引擎
机器学习
高可用
可用性度量
可用性指标
使用停机时间判断可用性指标
from wiki https://en.wikipedia.org/wiki/High_availability
故障分级管理
故障处理流程考核
引起故障的原因
硬件故障
软件 BUG
系统发布
并发压力
网路攻击
外部灾难
提升可用性架构方案
解耦
高内聚,低耦合组件设计原则
面向对象基本设计原则
领域驱动设计建模
隔离
业务与子系统隔离
微服务与中台架构
生产者与消费者隔离
虚拟机与容器隔离
异步
多线程编程
反应式编程
异步通讯网络编程
事件驱动异步架构
备份
集群设计
数据库复制
CAP 原理
失效转移 Failover
数据库主主失效转移
负载均衡失效转移
关键是涉及无状态服务
幂等
服务的重复调用和调用一次的结果相同
事务补偿
传统事务 ACID
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
分布式事务 BASE
基本可用(Basic Availability)
软状态(Soft-state)
最终一致性(Eventual consistency)
通过事务的逆操作使得事务回滚到事务前的状态
重试
由于远程服务故障(线程阻塞,垃圾回收, 网络抖动)
上游超时时间要大于下游调用超时时间之和。
熔断
当服务出现故障时用断路器阻断对故障服务的调用
限流
计数器算法(固定窗口,滑动窗口)
令牌桶算法: 先拿到授权再进入
漏桶算法: 先放入再按照固定速率放行。
自适应限流
降级
系统高并发时关闭,非核心系统功能,将资源留给核心系统使用。
异地多活
数据中心分布在不同地点的机房中。
难点:数据一致性问题。
架构运维方案
发布
自动化测试
使用自动化测试脚本或工具完成测试
工具:Selenium
自动化部署
持续集成 工程师可以随时在分支提交代码进行自动化测试
持续交付 将软件部署到各种测试环境
持续部署 没有人工干预的情况下被测试, 构建, 部署到生产环境。
预发布验证
通过负载进行分流到预发布服务器, 验证新功能, 生产服务器保持原有版本。
代码版本控制
主干开发,分支发布:
分支开发,主干发布;
主干保持与生产环境一致, 分支进行开发 , 发布时打包不同的 tag,投产后如有如无问题, 合并到主干, 有问题, 从 TAG 迁出分支修复,后再次合并到主干。 (多分支开发)
自动化发布:
减少人处理过程中一些失误, 人员在此流程中进行审核, 如 QA, 安全, DBA 等流程人工的审核。
灰度发布:
针对大型网站, 将集群分为几个部分, 分阶段发布,防止发布问题导致大规模回滚
网站运行监控
不允许没有监控的系统上线
监控数据采集:
运行期监控,系统指标是否正常,如果收到报警能快速发现问题, 通过监控数据支持解决问题。
用户行为日志收集
服务器性能监控
业务运行数据报告
监控管理
报警
自动控制: 自动失效转移;自动扩容;自动限流
监控系统架构
Open-Falcon : http://open-falcon.org/
高可用的价值观
保持简单, 使得问题易于发现
目标明确, 解决特定环境下的具体问题
价值回归,成本收益要合理
高可用案例
日志级别设置
首页应为静态,不应访问数据库
锁操作要谨慎,不同场景使用不同锁对象
大规模使用缓存服务器情况下, 对缓存服务器谨慎操作防止缓存雪崩。
启动服务先后台服务,再前端服务, 关闭服务先前端服务,再后台服务。
针对不同文件类型,用途选用专用的服务器。
生产操作要规范,取得授权后方可操作。
code view, 尽量通过 mock 端模拟测试,避免注释代码进行测试。
对于程序入口检查,防止 null 值传入导致的异常。
参考及引用
架构师训练营作业-李智慧老师相关讲义
Photo by Brett Sayles from Pexels
评论