更新:2007 年 11 月
很多自定义 ASP.NET Web 服务器控件都具有对应的设计器组件,这些组件为控件提供各种设计时呈现和编辑功能。如果控件位于“设计”视图中,设计器组件将会处理属性更改,并为设计宿主(例如 Visual Studio 2005)呈现 HTML。设计时,自定义控件的设计器组件与其设计宿主运行在同一个信任级别。设计器组件可能会执行下列操作:访问数据库,调用远程服务器上的网站,创建文件并将其写入开发人员的计算机,发送电子邮件,以及执行其他程序集中的代码。
本主题中的信息描述了各种最佳做法,这些最佳做法有助于您提高控件设计器功能的安全性。
尽管遵循编码和配置最佳做法有助于提高应用程序的安全性,但还要注意不断用 Microsoft Windows 和 Internet 信息服务 (IIS) 的最新安全更新以及已安装在计算机上的所有商用自定义控件包,使应用程序服务器保持最新。这一点非常重要。
有关编写安全代码和保护应用程序安全性的最佳做法的更多详细信息,请参见 Michael Howard 和 David LeBlanc 合著的 Writing Secure Code(《编写安全代码》)一书,也可以参见 Microsoft Patterns and Practices(Microsoft 模式和实践)中提供的指导。
自定义控件用户面临的问题
值得注意的是,来自未知源的自定义控件可能包含将您计算机中的敏感数据暴露给 Web 或在设计时运行恶意代码的设计器。此外,不能使用代码访问配置来限制对控件设计器的访问,因为这些设计器必须总是以完全信任级别运行在设计宿主中。有关信任级别的更多信息,请参见 ASP.NET 信任级别和策略文件。
自定义控件开发人员面临的问题
如果使用类和成员的配置属性将权限限定为控件功能所需的最低级别,将不会对设计器组件起到真正的作用,因为这些组件必须以完全信任级别运行在设计宿主中。
当为预览运行时控件而构建数据时,应尽可能使用示例数据结构,而不要使用数据库中可能的敏感数据。
设计宿主开发人员面临的问题
设计宿主(如 Visual Studio 2005)的开发人员应检查 HTML 标记、文本以及从设计器返回的其他数据是否存在安全风险,只有在不存在安全风险时,才对其进行显示。此外,将 HTML 标记字符串和设计器区域的大小限定为易于管理的维数。有关 HTML 验证的更多信息,请参见 在 ASP.NET 网页中验证用户输入