如何构建和配置更加安全的Web站点[4]

[入库:2005年9月21日] [更新:2007年3月24日]

本文简介:

默认情况下,Visual Studio .NET 中的数据库连接向导将把连接字符串作为属性值存储在“内含代码”文件(此文件包含应用程序的核心逻辑,这与提供用户界面定义的文件不同)中。

这为开发人员访问字符串提供了方便。但是,如果攻击者设法登录到包含源代码和 .config 文件的物理计算机上,便有可能读取连接字符串并用它来访问数据库以进行恶意破坏。

在生产环境中,通常建议您对连接字符串和任何其他所需的凭据进行妥善地保护。一种保护凭据的方法是 OpenHack 4 中采用的方法:加密连接字符串,将其存储在注册表中,并使用访问控制列表 (ACL) 确保只有系统管理员和 ASPNET 辅助进程(IIS 一节中给出了定义)才能访问注册表项。

使用 Windows 2000/XP 数据保护 API (DPAPI) 函数 CryptProtectData 和 CryptUnprotectData 将数据库连接字符串加密,使用这两个函数可以将机密信息加密,而无需直接管理(或存储)随后用于访问这些机密信息的注册表项。

尽管 DPAPI 非常适合用于加密用户或计算机特定数据,但对于加密存储在共享数据库中的信息(如信用卡号码和密码),却不是一种很有效的方法。这是因为 DPAPI 函数根据本地计算机和/或用户信息创建和内部存储加密密钥。在 Web 领域方案中,Web 服务器将使用自己的加密密钥,以防它们访问相同的加密数据。

因此,为了演示 Web 领域方案中使用的方法,生成了一个随机的 Triple DES 加密密钥和初始化向量。此功能是用 .NET Framework 的 System.Security.Cryptography 类中的 TripleDES 类提供的。这些密钥用于对称地加密存储在数据库中的密码和信用卡信息。为了存储信用卡信息,选择了加密性很强的随机第一块作为处理技术。

生成密钥的备份副本后,我们使用 DPAPI 将其加密并存储到注册表中,然后又使用 ACL 将访问权限仅授予系统管理员和 ASPNET 辅助进程。将密钥加密,可确保当攻击者实际定位并访问数据时,如果不先将密钥解密,便无法解密数据。这是“层层设防”的又一个典型例子。

Internet 信息服务 (IIS) 5.0

为了防止攻击者攻击 Web 服务器本身,我们对 Windows 2000 Advanced Server 中的 Internet 信息服务 (IIS) 5.0 Web 服务器进行了适当的更改。首先,安装了 TechNet Web 站点上列出的所有公用安全性修补程序,以确保拥有最新的增强功能。运行任何软件时,安装最新的 Service Pack 和修补程序是一种非常关键的安全方案。

然后,将磁盘上的默认 Web 站点位置从默认位置 c:inetpub 更改到其他卷。因此,一旦系统在某些方面遭到破坏,攻击者将很难导航到此目录树,除非确实了解此目录树的实际位置,也就是说,攻击者无法通过输入 .. 作为位置说明来轻松地访问 C: 驱动器。

接着,使用静态 Web 服务器附带的模板运行 IIS 锁定工具。此操作删除了此应用程序中未使用的所有其他动态内容类型。以这种方式减少暴露给潜在攻击者的表面区域通常是很重要的最佳方案。可以免费获得 IIS Lockdown Tool。它是一个很出色的资源,所有运行 IIS 的系统管理员都应该使用它。

此时,我们已经安装了 .NET Framework Redistributable(它是运行 .NET Framework 应用程序所必需的)、.NET Framework Service Pack 2、最新的 .NET Framework 问题更正和 MDAC 2.7(.NET Framework 所需的组件)。

本文关键:如何构建和配置更加安全的Web站点
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top