第十一周学习总结
知识点总结
安全架构
常见攻击
XSS 攻击
通过服务器攻击其他用户
XSS 攻击防御手段
消毒:XSS 攻击者一般都是通过在请求中嵌入恶意脚本达到攻击目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些 HTML 危险字符转义,如“>”转义为“>”、“<”转义为“<”等,就可以防止大部分攻击。为了避免对不必要的内容错误转义,如“3<5”中的“<”,需要进行文本匹配后再转义,如“<img src=”这样的上下文中“<”才转义。事实上,消毒几乎是所有网站最必备的 XSS 防攻击手段。
SQL 注入攻击
获取数据库表结构信息的手段
开源:如果网站采用开源软件搭建,如用 Discuz! 搭建论坛网站,那么网站数据库结构就是公开的,攻击者可以直接获得。
错误回显:如果网站开启错误回显,攻击者故意构造非法参数,服务端异常信息会输出到浏览器端,为攻击猜测数据库表结构提供了便利。
盲注:网站关闭错误回显,攻击者根据页面变化情况判断 SQL 语句的执行情况,据此猜测数据库表结构,此种方式攻击难度较大。
注入攻击防御手段
消毒:和防 XSS 攻击一样,请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹配,过滤请求数据中可能注入的 SQL 文。如“drop table”、“\b(?:update\b.?\bset|delete\b\W?\bfrom)\b”等。
SQL 预编译参数绑定:使用预编译手段,绑定参数是最好的防 SQL 注入方法。目前许多数据访问层框架,如 myBatis,Hibernate 等,都实现 SQL 预编译和参数绑定,攻击者的恶意 SQL 会被当做 SQL 的参数,而不是 SQL 命令被执行。
CSRF 攻击
CSRF 攻击防御手段
表单 Token:CSRF 是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单 Token 就是阻止攻击者获得所有请求参数的可能,在页面表单中增加一个随机数 Token,每次请求的 Token 都不相同,请求提交后检查 Token 的值是否正确以确定请求提交者是否合法。
验证码:相对说来,验证码则更加简单有效,即请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。但是输入验证码是一个糟糕的用户体验,所以必要的时候才使用,如支付交易等关键页面。
Referer check:HTTP 请求头的 referer 域中记录着请求来源,可通过检查请求来源,验证其是否合法。但是该方法有一定局限性,referer 也并不一定总能得到。
其他需要关注的攻击和漏洞
Error Code:也称作错误回显,许多 Web 服务器默认是打开异常信息输出的,即服务器端未处理的异常堆栈信息会直接输出到客户端浏览器,这种方式虽然对程序调试和错误报告有好处,但同时也给黑客造成可乘之机。通过故意制造非法输入,使系统运行时出错,获得异常信息,从而寻找系统漏洞进行攻击。防御手段也很简单,通过配置 Web 服务器参数,跳转 500 页面(HTTP 响应码 500 表示服务器内部错误)到专门的错误页面即可,这个功能 Web 应用常用的 MVC 框架也可以做到。
HTML 注释:为了程序调试方便或其他不恰当的原因,有的时候程序开发人员会在 PHP、JSP 等服务器页面程序中使用 HTML 注释语法进行程序注释,这些 HTML 注释就会显示在客户端浏览器,给黑客造成攻击便利。程序最终发布前需要进行代码 review 或自动扫描,避免 HTML 注释漏洞。
文件上传:一般网站都会有文件上传功能,设置头像、分享视频、上传附件等。如果上传的是可执行的程序,并通过该程序获得服务器端命令执行能力,那么攻击者几乎可以在服务器上为所欲为,并以此为跳板攻击集群环境的其他机器。最有效的防御手段是设置上传文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等手段,保护服务器免受上传文件攻击。
路径遍历:攻击者在请求的 URL 中使用相对路径,遍历系统未开放的目录和文件。防御方法主要是将 JavaScript、CSS 等资源文件独立服务器、独立域名,其他文件不使用静态 URL 访问,动态参数不包含文件路径信息。
WEB 应用防火墙
一个单独的类似网关的模块
通过管道和各种正则,识别和处理请求中的异常请求
开源的 web 应用防火墙:modSecurity,能够通过正则识别到大部分的攻击。
采用处理逻辑和规则集合分离的架构模式
处理逻辑负责请求和响应的拦截过滤,规则加载执行等功能
规则结合则负责对具体的攻击的规则定义,识别,防御策略等功能
处理逻辑比较稳定,规则集合需要不断针对漏洞进行升级,这是一种可扩展的架构设计
三种加密方式
单向散列加密
不需要知道具体的明文是什么, 只需要验证是否一致
比如 Md5
对称加密
非对称加密
密钥安全管理与加解密服务系统架构
垃圾邮件
贝叶斯分类算法
布隆过滤器黑名单
风险控制
规则引擎
机器学习
高可用系统如何度量
可用性指标
网站年度可用性指标=(1-网站不可用时间/年度总时间)×100%
网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点
故障分管理
故障处理流程及考核
引起故障的原因
硬件故障
软件 bug
系统发布
并发压力
网络攻击
外部灾害
高可用系统的架构
解耦
高内聚、低耦合的组件设计原则
面向对象基本设计原则
面向对象设计模式
领域驱动设计建模
隔离
业务与子系统隔离
微服务与中台架构
生产者消费者隔离
虚拟机与容器隔离
异步
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
备份
集群设计
数据库复制
CAP 原理
Failover(失效转移)
数据库主主失效转移
负载均衡失效转移
设计无状态的服务
幂等
在失效转移时, 要求动作时要幂等的
事务补偿
传统的 ACID
分布式事务的 BASE
通过执行业务逆操作,使得事务回滚到之前的状态
重试
多级调用时,上游调用者超时时间要大于下游调用者超时时间只和
熔断
当某个服务故障时,为了避免出现服务级联失效, 阻止对故障服务的调用
断路器的三种状态:关闭/打开/半开
限流
在高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处理能力,就会丢弃一部分的用户请求,保证整个系统可用,保证大部分用户是可以访问系统的。这样虽然有一部分用户的请求被丢弃,产生了部分不可用,但还是好过整个系统崩溃,所有的用户都不可用要好。
限流的几种算法
计数器算法(固定窗口,滑动窗口)
令牌桶算法
漏桶算法
计数器(固定窗口)算法
使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。
计数器(滑动窗口)算法
将时间周期分为 N 个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期。
令牌桶算法
以固定的速度向令牌桶中增加令牌,直到令牌桶满,请求到达时向令牌桶请求令牌,如获取到令牌则通过请求,否则触发限流策略。
漏桶算法
访问请求到达时直接放入漏桶,如当前容量已达到限流值,则进行丢弃。漏桶以固定的速率进行释放访问请求,直到漏桶为空。
自适应限流
没有提前的人工评估, 便没有提前的评估过时与人的评估疏漏/错误
实时自动评估 QPS
业务流量的不确定性与技术方案的自适应性天生一对!
降级
降级是对系统功能的限制, 在保证流量的前提下, 为了保证系统主要功能, 对系统低价值功能的限制
比如双十一时销售是高价值功能, 评价,收货等功能是低价值功能
异地多活
是为了解决外部异常的问题
评论