ASP.NET中保护自定义的服务器控件

自定义服务器控件是扩展 ASP.NET Web 服务器控件的功能的一种方式。下文提供了针对自定义服务器控件的用户和开发人员的基本安全准则。有关创建自定义服务器控件的更多信息,请参见开发自定义 ASP.NET 服务器控件。

IDE(如 Microsoft Visual Studio 2005)简化了自定义控件的使用及开发。但是,无论使用哪一 IDE,下面列出的安全准则均适用。

有关 ASP.NET Web 应用程序安全性的常规信息,请参见 ASP.NET Web 应用程序安全性。

针对自定义服务器控件用户的准则

您可以通过多种方式在 Web 应用程序中使用自定义服务器控件,例如,可以将源代码文件直接放在 Web 应用程序的 App_Code 文件夹中,从全局程序集缓存使用控件,或者使用通过自动安装程序(如 Visual Studio 内容安装程序)安装的社区组件。无论在何种情况下,都应采取防范措施以防止导入恶意代码或对 IDE 和承载组件的服务器产生意外但有负面影响的代码。

下面提供了自定义服务器控件的用户应考虑的一些安全准则。此列表可能不够全面,但可以从此着手进行调查:

不要使用不熟悉的代码或不了解其安全隐患的代码。对于社区组件,建议您阅读可用的发行者信息并确定是否对组件进行了签名。

不要仅仅考虑控件的运行时安全性,还要考虑其设计时安全性。

如果可能,在强名称程序集中使用自定义控件并选择受信任的发行者。

使用最少特权帐户运行包括导入的控件的 ASP.NET Web 应用程序。有关使用具有最低权限的标识运行 ASP.NET 进程的更多信息,请参见配置 ASP.NET 进程标识。在诸如 Visual Studio 2005 或 Visual Web Developer 速成版这样的 IDE 中,除非您需要执行管理任务,否则以普通用户的身份而不要以管理员的身份运行应用程序。

查看承载自定义服务器控件的服务器上的操作系统安全性和 Windows 访问控制列表 (ACL)。例如,应确保使用仅具有运行应用程序所需的最低权限的标识来运行 ASP.NET 进程,这样便可将自定义服务器控件导致的安全漏洞对其他承载的应用程序的影响降至最低。

另外,查看自定义服务器控件的权限,并确保它们遵循文件和文件夹权限,ASP.NET Web 应用程序的标识必须具有该权限才能正常工作。

使用代码访问安全性来限制 Web 应用程序(具有自定义服务器控件)可以访问的资源和可以执行的特权操作。

使用 .NET Framework 配置工具 (Mscorcfg.msc) 在全局程序集缓存中管理和配置程序集并调整代码访问安全性策略。因为 Mscorcfg.msc 的用途是帮助高级管理员执行与配置应用程序相关的任务,因此与您的系统管理员合作以确定使用该工具是否符合您的情况。

针对自定义服务器控件开发人员的准则

作为自定义控件的开发人员,您应遵循 ASP.NET 应用程序页和控件以及 .NET Framework 中安全性的常规最佳做法。在许多情况下,自定义服务器控件的用户可能不了解所有实现的详细信息或安全隐患。但是,您应该通过以下内容来计划这一事项:遵循既定的安全约定,并清楚地指出组件正常工作所需的所有权限。您可以从 ASP.NET 网站安全性、.NET Framework 开发人员指南、安全性的基础概念以及“Patterns and Practices Web site”(模式和做法网站) 中安全性主题来着手对常规安全性问题和解决方法进行调查。

设计和实现自定义 Web 服务器控件后,必须确定将组件提供给用户的方法。有两种常用的提供方法:作为程序集提供或作为社区组件提供。如果将组件作为程序集提供,您应对程序集进行签名(也称强名称签名)。签名为程序集提供了唯一标识,其他软件可以使用该标识来识别该程序集并显式引用该程序集。同时,这一方法还可以提供其他好处,使用程序集编程中对这些好处进行了详细介绍。

如果作为具有自动安装过程的社区组件来提供组件,那么您应以加密方式对组件进行签名。签名可以通过创建对特定方唯一的数字签名来帮助验证数据是否发自特定方。其中,创建用于 Visual Studio 2005 的社区组件的一种方法是:使用 Visual Studio 内容安装程序并创建可以对其进行签名的 .vsi 文件。

下面提供了在开发自定义服务器控制组件时应考虑的一些安全准则。此列表可能不够全面,但可以从此着手进行调查:

与自定义服务器控件一同提供有关如何使用这些控件的说明,以及对这些控件正常运行所需的资源和权限的要求。

对组件进行数字签名

如果将自定义控件打包为程序集,则使用强名称对该程序集进行签名。有关更多信息,请参见创建和使用具有强名称的程序集。如果使用自动安装程序(如 Visual Studio 内容安装程序),您仍需要对组件进行签名。 有关更多信息,请参见 How to: Package Community Components to Use the Visual Studio Content Installer 和 如何:打包社区组件以使用 Visual Studio 内容安装程序.

遵循代码中的异常管理的最佳做法

如果您希望页开发人员将自定义控件添加到可视化设计器的工具箱,则将它们拖到设计图面上,并在属性浏览器中访问其属性和事件,而且,除了要考虑运行时安全性外,还要考虑设计时安全性。有关更多信息,请参见保证自定义控件设计器组件的安全。

了解对 Web 应用程序页和控件的最高威胁,包括代码注入、信息泄漏、会话劫持、身份欺骗、参数操作和网络监听。为此,应在部署前完成对组件的威胁建模分析。

(0)

相关推荐

  • asp.net动态加载自定义控件的方法

    本文实例讲述了asp.net动态加载自定义控件的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: //usercontrol.IndexOper为自定义控件 usercontrol.IndexOper uc=(usercontrol.IndexOper)Page.LoadControl("自定义控件路径"); uc.ID = "uc";  //定义唯一标示 //OperContent为PlaceHolder控件 OperContent.Contr

  • asp.net 自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图

    如图: 点击浏览,选择图片之后,右面显示图片 第一步: 创建CtFileUpLoad.ascx 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="CtFileUpLoad.ascx.cs" Inherits="WebParts_CtFileUpLoad" %> <table cellpadding="0&quo

  • asp.net自定义控件中注册Javascript问题解决方案

    复制代码 代码如下: protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); RenderJS(); } private void RenderJS() { if (!Page.ClientScript.IsClientScriptBlockRegistered(SCRIPT_ID))//如果还没有注册语句,则注册 { Page.ClientScript.RegisterClientScriptBlock(t

  • 浅谈ASP.NET中最简单的自定义控件

    ASP.NET用户控件一般适用于产生相对静态的内容,所以没有builtin的事件支持.本文讨论用户控件返回事件的方法. 假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按AButton按钮时,包含该用户控件的页面可以接收到事件.为此,小鸡射手在用户控件和页面的代码中分别作了处理. UserControl.ascx.cs中的处理:         1. 定义public的事件委托,如ClickEventHandler;         2. 在UserCont

  • 把某个asp.net 控件替换成自定义控件的方法

    功能:可以把某个asp.net 控件 替换成 自定义的控件 pages 的 tagMapping 元素(ASP.NET 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. 此元素是 .NET Framework 2.0 版中的新元素. 复制代码 代码如下: <pages> <tagMapping> <add tagType= "System.Web.UI.WebControls.WebParts.WebPartManager"

  • Asp.net 动态加载用户自定义控件,并转换成HTML代码

    如果页面单纯的使用js来创建,要写大量的代码,而且不直观. 在asp.net中,其实我们可以创建用户自定义控件,通过Ajax请求返回用户自定义控件HTML代码. 复制代码 代码如下: public static string RangerUsControl(string controlName) { StringBuilder build = new StringBuilder(); HtmlTextWriter htmlWriter = new HtmlTextWriter(new Strin

  • Asp.net清空控件值的方法(可自定义控件类型)

    由于项目收尾,最近忙着做一些方法的优化,整理了一些分享给大家. 当页面内有许多控件,我们在需要清空其值的时候,一个个清空未免太麻烦.于是写了这么一个方法,可以自定义清空控件的类型,灵活应对业务需求. 复制代码 代码如下: /// <summary>重置方法控件类型枚举</summary> /// <remarks>求知域http://www.qqextra.com 2012-12-28</remarks> public enum ReSetType { //

  • asp.net DropDownList自定义控件,让你的分类更清晰

    看到Discuz是2个下拉列表进行合并的,网上找了一些资料,然后写了这个小源码,在这里和大家分享一下! 运行效果图,如下所示(深黑的地方选不中,因为那是上一级的分类): 项目结构图如下所示: Controls类库SmartDropDownList.cs代码如下所示: SmartDropDownList.cs 复制代码 代码如下: using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Syste

  • asp.net自定义控件回发数据实现方案与代码

    在实现asp.net的自定义控件中,若要实现数据的回发或者post数据,那自义控件必须实现IPostBackDataHandler接口, 在该接口中有两个方法一个是LoadPostData,另一个是RaisePostDataChangedEvent.第一个方法用于在回发数据时,填充自定义控件的相关属性,第二个方法用于激发控件相关的事件.也就是说这两个方法,应该是在提交数据的时候进行调用的. 可是,我们在实现自己的控件时,虽然继承了 IPostBackDataHandler,但是在提交数据的时候确

  • asp.net自定义控件代码学习笔记

    效果:在放这个控件的页面: XML/HTML 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test6.aspx.cs" Inherits="test6" %> <%@Register TagPrefix="custom" Namespace="myComponents" %>

  • asp.net中使用自定义控件的方式实现一个分页控件的代码

    一.概述 在web开发中,常常需要显示一些数据,而为了方便排版及浏览,我们只需要显示所有记录中的一部分.一般情况下,我们采用分页来实现这个需求.实现分页的方法多种多样,在本文中,我们采用了一个分页空间来记录记录总数.当前页.总页数及页面大小等.为了有一个直观上的印象,先展示该控件运行后的效果,效果如下图所示: 二.实现方案 为了实现该效果图,在asp.net中,可以使用Custom Controls and User Controls两种方式,User Controls的实现方式及其简单,而且使

随机推荐