构建安全的数据访问

要构建安全的数据访问代码,需要了解威胁是什么,数据访问代码中是如何出现常见缺陷的,以及如何使用相应的对策降低风险。
数据访问代码的最大威胁有:
SQL 注入
配置数据的泄漏
敏感应用程序数据的泄漏
数据库架构和连接详细信息的泄漏
未授权访问
网络侦听
图 1 显示了这些最大的威胁。

1. 对数据访问代码的威胁和攻击
SQL 注入
SQL 注入攻击利用有缺陷的数据访问代码,使攻击者可在数据库中执行任意命令。如果应用程序使用在数据库中无约束的帐户,威胁更大,因为这将赋予攻击者更大的执行查询和命令的自由。
缺陷
使您的数据访问代码易受 SQL 注入攻击的常见缺陷包括:
脆弱的输入验证
不使用类型安全的参数动态构造 SQL 语句
过高特权的数据库登录的使用
对策
应对 SQL 注入攻击,要确保:
约束和净化输入数据。
使用类型安全的 SQL 参数进行数据访问。这些参数可用于存储过程或者动态构造的 SQL 命令字符串。参数执行类型和长度检查,并确保注入的代码被视为文本数据,而不是可执行的数据库语句。
使用有数据库受限权限的帐户。理想情况下,您应该只给数据库中经过选择的那些存储过程授予执行权限,而且不要提供直接的表访问权限。
配置数据的泄漏
数据访问代码使用的最敏感的配置数据是数据库连接字符串。如果有安全问题的连接字符串中包括用户名和密码,结果将更严重。
缺陷
以下缺陷将增加与有安全问题的配置数据相关的安全风险:
使用 SQL 身份验证,这要求在连接字符串中指定凭据
在代码中嵌入连接字符串
配置文件中的明文连接字符串
未能加密连接字符串
对策
要防止配置数据的泄漏:
使用 Windows 身份验证,这样连接字符串中不会包含凭据。
加密连接字符串和限制访问加密数据。
敏感应用程序数据的泄漏
许多应用程序存储着敏感的数据,如客户的信用卡号码。保护这类数据的私密性和完整性是非常重要的。
缺陷
会导致敏感应用程序数据泄漏的编码实践包括:
未加密存储数据
脆弱的授权
脆弱的加密
对策
要防止敏感应用程序数据的泄漏:
使用坚固的加密机制保护数据。
在执行数据访问之前授权每个调用方,这样用户只能看到他们自己的数据。
数据库架构和连接详细信息的泄漏
如果您的代码将异常详细信息返回客户端,恶意用户就可使用这些信息攻击服务器。数据访问代码中的异常会暴露敏感的信息,如数据库架构的详细信息、数据存储区的性质和 SQL 代码片段。
缺陷
以下缺陷可能导致信息泄漏:
异常处理不当
脆弱的 ASP.NET 配置,会使未处理的异常详细信息返回客户端
对策
要防止这些泄漏问题:
在您的数据访问代码中捕获、记录和处理数据访问异常。
返回一般性错误消息给调用方。这需要对 Web.config 或者 Machine.config 配置文件中的 <customErrors> 元素进行适当的配置。
未授权访问
如果授权不当,用户可能能够看到另一个用户的数据并可能能够访问其他受限的数据。
缺陷
可能允许未授权访问的实践包括:
数据访问代码中缺乏授权,会提供无限的访问权限
特权过高的数据库帐户
对策
为防止未授权的访问:
使用主体权限要求授权调用方用户。
使用代码访问安全权限要求对调用方代码授权。
使用受限权限限制应用程序登录数据库,并防止直接对表进行访问。
网络侦听
大多数应用程序的部署体系结构都包括一个将数据访问代码从数据库服务器分隔开来的物理隔离层。因此,敏感的数据如特定于应用程序的数据或者数据库登录凭据,必须进行保护,以防网络侦听。
缺陷
以下实践增加了网络侦听的可能:
SQL 身份验证过程中在网络上传递明文凭据
发送到数据库服务器和来自数据库服务器的未加密敏感应用程序数据
对策
为了限制网络侦听缺陷,应该:
使用 Windows 身份验证避免在网络上发送凭据。
在数据库服务器上安装服务器证书。这将使网络上传输的 SQL 凭据自动加密。
在 Web 服务器和数据库服务器之间使用 SSL 连接保护敏感的应用程序数据。这需要使用数据库服务器证书。
在 Web 和数据库服务器之间使用 IPSec 加密信道。

posted on 2008-01-15 13:24  jakeweny  阅读(119)  评论(0编辑  收藏  举报

导航