写点什么

第 11 周 怎么又翻车了???

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

安全架构

XSS 攻击


XSS 攻击防御手段

消毒:XSS 攻击者一般都是通过在请求中嵌入恶意脚本达到攻击目的,这些脚本是一般 用户输入中不使用的,如果进行过滤和消毒处理,即对某些 HTML 危险字符转义。

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

ModSecurity 是一个开源的 Web 应用防火墙,探测攻击并保护 Web 应用程序,既可以 嵌入到 Web 应用服务器中,也可以作为一个独立的应用程序启动。ModSecurity 最早只 是 Apache 的一个模块,现在已经有 Java、.NET 多个版本,并支持 Nginx。


ModSecurity 采用处理逻辑与规则集合分离的架构模式。处理逻辑负责请求和响应的拦 截过滤,规则加载执行等功能。而规则集合则负责对具体的攻击的规则定义、模式识别、 防御策略等功能。处理逻辑比较稳定,规则集合需要不断针对漏洞进行升级,这是一种 可扩展的架构设计。

网站安全漏洞扫描

网站安全漏洞扫描工具是根据内置规则,模拟黑客攻击行为,用以发现网站安全漏洞的 工具。许多大型网站的安全团队都有自己开发的漏洞扫描工具,不定期的对网站的服务 器进行扫描,查漏补缺。


信息加密技术及密钥安全管理

通常,为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术可 分为三类:单项散列加密,对称加密,非对称加密。

单向散列加密

对称加密

非对称加密



高可用系统的度量

可用性指标

  • 网站年度可用性指标=(1-网站不可用时间/年度总时间)×100%

  • 网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点

引起故障的原因

  • 硬件故障

  • 软件 bug

  • 系统发布

  • 并发压力

  • 网络攻击

  • 外部灾害


高可用系统的架构

解耦

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

  • 面向对象基本设计原则

  • 面向对象设计模式

  • 领域驱动设计建模

隔离

  • 业务与子系统隔离

  • 微服务与中台架构

  • 生产者消费者隔离

  • 虚拟机与容器隔离

异步

  • 多线程编程

  • 反应式编程

  • 异步通信网络编程

  • 事件驱动异步架构

备份

  • 集群设计

  • 数据库复制

Failover(失效转移)

  • 数据库主主失效转移

  • 负载均衡失效转移

幂等

服务重复调用有时候是无法避免的,必须保证服务重复调用和调用一次产生的结果相同, 即服务具有幂等性。

事务补偿

  • 传统事务的 ACID

  • 分布式事务的 BASE

  • 事务补偿:通过执行业务逻辑逆操作,使事务回滚到事务前状态

重试

远程服务可能会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者 可以通过重试的方式修复单次调用的故障。

熔断

当某个服务出现故障,响应延迟或者失败率增加,继续调用这个服务会导致调用者请求 阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务 的调用。

限流

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

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

  • 令牌桶算法

  • 漏桶算法

降级

有一些系统功能是非核心的,但是它也给系统产生了非常大的压力,比如说在电商系统 中有确认收货这个功能,即便我们不去确认收货,系统也会超时自动确认收货。


但实际上确认收货这个操作是一个非常重的操作,因为它会对数据库产生很大的压力: 它要进行更改订单状态,完成支付确认,并进行评价等一系列操作。如果在系统高并发 的时候去完成这些操作,那么会对系统雪上加霜,使系统的处理能力更加恶化。


解决办法就是在系统高并发的时候,比如说像淘宝双 11 的时候,当天可能整天系统都处 于一种极限的高并发访问压力之下,这时候就可以将确认收货、评价这些非核心的功能 关闭,将宝贵的系统资源留下来,给正在购物的人,让他们去完成交易。

异地多活

如果整个数据中心都不可用,比如说数据中心所在城市遭遇了地震,机房遭遇了火灾或 者停电,这样的话,不管我们的设计和系统多么的高可用,系统依然是不可用的。


为了解决这个问题,同时也为了提高系统的处理能力和改善用户体验,很多大型互联网 应用都采用了异地多活的多机房架构策略,也就是说将数据中心分布在多个不同地点的 机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问,这样每 个机房都可以提供完整的系统服务,即使某一个机房不可使用,系统也不会宕机,依然 保持可用。


异地多活的难点是数据一致。

高可用的价值观

  • 保持简单,使问题易于发现,快速解决。

  • 目标明确,解决特定环境下的具体问题。

  • 价值回归,成本收益要合理。


发布于: 2020 年 12 月 06 日阅读数: 24
用户头像

Pyr0man1ac

关注

还未添加个人签名 2019.06.24 加入

还未添加个人简介

评论

发布
暂无评论
第 11 周 怎么又翻车了???