架构师训练营 No.11 周总结
安全架构
1、基础设施安全
服务器、操作系统都要用正规的高质量的,安装杀毒软件防火墙,使用攻击检测系统
2、应用系统安全
XSS攻击
防御思路:对输入(和URL参数)进行过滤,对输出进行编码。
SQL注入
获取数据库信息手段:开源系统、错误回显、盲注。
防御思路:请求参数过滤“消毒”,预编译SQL绑定参数方式,规避sql注入攻击。
CSRF攻击
攻击手段:伪造请求。
防御思路:①在filter中验证HTTP Referer字段,②在请求地址中添加token并验证,③在HTTP头中自定义属性并验证
其他需关注的漏洞
错误回显
HTML注释
文件上传
防御思路:①文件上传的目录设置为不可执行 ②判断文件类型 ③使用随机数改写文件名和文件路径 ④单独设置文件服务器的域名 ⑥在客户端和服务器端对用户上传的文件名和文件路径等项目进行双重验证 ⑦服务器端添加白名单过滤 ⑧对%00截断符进行检测 ⑨对HTTP包头的content-type也和上传文件的大小进行检查。
路径遍历
防御思路:权限控制,谨慎处理传向文件系统API的参数,净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
数据保密安全
存储安全:存在在可靠的设备,实时,定时备份
保存安全:重要的信息加密存储
传输安全:防止数据窃取和数据篡改
①重要数据进行加密传输
②非重要数据进行签名
③Token验证状态
防重放机制:防止别有用心的人获取到请求地址,然后原封不动的连续重复请求,导致系统阻塞和数据库负载,需要有防重放机制。
Web应用防火墙
开源Web应用防火墙ModSecurity
ModSecurity是一个开源的跨平台Web应用程序防火墙(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs开发。作为WAF产品,ModSecurity专门关注HTTP流量,当发出HTTP请求时,ModSecurity检查请求的所有部分,如果请求是恶意的,它会被阻止和记录。
主要功能:
SQL Injection (SQLi):阻止SQL注入
Cross Site Scripting (XSS):阻止跨站脚本攻击
Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
PHP Code Injectiod:阻止PHP代码注入
HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
HTTPoxy:阻止利用远程代理感染漏洞进行攻击
Shellshock:阻止利用Shellshock漏洞进行攻击
Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
Scanner Detection:阻止黑客扫描网站Metadata
网站安全漏洞扫描
漏洞扫描是指基于网络、主机、应用、数据库漏洞,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测(渗透攻击)行为。
主要技术:
主机扫描:
确定在目标网络上的主机是否在线。
端口扫描:
发现远程主机开放的端口以及服务。
OS识别技术:
根据信息和协议栈判别操作系统。
漏洞检测数据采集技术:
按照网络、系统、数据库进行扫描。
5.智能端口识别、多重服务检测、安全优化扫描、系统渗透扫描
6.多种数据库自动化检查技术,数据库实例发现技术;
7.多种DBMS的密码生成技术,提供口令爆破库,实现快速的弱口令检测方法。
信息加密技术及密钥安全管理
单向散列加密
对称加密
非对称加密
密钥安全管理与加解密服务系统架构
反垃圾邮件
贝叶斯分类算术
例子,现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个球,且是红球,问这个红球是来自容器 A 的概率是多少?
假设已经抽出红球为事件 A,选中容器 A 为事件 B,则有:P(A) = 8/20,P(B) = 1/2,P(A|B) = 7/10,按照公式,则有:P(B|A) = P(B) P(A|B) / P(A) = (1/2) (7/10) / (8/20) = 0.875
布隆过滤黑名单
电子商务风险控制
规则引擎
机器学习
高可用系统
可用性指标
业界用 N 个9 来量化可用性, 最常说的就是类似 “4个9(也就是99.99%)” 的可用性
故障分管理
故障处理流程及考核
引起故障的原因
硬件故障
软件BUG
系统发布
并发压力
网络攻击
外部灾害
高可用系统的架构
解耦
高内聚、低耦合的组件设计原则
面向对象基本设计原则
面向对象设计模式
领域驱动设计建模
隔离
业务与子系统隔离
微服务与中台架构
生产者消费者隔离
虚拟机与容器隔离
异步
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
备份
集群设计
数据库复制(CAP原理)
Failover-失效转移
幂等
事务补偿
重试
熔断
限流
自适应限流
降级
异地多活
高可用系统的运维
发布
自动化测试
自动化部署
持续部署
预发布验证
代码版本控制
自动化发布
灰度发布
网站运行监控
监控数据采集
用户行为日志收集
服务器性能监控
业务运行数据报告
监控管理
监控系统架构
高可用的价值观
保持简单
目标明确
价值回归
故障案例分析
故障1-Log
故障现象:某应用服务器集群发布后不久出现多台服务器相继告警,硬盘可用空间低于警戒值,并很快有服务器宕机。登录线上服务器分析发现 log文件迅速暴增。
原因分析:开发人员将log输出配置为Debug,产生大量日志导致。
经验教训:
1、log配置级别至少为Warn;代码检查log输出调用符合其真实日志级别。
2、开源第三方组件也有不恰当输出太多Error日志,需要关闭些第三方日志输出,至于那些,只有遇到才知道。
3、应用程序自己的日志输出和第三方日志要分别配置。
故障2-Sql
故障现象:某应用发布后,数据库Load居高不下,远超正常水平,持续报警。
原因分析:检查数据库,发现某条SQL引起,检查SQL索引正常;继续检查,发现这条SQL执行频率非常高;追查发现改SQL被首页调用,而首页是被访问频率最高页。
经验教训:首页不应访问数据库,可以用缓存或搜索引擎或静态页面。
故障3-Lock
故障4-Cache
故障5-应用依赖,启动先后
故障6-大文件
故障7-生产环境规范
故障8-Cache;Code Review
故障9-NULL
评论