在现代软件开发中,为了提高应用程序的安全性和可维护性,遵循一系列规则至关重要。这些规则通常包括采用多层架构,确保每一层在物理上分离以增强安全性,以及确保业务逻辑层是唯一可以连接到数据层的层等。每个项目或公司可能有自己的规则,但核心概念是一致的。
本文将通过ASP.NET和WCF RIA Services的示例,展示如何实现这些安全实践。
多层架构是一种设计模式,它将应用程序的不同功能划分为不同的层。典型的多层架构包括表示层、业务逻辑层和数据层。每一层都有其特定的职责,并且通常每一层都应该物理上分离,以增强安全性。例如,表示层通常位于DMZ(去军事化区)中,而其他层则受到严格的安全保护。
在ASP.NET中实现多层架构的一个示例是,数据层必须首先通过表示层和业务逻辑层才能被访问。在大多数情况下,每个物理层也由防火墙保护。
当使用Silverlight和WCF RIA Services构建应用程序时,表示层在客户端运行,这可能会引发安全问题。一旦中间的Web服务器被攻破,攻击者就可以直接访问数据层。为了避免这种情况,可以添加一个额外的层,包含一些WCF服务,这些服务将被WCF RIA Services消费。但这会导致代码重复,因此这不是一个好的解决方案。
在之前的一篇文章中,讨论了如何将托管Silverlight的Web应用程序和托管服务的Web应用程序分离。这种设置使服务可以在一个服务器上运行,而托管Silverlight应用程序的Web页面在另一个服务器上运行。这种物理分离的层可以提高安全性。但是,Silverlight仍然需要直接连接到WCF RIA Services。
IIS Application Request Routing(ARR)是一个强大的工具,它允许使用IIS作为反向代理。通过使用反向代理,可以创建一个设置,其中Silverlight应用程序不再需要与逻辑层服务器通信,因此不需要将逻辑层服务器暴露在互联网上或将其放置在DMZ中。
要安装和配置IIS Application Request Routing,请按照以下步骤操作:
通过遵循上述步骤,已经实现了一个企业级解决方案,其中Silverlight应用程序仅访问表示层服务器,而不需要直接与逻辑层服务器通信。