顺便先提一下所谓当前流行的WEB架构。在网络架构方面,目前流行的趋势和以前传统的门户网站采用七层交换,或者四层交换集中式部署做负载均衡不同,比较倾向于在物理位置上做分布式节点,通过智能DNS引导用户就近访问。这些CDN节点,有的是实际的WEB服务器,但是大多数可能只是一些Squid或者 Nginx之类的反向代理。这样做的好处第一是有更好的用户体验,第二是在拒绝服务攻击时,也有更灵活的应对方式。
鉴于系统分布式部署的趋势,因此在编码方面,也就开始流行刺提到过的Restful风格。所谓Restful风格,本质来说,就是客户端自己维持自己的状态,而且服务端信任这个客户端维持的状态。根据从客户端获取到的不同的状态,返回不同的页面。这里尽量的减少了服务端的判断等工作,让客户端对WEB系统的依赖性减轻,服务端做的仅仅是根据状态返回结果,并且在需要时为服务器设置一个新的状态,即所谓状态变迁。这点和P2P的去中心化有些类似,客户端不太在意自己连接到了哪一个服务器上面,只要自己维持着自己的状态,连接到WEB系统的任意一个服务器得到的结果都是一样的。目前流行的做法,就是不适用 session仅仅使用cookie,当然使用数据库session也是可以的。但是我觉得尽量把这些事情给客户端去做更好,减少数据库服务器的维护成本和故障风险,去中心化彻底一些。
目前这种分布式缓存节点大量使用,以及客户端自己维持状态的架构的流行,带来的两个安全风险就是敏感内容缓存的风险,以及客户端状态窃取或伪造的风险,而且前所未有的突出。
关于客户端维护的状态检验以及反窃取,关键点在于对cookie的加密算法强度以及完整性检验可靠度。在客户端状态被窃取时降低风险,我提到过cookie加入时间戳的方案,这个在刺的文章里有很详细的探讨,包后后面很多评论。
关于用户退出以及反窃取这里,再提一点。使用Session的方案,用户退出时在服务端销毁Session即可。即使有人盗取了cookie,使用 cookie里面保存的sessionid做刷新也是无效的,因为session实体已经在服务器上不存在了。新的无session方案中,这方面实现起来会麻烦一些。我的看法是,需要一个数据库记录用户的注销状态。当用户退出时,清空用户的cookie,同时在数据库中写入该用户已经登陆,下次不再使用 cookie认证,强制要求输入密码登陆。这样解决了cookie被盗取但是没超时的情况下,用户退出被盗取的cookie也不失效的问题。可惜的是这样又加上了一个数据库,那么结合起来看,把Session存入一个集中的数据库,在部署上并不比单纯的使用cookie差多少。
敏感内容缓存风险,主要是指用户A访问CDN上某个节点的时候,查看了一些包含自身信息在内的页面,而WEB系统在缓存方面没有做到足够的安全性,可能会导致这些敏感信息被用户B无意中看到。虽然缓存服务器可能不会缓存这些内容,但是随着缓存接点的急剧扩张,小几率的问题也会逐渐放大。就这个问题而言,可以在缓存服务器和代码两个点中的任意一个采取措施。虽然可以通过配置代理服务器策略保证安全,但是一般来说,防御应该是多层的,立体的,必须在代码中对缓存作出明确的控制。因为对于安全来说,需要尽可能的在不安全的环境中的保证系统的安全。代码中不做安全控制,这次部署的缓存系统是安全的,下次部署的缓存系统则可能出现疏忽。更何况,其他第三方无法控制的缓存服务器。
WEB系统中对缓存的控制,在RFC2616中14.9节有详细的描述。主要有public,private,no-cache,no-store等选项,具体描述可以仔细阅读RFC文档。值得一说的是no-cache和no-store的区别,no-store是比no-cache更严格的控制,按照 RFC原文:Even when this directive is associated with a response, users might explicitly store such a response outside of the caching system (e.g., with a "Save As" dialog).
总的来说,这种流行的架构看重分布式部署,和客户端状态维持,因此在架构中,更需要考虑缓存的安全以及客户端cookie的安全。在编码之初,就要关注到这些问题,到后期再改,就会来不及了
本文出自:http://laoxiege.blog.sohu.com/110867388.html
分享到:
相关推荐
《代码审计-企业级Web代码安全架构》是一本详尽阐述企业级Web应用程序代码安全的指导书籍,共计247页。这本书旨在帮助开发者、安全工程师以及IT专业人员理解和实施有效的代码审计策略,以保障Web应用程序的安全性。...
本文将深入探讨Web系统的应用架构,包括负载分配层、业务服务层和通信层以及数据存储层,这些都是确保Web应用安全的基础。 首先,负载分配层是系统中不可或缺的一环。在处理大量用户请求的大型或中型Web业务系统中...
《WEB系统安全开发和改造规范》 WEB系统的安全性是保障企业信息资产免受攻击和泄露的关键因素。本规范主要关注WEB安全的规划、架构设计以及网站的安全治理,旨在为XX局的WEB开发与改造提供指导。安全措施涵盖了从...
BIT7 信息系统安全架构 - 网站安全架构 BIT7 信息系统安全架构 - 网站安全架构是指在网站开发和维护过程中,为了确保网站的安全和稳定运行,而设计和实施的一系列安全机制和架构。网站安全架构的主要目的是防止各种...
《Java高手真经_系统架构卷:Java.Web系统设计与架构》是一本专注于Java Web开发领域的专业书籍,由刘中兵及其Java研究室倾力打造。这本书深入探讨了Java技术在构建复杂Web系统中的应用,涵盖了从基础概念到高级设计...
Web Services平台架构是构建分布式应用程序的一种重要方法,它允许不同系统和平台之间的应用程序通过网络进行交互。在Java平台上开发Web Services,我们可以利用一系列的技术和标准,以实现跨平台的互操作性。 首先...
- **安全性与可靠性**:保证数据安全和系统稳定。 - **灵活性**:适应业务流程的变化。 - **用户体验**:提升用户友好性。 2. **源代码组织结构**: - **开发可管理性**:便于团队协作和代码管理。 - **模块...
### C# Web 三层架构设计详解 #### 一、引言 C# Web 三层架构是一种常见的软件设计模式,旨在通过清晰的分层提高代码的可读性、可维护性和可扩展性。这种架构模式将应用程序分解为三个独立的层次:表示层...
此外,Web Services也是构建分布式系统和服务导向架构(SOA)的关键技术,它促进了跨组织、跨平台的协同工作。 总的来说,Web Services技术架构为软件开发者提供了一种标准化、跨平台的通信方式,极大地推动了...
《Java高手真经_系统架构卷Java.Web系统设计与架构》这一资料主要聚焦于Java Web应用系统的高级设计与实现技术,对于希望深入了解Java Web开发、系统架构设计的技术人员来说,是一份不可多得的学习资源。下面将根据...
基于云的下一代Web架构不仅能够更好地适应大数据和移动互联网的需求,还能够提供更高效、安全、可扩展的服务。本文将探讨现有的Web应用架构,并介绍面向服务的企业架构(SOFEA)及其在实际应用中的经验教训。 #### ...
总结来说,这个架构旨在通过Web服务器集群提供高并发处理能力,利用数据库主从复制实现数据安全和读写分离,通过分布式文件系统优化存储性能,并通过VIP和心跳检测实现高可用性。这种设计适用于大型互联网服务,能...
在《Web安全架构浅谈》中,主要讨论了Web安全的多个方面,包括安全架构、扫描器、WAF(Web应用防火墙)以及面临的挑战和解决方案。以下是详细的知识点解析: 1. **Web安全扫描器**: - 扫描器用于检测Web应用中的...
模块化设计是Web架构中的另一个核心概念,它强调将系统分解成独立的、可重用的组件。每个模块负责特定的功能,并通过清晰的接口与其它模块交互。这种设计方式提高了系统的灵活性和可扩展性,同时也便于团队协作和...
"架构基于CA证书的安全Web站点服务器证书" 这篇文章讲述了如何架构基于CA证书的安全Web站点服务器证书,满足电子商务的需求。文章分为两部分,第一部分讲述了应用需求,第二部分讲述了安装IIS及证书服务组件的步骤...
- **文章背景**:本文基于Kate Matsudaira(一位资深IT行业的工程副总裁)的经验分享,旨在探讨如何构建可扩展的分布式Web系统。 - **核心原则**:在设计可扩展Web架构时需考虑的关键原则包括可用性、性能、可靠性、...