Web 部件是 ASP.NET 的一个新特征,它提供给终端用户对 Web 页面进行更改或个性化的能力。拥有已个性化的 Web 页面是非常强大的 Web 应用程序,但是它同样有需要被开发者所了解的安全隐患。

Web 部件的安全问题

因为 Web 部件是 ASP.NET 的一个特征,并且 Web 部件的控件扩展了 ASP.NET 服务器控件,所以 Web 部件页面会受到与 ASP.NET 页面相同的安全影响。拥有使用 Web 部件控件的页面的 Web 应用程序才是真正特殊的 ASP.NET 应用程序类型,并且使用 Web 部件的应用程序能够在任何被信任级别中运行(与普通的 ASP.NET 应用程序一样)。关于 ASP.NET 网站安全的详细内容,请参考“ASP.NET 网站安全”。但是,Web 部件还有唯一的一个安全问题是常规 ASP.NET 页面所没有的。这些问题在下列部分被讨论。

导入控件的数据

Web 部件特征最大的安全隐患就是导入特征。这个特征允许用户导入一个为服务器控件(控件的汇编集文件必须对于 Web 服务器是可用的)包含状态和属性数据的 XML 描述文件。为控件导入数据是用户共享数据并简化控件配置的一个方法。但是内在的隐患就是描述文件中有可能包含恶意数据。例如,如果有人把恶意脚本代码保存到字符串属性值中,然后当用户导入描述文件并在 Web 页面中引用服务器控件的时候,恶意脚本就会被潜在地得到执行。要最小化这个隐患(导入包含恶意数据的描述文件),拥有字符串属性的服务器控件应该始终对属性的数据进行编码。另一个隐患则是使用描述文件(参考“Web 部件控件的描述文件”)来导入数据。某个恶意用户可以通过提交请求的方式把多个汇编集同时装载到 AppDomain 中,从而导致额外的内存消耗。如果你需要避免这个隐患(与导入操作相关联),你可以通过不使用实现了该操作的相关服务器控件的方式来对这个特征进行禁用。或者你可以对能够访问这些控件的用户进行限制。例如,你可以使用角色管理,如果某个用户属于管理员角色,那么你可以通过编程为该用户在页面中添加 ImportCatalogPart。更多关于这些控件的信息,请参考 ImportCatalogPart 类的参考主题。

导出控件的数据

导出特征是另一个比较重要的安全隐患,因为它能够暴露机密数据。导出特征允许用户把特定控件的属性和状态数据导出到一个 XML 描述文件中。(这个文件就是导入特征所使用的文件。)主要的隐患就是用户可以把机密数据导出到应用程序之外以及描述文件中(描述文件是能够被拥有适当权限的任何用户所读取的简单文本文件)。导出特征在 ASP.NET 中默认时是被禁用的,所以如果你不需要这个特征,你可以安全地忽略它。这很明显是最大的安全选项。

如果你需要启用导出特征,你应该对这个选项所能够暴露出的属性范围进行了解。当你创建一个 WebPart 或者将在 WebPartZone 区域中使用的服务器控件的时候,你可以为每一个能够被导出的公共属性添加 Personalizable 元数据参数。该参数用于建立可导出的属性,并且它同样也会引发消息框给用户,并对数据将要被导出的操作而进行警告。使用 Personalizable 参数建立的一个典型参数就是 IsSensitive 参数。这个布尔值参数有助于建立一个需要在某些情况下能够被导出的属性,关于细节和具体实例,请参考“ExportMode 属性”的参考主题。

了解个性化的细节

Web 部件的个性化特征用来允许用户按照他们的喜好而对 Web 页面进行更改,并把他们的设定值进行长期保存,所以已个性化的页面会保留跨浏览器会话之间的设定。多数 Web 部件特征都需要个性化;因此,它在 ASP.NET 网站中默认时是被启用的。即使个性化是如此强大的特征,但是它同样承运着一定的危险度。用户能够更改 Web 页面的实际布局、外观、甚至是页面中的内容和控件。这些个性化的数据被保存在一个数据库中并且用于页面的呈现,所以用户有许多的机会与网站内容进行恶意的交互。访问已共享个性化范围的用户甚至能够对应用于所有用户的页面进行更改。

如果你有一个使用 Web 部件特征但是并不需要进行个性化的特定页面(例如,门户网站中的某个公共页面),对于禁用个性化来说这是一个很好的例子,因为这样做提高了性能并为你的网站减少了暴露安全隐患的机会。

为个性化而验证用户

个性化需要对用户进行验证。你不能够为匿名用户启用个性化。这表示如果要拥有完整的个性化和 Web 部件的功能,你的网站就必须使用基于 Windows 或者基于窗体的验证机制。关于验证选项的信息,请参考“Web 应用程序的基本安全练习(Visual Studio)”。要使用新的成员资格特征(使用窗体验证)来设立网站,请参考“通过使用成员资格来管理用户”。

准许访问已共享个性化时的最小访问权限

Web 部件的个性化改变始终应用到给定范围或者个性化范围中的用户。在用户范围中所作的改变仅对作出改变的当前用户可见,然而在已共享范围中所作的改变则对所有用户都是可见的。现有已共享个性化范围中的管理员角色用户对页面所作的改变都会应用到网站中的所有用户。默认时,所有用户不允许对已共享范围进行访问。只有被选择的用户才拥有这个权限,这个限制是在网站的配置文件中被定义的。关于详细内容,请参考“ASP.NET 实践:为 Web 部件页面启用已共享的个性化”。

使用已测试的被信任控件

因为 Web 部件为用户提供了强大的能力(如在页面中添加新的服务器控件的能力),开发者应该要在 Web 部件应用程序中使用服务器控件的时候要特别的留意。因为服务器控件,特别是来自于第三方开发团体或者卖主的控件,应该小心地对其进行检查和测试,以确保它们能够被信任并用于 Web 部件应用程序中。例如,被恶意设计并且内存使用效率低下的一个特定服务器控件。如果你只要把这样一个控件添加到 Web 部件的目录中,用户也就能够把它添加到 Web 页面中。并且因为目录中的控件能够被无数次地添加到页面中(出现相同控件的多个实例),用户也就能够多次地在页面中添加这样一个劣质控件,那么在页面尝试处理劣质控件的多个实例的时候就会造成应用程序出现拒绝服务攻击的现象。关于 Web 部件目录的更多信息,请参考“CatalogPart 类”的参考主题。

在控件中使用授权和过滤

Web 部件有一个允许你在 Web 部件页面中为创建用户界面(UI)的服务器控件而对授权级别进行设置并检查的特征。如果有一个基于标准(你所定义的标准)的已授权控件,它将出现在页面中,并且如果它在某些简化的级别中得到授权,因此你可以对它的外观进行改变、或者完全隐藏它。例如,假设你有一个用户并已经被指派成为管理员。同时有一个你需要仅对该管理员可见的服务器控件。通过使用 Web 部件的授权和过滤特征,你可以确定该控件只对被指派的管理员可见,而对其他用户则不可见。使用授权和过滤主要的机制就是 WebPart 类的 AuthorizationFilter 属性,还有 WebPartManager 类的 IsAuthorized 属性和 OnAuthorizeWebPart 方法。

在编辑控件中对字符串属性进行编码

Web 部件的唯一的一个特征就是终端用户可以把页面转换进编辑模式,并且他们可以编辑服务器控件,来改变它们的布局、外观、行为、以及可个性化的属性值。但是这样做存在一些安全隐患,因为通过使用字符串属性的编辑能力,某个恶意的用户可以插入错误的数据、或者尝试脚本注入式攻击。作为一个安全练习,如果你创建了自定义的 EditorPart 控件来编辑服务器控件,并且该控件中还拥有使用给定服务器控件或者使用字符转换器的一个可个性化字符串属性,那么你的自定义 EditorPart 控件应该在指派到属性之前对字符串的数据进行编码。关于具体实例,请参考“HtmlEncode 方法”的参考文档。

转载于:https://www.cnblogs.com/Laeb/archive/2007/01/05/612737.html

保护 ASP.NET Web 部件页面相关推荐

  1. 关于ASP.NET Web 部件连接的引入

    创建用于 ASP.NET 2.0 应用程序的 Web 部件 您可以用两种方法创建 Web 部件.第一种方法涉及创建一个自定义的 Web 部件类,该类从 System.Web.UI.WebControl ...

  2. 在 ASP.NET Web 部件应用程序中使用服务器控件

    在 Web 部件应用程序中,主要的用户界面(UI)由 Web 页面区域的 ASP.NET 服务器控件所组成,Web 页面拥有公共的 UI 以及派生自 WebPartZoneBase 类的合成控件.这些 ...

  3. ASP.NET Web Pages – 页面布局简介

    通过 Web Pages可以把重复使用的内容块(比如页面头部和底部)写在一个单独的文件中.还可以使用布局模板(布局文件)为站点的所有网页定义一致的布局. 一致的外观 在因特网上,您会发现很多网站都具有 ...

  4. (转) ASP.NET 2.0:使用用户控件和定制的Web部件个人化你的门户网站(二)

    Web部件目录 我们已经见过了如何在 WebPartZones 控件中事先放入Web部件.你还可以用另外一种方法完成这个功能,那就是允许用户在运行时添加新的Web部件.通过使用 CatalogZone ...

  5. ASP.NET 实践:使用用户控件实现 Web 部件的个性化

    这个实践示范了如何创建依赖于 Web 部件个性化的 ASP.NET 用户控件,并在 Web 页面中提供用户特定的默认值. ASP.NET Web 部件控件集允许你建立拥有模块化布局的 Web 页面,并 ...

  6. VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中

    在 Visual Web Developer 中创建 ASP.NET Web 用户控件就像 ASP.NET Page 页面一样简单. 以下是创建步骤: 1.打开您想添加用户控件的站点. 2.右键点击站 ...

  7. 创建 Web 部件页--msdn

    本演练中的演示让您亲身体验用于创建使用 Web 部件控件的网页的基本组件和任务. 在许多 Web 应用程序中,可以更改内容的外观并允许用户选择和排列他们想要看到的内容,这一点十分有用.ASP.NET ...

  8. webParts与Web部件

    web部件是ASP.NET WebForm里面的服务器控件,它涵盖的内容比较多,鉴于这种状况的话鄙人不打算深究下去了,只是局限于了解web.config配置里面的配置内容则可. 那么也得稍微说说啥是W ...

  9. 开发高级 Web 部件

    通过用户控件实现 Web 部件相当容易,但是也有一些弊端: 受限的重用:如果不手动复制 .ascx 文件到其他 Web 应用程序的目录下,就不能动态添加这些控件到其他 Web 应用程序的页面中. 受限 ...

最新文章

  1. 一个Java对象到底有多大?
  2. 迅雷官方回应“被拖库”致密码泄露:恶意造谣
  3. 【职业规划和代码库设计】
  4. 深入理解Objective-C:Category
  5. 有品产品专家盖勇:如何做出超越用户期待的智能硬件产品?
  6. linux透明大页内存,rhel7.2 禁用透明的大页内存--transparent_hugepage(THP)
  7. 自适应中值滤波用于超声图像降噪
  8. Java文件I / O基础
  9. 如何将android例子程序添加到Eclipse进行调试运行
  10. 销户c语言,c – 如何在注销时优雅地退出QApplication?
  11. 洛谷P3389 【模板】高斯消元法
  12. CF125E MST Company
  13. sql 2008 R2 备份和还原
  14. 鼠标左右键的快捷键是什么?
  15. Android系统音乐界面UI设计,40款音乐APP界面UI设计欣赏
  16. Tip__Unity 3D模型上的材质球为灰色 改不动的问题
  17. 抑制广播风暴 各种发包
  18. 智能家居 mysql_智能家居 数据库设计
  19. 别只盯着LoRa、SigFox, LPWAN 连接技术还有这些!
  20. 一键轻松设置项目代理

热门文章

  1. 【weblogic】部署jfinal编写的应用
  2. mysql 删除重复数据_MySQL查找和删除重复数据
  3. 自建邮件服务器_EDM邮件营销需要掌握的一系列知识(有福利)
  4. python类型错误如何解决_在Python中 出现的错误类型以及解决办法
  5. python无参数装饰器_python_之无参装饰器_01
  6. mysql子查询存到另一张表_MySQL多表查询与子查询
  7. mysql join 组合索引_详解MySQL两表关联的连接表创建单列索引还是组合索引最优...
  8. 使用聚合的方式实现静态代理
  9. 微软官方上线了Python教程,7个章节就把Python说通了!
  10. GitHub趋势榜第一:超级命令行工具Semantic,比较解析源代码