知识卡片

分层架构、C/S与B/S架构的脆弱性对比

普通读书笔记卡

内容

三种最传统的企业应用架构,脆弱性的根源各不相同。[[层次化风格]](分层架构)的脆弱性有两点:一是错误传播的单点性——只要某个底层出现错误(数据溢出、空指针、空对象等),整个系统就可能无法正常运行甚至给出错误结果,因为上层逻辑普遍建立在”下层可靠”这个隐含假设上;二是通信开销的代价——分层本身要求层与层之间引入通信机制,在面向对象设计中大量细粒度对象之间原本”直来直去”的方法调用,现在要逐层传递,性能因此下降,这正是分层带来的可维护性收益(第20章连接件嫉妒卡片中提到的”关注点分离”好处)所需要付出的代价。[[客户机/服务器风格与浏览器/服务器风格]]中的C/S架构脆弱性集中在客户端暴露面:因为业务逻辑和数据都要下发到客户端处理,客户端软件本身就面临被逆向分析、数据被截取的风险;传统二层C/S架构里客户端往往直接保存了用户名、密码等敏感信息去访问服务器数据,一旦系统联网、服务器端事实上就对所有互联网用户开放;此外C/S软件在数据安全性上还有天生弱点——数据分布在各个客户端,任何一台客户端所在物理环境的火灾、盗抢、地震、病毒都可能造成数据损失,这是纯粹架构层面无法弥补的分布式数据脆弱性。B/S架构作为C/S架构的改进(可视为三层C/S),把强大功能集中到浏览器可访问的服务器端、客户端零维护,但脆弱性反而集中体现在协议层:使用HTTP协议时比C/S架构更容易受到攻击,即便升级到HTTPS协议提升了安全性,其防护能力仍弱于C/S架构——这说明B/S在换取”随处可用、免安装”的便利时,把原本分散在各客户端的攻击面,换成了集中依赖网络协议安全性的单一攻击面,两种脆弱性模式在本质上是不同权衡的产物。

参考来源

- 位置:《软件架构理论与实践》第21章《软件架构脆弱性》"21.3.1 分层架构"至"21.3.3 B/S架构"节(源文件:_epub-src/OEBPS/text00178.html) - 结论依据:原文分别说明"一旦某个底层发生错误,那么整个程序将会无法正常运行"、"客户端所发生的火灾、盗抢、地震、病毒等都将成为可怕的数据杀手"以及"如果使用HTTP协议,B/S架构相对C/S架构而言更容易被病毒'光顾'",直接支撑本卡片对三种架构脆弱性根源差异的概括。 - 原始内容:本来"直来直去"的操作现在要层层传递,势必造成性能的下降……由于C/S架构软件的数据分布特性,客户端所发生的火灾、盗抢、地震、病毒等都将成为可怕的数据杀手。