ASP.NET Lab

The Best Web, The Best Future

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

当用户在 Web 应用程序中不同的 ASP.NET 页面之间导航的时候,ASP.NET 会话状态就允许你存储并获取用户的状态值。ASP.NET 会话状态对来自于相同浏览器的、在一个有限的计时窗口(即会话)中,并能够在会话期间持续保持变量的值的时候会对请求进行识别。浏览器会话在会话 Cookie 中或在 URL(会话状态被配置成无 Cookie 的时候)中被识别。

ASP.NET 会话状态默认时被启用于所有的 ASP.NET 应用程序并被配置成使用会话 Cookies 来对浏览器会话进行识别。

默认时,ASP.NET 会话状态把会话变量的值存储到内存中,但是你同样能够配置会话状态来把会话变量的值存储到状态服务器、SQL Server,或者自定义的会话状态存储中。

虽然如下所示的编码和最佳配置练习能够改进应用程序的安全性,但是同样重要的是,你需要为你的应用程序服务器持续保持对最新的 Microsoft Windows 和 Internet 信息服务(IIS)安全补丁的更新,以及 Microsoft SQL Server、Active Directory,和应用程序中所使用的其他数据源的任何补丁。

更多关于编写安全代码并保护应用程序的最佳练习的详细信息,请参考由 Michael Howard 和 David LeBlanc 共同编著的《编写安全代码》一书以及 Microsoft Patterns 和 Practices(http://www.microsoft.com/resources/practices/default.mspx)中所提供的指导。

保护会话状态的配置

会话状态特征在默认时是被启用的。在默认的配置设定被设置成最安全值之前,如果你的应用程序并不需要它的时候,你就应该禁用会话状态。关于会话状态配置设定和它们的默认值的信息,请参考:[sessionState 元素(ASP.NET 设定结构)]。

保护配置值

当在配置文件中为应用程序存储了敏感信息的时候,你应该使用被保护的配置来加密这些包含了敏感信息的值。特别的敏感信息包括有被存储在 machineKey 配置元素中的加密关键字和被存储在 connectionStrings 配置元素中的数据源连接字符串。关于更多信息,请参考:[使用被保护的配置来加密配置信息]。

保护会话状态数据源的连接

连接字符串

与前面所提到的一样,对被存储在连接到运行了 SQL Server 的计算机、会话状态服务,或者其他数据源的字符串中的敏感信息进行保护是重要的。要保持连接到数据服务器的安全性,建议你使用已保护的配置来加密配置中的连接字符串信息。更多信息,请参考:[使用被保护的配置来加密配置信息]。

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

你应该使用被集成的安全性来连接到运行了 SQL Server 的计算机,从而避免出现连接字符串被妥协以及用户 ID 和密码被暴露的可能性。在你指定了一个使用被集成的安全性来连接到一台运行了 SQL Server 的计算机的连接的时候,会话状态特征就会恢复其进程的身份。你应该确保运行了 ASP.NET(例如,应用程序池)的进程身份是默认的进程帐号或被限制的用户帐号。关于更多信息,请参考:[ASP.NET 角色扮演和会话状态模式]。

保护会话 ID

在保护应用程序和数据的时候,对通过网络已经被暴露给不必要的来源并且在一个重复式应用程序反向攻击中对已经被使用的会话标识符进行保护是重要的。如下建议能够改进你的会话标识符的安全性。

  • 用安全套接层(SSL)来保护你的应用程序。
  • 为会话的 Timeout 属性指定一个更小的值。同样需要考虑通过使用客户端脚本在客户端之上的一个重定向(重定向发生的时间与会话超时的时间相同),或者通过使用 AddHeader 方法来添加一个重新刷新的 HTTP 头。
  • 避免使用无 Cookie 的会话。如果你指定了无 Cookie 的会话,就需要通知用户不能使用电子邮件、书签,或者保存包含了会话 ID 的链接。
  • 避免指定 AutoDetectUseDeviceProfile 来作为 Cookie 的模式。
  • 允许用户登出,同时你还应该调用 System.Web.SessionState.HttpSessionState.Abandon 方法。并通知用户在登出完成之后关闭浏览器。
  • 在使用无 Cookie 会话的时候,把 regenerateExpiredSessionID 配置成 true,该配置始终会在出现了一个已过期的会话标识符的时候启动一个新的会话。

保护使用会话状态的 Web 页面

应用程序页面与应该通过使用标准的 Web 安全性机制(如使用安全套接层 SSL)而被保护的敏感数据以及需要通过用户登入来完成的敏感操作(如更新个人信息或删除帐号)一起合作。

另外,页面不应该暴露敏感的特征数据(如密码,以及某些明文格式的用户名称)。确保显示使用了 SSL 所产生的信息的页面只对于已验证的用户可用。

错误消息和事件

异常

要防止敏感的信息被暴露给不必要的来源,就需要对你的应用程序进行配置,使其只在当客户端是 Web 服务器本身的时候才显示详细的错误消息,否则就不显示任何详细的错误消息。关于更多信息,请参考:[customErrors 元素(ASP.NET 设定结构)]。

事件日志

如果你的服务器是运行的 Windows Server 2003,那么你可以通过保护事件日志的方式来改进应用程序的安全性,并通过对关于尺寸、保持时间,以及等等这些可能导致拒绝服务攻击的相关参数进行设置。

自定义的会话状态存储提供者

在创建一个自定义的会话状态存储提供者的时候,就需要确保你已经遵循了最佳安全练习中的指导来避免常见的攻击(如在使用数据库的时候所发生的 SQL 注入攻击)。在使用了自定义的会话状态存储提供者的时候,就需要确保提供者已经遵循了最佳安全练习中的指导被回顾。

posted on 2007-01-19 22:17  Laeb  阅读(323)  评论(0)    收藏  举报