写点什么

第十一周学习总结

用户头像
Meow
关注
发布于: 2020 年 12 月 06 日

知识点总结

安全架构

常见攻击

  • XSS 攻击

  1. 通过服务器攻击其他用户



XSS 攻击防御手段

消毒:XSS 攻击者一般都是通过在请求中嵌入恶意脚本达到攻击目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些 HTML 危险字符转义,如“>”转义为“&gt”、“<”转义为“&lt”等,就可以防止大部分攻击。为了避免对不必要的内容错误转义,如“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

  • 系统发布

  • 并发压力

  • 网络攻击

  • 外部灾害


高可用系统的架构

  • 解耦

  1. 高内聚、低耦合的组件设计原则

  2. 面向对象基本设计原则

  3. 面向对象设计模式

  4. 领域驱动设计建模


  • 隔离

  1. 业务与子系统隔离

  2. 微服务与中台架构

  3. 生产者消费者隔离

  4. 虚拟机与容器隔离


  • 异步

  1. 多线程编程

  2. 反应式编程

  3. 异步通信网络编程

  4. 事件驱动异步架构


  • 备份

  1. 集群设计

  2. 数据库复制

  3. CAP 原理


  • Failover(失效转移)

  1. 数据库主主失效转移

  2. 负载均衡失效转移

  3. 设计无状态的服务


  • 幂等

  1. 在失效转移时, 要求动作时要幂等的

  • 事务补偿

  1. 传统的 ACID

  2. 分布式事务的 BASE

  3. 通过执行业务逆操作,使得事务回滚到之前的状态

  • 重试

  1. 多级调用时,上游调用者超时时间要大于下游调用者超时时间只和

  • 熔断

  1. 当某个服务故障时,为了避免出现服务级联失效, 阻止对故障服务的调用

  2. 断路器的三种状态:关闭/打开/半开



  • 限流

在高并发场景下,如果系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护。限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处理能力,就会丢弃一部分的用户请求,保证整个系统可用,保证大部分用户是可以访问系统的。这样虽然有一部分用户的请求被丢弃,产生了部分不可用,但还是好过整个系统崩溃,所有的用户都不可用要好。


  • 限流的几种算法

  1. 计数器算法(固定窗口,滑动窗口)

  2. 令牌桶算法

  3. 漏桶算法


  • 计数器(固定窗口)算法

使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。


  • 计数器(滑动窗口)算法

将时间周期分为 N 个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期。


  • 令牌桶算法

以固定的速度向令牌桶中增加令牌,直到令牌桶满,请求到达时向令牌桶请求令牌,如获取到令牌则通过请求,否则触发限流策略。


  • 漏桶算法

访问请求到达时直接放入漏桶,如当前容量已达到限流值,则进行丢弃。漏桶以固定的速率进行释放访问请求,直到漏桶为空。


  • 自适应限流

没有提前的人工评估, 便没有提前的评估过时与人的评估疏漏/错误

  1. 实时自动评估 QPS

  2. 业务流量的不确定性与技术方案的自适应性天生一对!


  • 降级

  1. 降级是对系统功能的限制, 在保证流量的前提下, 为了保证系统主要功能, 对系统低价值功能的限制

  2. 比如双十一时销售是高价值功能, 评价,收货等功能是低价值功能

  • 异地多活

  1. 是为了解决外部异常的问题


用户头像

Meow

关注

还未添加个人签名 2018.05.09 加入

还未添加个人简介

评论

发布
暂无评论
第十一周学习总结