ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

你可以使用 ASP.NET 档案特征来存储并获取数据源(比如数据库)中的用户设定。你可以在应用程序的配置文件中指定构成用户档案的属性和分组。在运行时,ASP.NET 会使用配置信息来动态生成每个档案属性的强类型的类访问器。然后这个类通过静态的 Profile 属性而被暴露。档案属性值通过数据源中的一个档案提供者而被存储,既可以保存在纯文本的 XML 中又可以保存在序列化的二进制表单中。

你可以通过下列编码和最佳配置实践来改善应用程序的安全。为你的应用程序 Web 服务器持续保持最近的 Microsoft Windows 安全更新和 Microsoft Internet Information Services(IIS)安全更新同样也是重要的,包括 Microsoft SQL Server 或者其他档案数据源的任何更新。

关于编写安全代码和保护应用程序的最佳实践的更多信息,请参考由 Michael Howard 和 David LeBlanc 共同编著的书籍:[编写安全代码],并且遵循 Microsoft Patterns 和 Practices 中所提供的建议(http://www.microsoft.com/resources/practices/default.mspx)。

保护档案配置

ASP.NET 档案特征在默认时是启用的。虽然默认的配置设定被设置成了最安全的值,但是我们还是建议你禁用用户档案特征,如果这不是你的应用程序所必需的话。关于档案配置设定和它们的默认值的信息,请参考:[profile 元素(ASP.NET 设定结构)]。匿名识别也能够设置档案属性,但是在默认时是禁用的。关于匿名识别配置设定和它们的默认值的更多信息,请参考:[anonymousIdentification 元素](ASP.NET 设定结构)。

保护配置值

在配置文件中存储敏感信息的时候,我们建议你使用已保护的配置来加密敏感值。那些尤其敏感的信息包括有存储在 machineKey 配置元素中的加密关键字和存储在 connectionStrings 配置元素中的数据源连接字符串。关于更多信息,请参考:[使用已保护的配置来加密配置信息]。

保护档案数据源的连接

连接字符串

与所描述的一样,保护存储连接字符串中用来与运行 SQL Server 或者其他数据源的计算机进行通信的敏感信息同样也是重要的。要保持你的数据连接的安全,我们建议你使用已保护的配置来加密配置中的连接字符串信息。关于更多信息,请参考:[使用已保护的配置来加密配置信息]。

使用集成的安全来连接到 SQL Server

我们建议你使用集成的安全来连接到运行了 SQL Server 的计算机,要防止已妥协的连接字符串和任何已暴露的用户 ID 信息和密码信息。在你指定一个使用集成的安全来连接到一个运行 SQL Server 的计算机的连接的时候,档案提供者就会对进程的身份进行回复。我们建议你确保运行 ASP.NET(比如应用程序池)进程的身份是默认的进程帐号或者是被限制的用户帐号。关于更多信息,请参考:[ASP.NET 角色扮演]。

SQL Server 数据库许可

默认时用来存储档案信息(包括用来限制用户访问你的应用程序时所必需的特权的数据库角色和视图)的 SQL Server 数据库。我们建议你给连接到 SQL Server 档案数据库的用户 ID 指派最小的必需特权。关于更多信息,请参考:[应用程序服务数据库中的 SQL Server 角色和视图]。

保护档案数据源中的敏感数据

默认的用户档案提供者没有加密存储在档案数据源中的值。我们建议你对存储到档案数据源之前的任何敏感信息进行加密,如果要避免在数据源被妥协的时候暴露敏感信息。你可以在把值存储到档案属性之前加密敏感数据,或者你也可以扩展 ProfileBase 或者 ProfileProvider 类来提供加密能力。

防止匿名档案数据的跨应用程序共享

如果应用程序和使用了档案属性的应用程序的匿名识别已启用,那么就会存在匿名档案属性值能够暴露给其他应用程序的风险。这种情况会出现在匿名识别 cookiePath 特性被设置成包括多个应用程序的路径并且在一个公共的域中存在有多个应用程序的时候。

在你使用用户档案的匿名识别并且打算分离应用程序中的匿名用户之一的时候,我们建议你为每个应用程序都指定 machineKey 元素中单独的加密关键字,设置特殊应用程序的匿名识别的 Cookie 范围,并且为每个应用程序设置不同的 ApplicationName 属性值。

保护用户档案的 Web 页面

操作存储在档案属性中的敏感数据的应用程序页面应该使用标准的 Web 安全机制进行保护。这包括使用安全套接层(SSL)并且需要用户登入来完成敏感的操作(比如更新用户信息或者删除用户)。另外,还要避免在 Cookies 中存储敏感数据。

保护反向的拒绝服务攻击

ProfileManager 类中用来完成更新或者长期运行搜索操作的方法能够简化你的档案数据源的快速响应,如果方法通过大量的客户端而并发地被调用。如果要简化你的应用程序暴露给拒绝服务攻击,就可以只许可管理员用户访问用于数据库更新或者搜索相关档案的 ASP.NET 页面。

错误消息和事件

异常

要防止敏感信息被暴露,就需要配置你的应用程序不要显示详细的错误消息或者只在应用程序在本地 Web 服务器中运行的时候才显示详细的错误消息。关于更多信息,请参考:[customErrors 配置元素]。

事件日志

ASP.NET 档案特征会使用 ASP.NET 健康状况监视来记录特定条件下的错误信息,默认时会把信息存储到事件日志中。如果你的服务器计算机运行的是 Windows Server 2003,那么你可以通过保护事件日志并且能够设置事件日志的参数(比如尺寸、保持时间,等等)来防止间接的事件日志反向拒绝服务攻击,从而改进应用程序的安全。

追踪信息

你的 Web 服务器能够配置成追踪档案特征的特定动作和存储日志文件中的追踪信息。因为敏感信息(比如用户的名称)能够存储到追踪日志文件中,所以我们建议你只允许管理员才能够启用追踪、配置日志文件的追踪位置,并且访问日志文件追踪。

自定义的档案提供者

在为数据库的访问而创建一个自定义的档案提供者的时候,应该确保你遵循了最佳安全实践来防止各种攻击(比如 SQL 注入攻击)。在使用自定义的档案提供者的时候,还需要确保提供者已经为最佳安全实践而被回顾。

posted on 2007-02-20 18:32  Laeb  阅读(292)  评论(0编辑  收藏  举报