Visual Basic .NET 和 Visual C# .NET 程序员需要解决的安全问题 (zt)

visual|安全|程序|程序员|解决|问题

Visual Basic .NET 和 Visual C# .NET 程序员需要解决的安全问题
Robin Reynolds-Haertle
Visual Studio Team
Microsoft Corporation
2002 年 1 月

摘要:本文着重讨论了 Visual Basic .NET 和 Visual C# .NET 开发人员在开始使用 .NET 框架时需要解决的主要安全问题。此概述讨论了 Windows 应用程序和 Web 应用程序,以及开发过程的实现、调试和部署阶段。
本文适用于 Visual Studio .NET 和 .NET 框架的最终版本。如果您使用的是预发布版本,则其中应用程序的运行可能与本文所讨论的略有不同。

目录

  • 简介
  • 代码访问安全性
    • 完全信任
    • 部分信任
    • 部分信任环境的开发
    • 测试
    • 其他资源
  • Web 应用程序
    • 动态发现
    • 身份验证、模拟和委托
    • ASPNET 进程标识
    • 在 ASPNET 标识下运行时保护文件资源的安全
    • 使用 ASPNET 标识进行调试
  • Visual Studio .NET 开发环境中的安全机制
  • 总结

简介
与早期版本的 Visual Studio 相比,Microsoft Visual Studio .NET 为应用程序的运行提供了更好的安全控制。.NET 框架提供了更多的控制,同时也要求您承担更多的编程责任。在为用户创建友好易用的应用程序时,您需要解决一些安全问题。
通常在以下三种情况下需要解决安全问题:

  • 运行您的应用程序的用户可能拒绝该应用程序的权限,因为应用程序所运行的位置已被指定为拒绝该用户访问某些系统资源。例如,用户可以通过配置公共语言运行时来拒绝存储在网络驱动器上的所有应用程序的文件权限。您在编写代码时应注意此问题,并且应编写代码对这种拒绝作出恰当的回应。
  • 需要防止从您的 Web 服务器访问 Web 应用程序的用户在服务器上运行恶意代码或破坏数据。
  • Visual Studio 的设置方式将或多或少地使服务器面临受到恶意代码攻击的危险。

代码访问安全性
代码访问安全性是 .NET 框架的一个系统,它通过控制代码的执行来控制对资源的访问。这种安全功能独立于操作系统提供的安全性,并且是对操作系统提供的安全性的补充。当用户运行您的应用程序时,应用程序将由 .NET 公共语言运行时分配到五个区域之一。这五个区域是:

  • 我的电脑 - 用户计算机上的应用程序。
  • 本地 Intranet - 用户的 Intranet 上的应用程序。
  • Internet - 来自 Internet 的应用程序。
  • 可信站点 - 来自由 Internet Explorer 定义为“可信”站点的应用程序。
  • 不可信站点 - 来自由 Internet Explorer 定义为“受限”站点的应用程序。

上述每个区域都由系统管理员设置了特定的访问权限。可以将每个区域的安全级别设置为完全信任、中级信任、低级信任或不信任。信任级别定义了应用程序可以访问的资源。区域与其他安全凭证(例如发布者、强名称、Web 站点以及代码的 URL)一起确定在运行时授予该代码的权限。您无法控制用户计算机上的安全设置,但您的应用程序在运行时仍会受到即时设置的限制。这就意味着应用程序可能会被拒绝访问某些特定资源。例如,应用程序可能需要将数据写入文件,但用户的系统将通过引发异常而拒绝在运行时进行写入访问。有关安全凭证的详细信息,请参阅 Evidence(英文)。
您的工作就是开发应用程序来处理这种情况。这并不表示让您的应用程序用另外一种方法来写入数据,而是说您的应用程序应该预计到可能无法写入数据,然后对这种可能性作出响应。您可能需要使用更多的异常处理(Visual Basic 中的 Try...Catch 或 C# 中的 try...catch)或 System.Security.Permissions 命名空间中的某些对象,以使应用程序代码更加可靠。本文后面“部分信任环境的开发”一节对这些方法进行了简要说明。
区域的安全级别可以通过随 .NET 框架一起安装的“管理工具”来进行设置。有关在计算机上设置区域安全级别的详细信息,请参阅 Administration Tools(英文)。

完全信任

开发人员通常在完全信任环境中工作。他们将源代码存放在硬盘驱动器上,并在用于开发的计算机上对其应用程序进行测试。在这种完全信任环境中,开发人员编译的任何代码都可以在本地计算机上运行。由于本地计算机被默认定义为完全信任环境,因此不会出现安全异常。

部分信任

部分信任是指完全信任区域以外的所有区域。部署应用程序时,应用程序可能会移至新的区域,而新区域可能不完全信任应用程序。在部分信任环境中运行代码的两种最常见的情况是:

  • 运行从 Internet 下载的代码。
  • 运行驻留在网络共享位置 (Intranet) 的代码。

在部分信任区域中可能会被拒绝访问的资源示例包括:

  • 文件 I/O,包括文件的读取、写入、创建、删除或打印。
  • 系统组件,如注册表值和环境变量。
  • 服务器组件,包括目录服务、注册表、事件日志、性能计数器和消息队列。

在部分信任环境中哪些内容是不允许的呢?这不太容易确定。.NET 框架中的每个类以及每个类中的每种方法都有一个安全属性,用于定义运行该方法所需的信任级别,并且正是由于这些安全功能,使得在运行时可能无法访问该属性。区域级别并不只是信任级别到属性的简单映射,而是一个授予特定类和方法的特定权限的集合。您的应用程序无法只是简单地查询信任级别然后就可以预计哪些资源不可用。您可以确定应用程序是否在完全信任环境中运行。在下一节“部分信任环境的开发”中,我们将介绍一种方法。

部分信任环境的开发

本节简要介绍了安全问题可能会对编写的代码产生什么样的影响。部分信任环境的开发没有单一的解决方案。您的解决方案取决于您所编写的应用程序。此外,由于信任级别在应用程序的执行过程中可能会发生变化,因此不能仅测试现有的信任级别,然后就继续执行。
开发部分信任区域的第一步是编写能够识别即将发生安全异常的代码。请注意以下代码:

' Visual BasicPublic Sub MakeABitmap()   Dim b As Bitmap = New Bitmap(100, 100)   ' 此处的代码将以位图格式绘制一张漂亮的图片   b.Save("c:\PrettyPicture.bmp")End Sub// C#public void MakeABitmap(){   Bitmap b = new Bitmap(100, 100);   // 此处的代码将以位图格式绘制一张漂亮的图片   b.Save("c:\\PrettyPicture.bmp");}

如果项目和项目程序集存储在您计算机的硬盘驱动器上,并且您是计算机 Administrators 组的成员,则此方法在运行时不会引发异常。如果将此应用程序部署到您的 Intranet,则当应用程序试图保存位图对象时,将引发 System.Security.SecurityException(请参阅 SecurityException Class [英文])。如果此代码周围没有 Try...Catch(在 Visual Basic 中)或 try...catch(在 C# 中)块,则应用程序将因异常而终止。这会令用户感到不满意。如果您添加异常处理代码,应用程序就能够:

  • 警告用户应用程序无法完成所有需要完成的任务。
  • 清除所有现有对象,以便 catch 块后面的代码能够成功运行。

您可以按如下所示修改保存位图的代码。添加的代码将警告用户该文件因安全性被拒绝而未能保存,从而将安全性失败与文件 I/O 失败(例如不正确的文件名)区分开来。这种方法不会产生任何安全漏洞。用户应修改安全设置以信任您的应用程序,否则应用程序将不会运行。

' Visual BasicPublic Sub MakeABitmap()   Dim b As Bitmap   Try      b = New Bitmap(100, 100)      b.Save("c:\PrettyPicture.bmp")   Catch ex As System.Security.SecurityException      ' 告知用户保存失败。       MessageBox.Show("拒绝授予保存该文件的权限," & _         "未保存此位图。")   Catch ex As System.Exception      ' 此处对其他异常作出反应。      MessageBox.Show(ex.Message)   End TryEnd Sub// C#public void MakeABitmap(){   Bitmap b = null;   try    {      b = new Bitmap(100, 100);      b.Save("c:\\PrettyPicture.bmp");   }    catch (System.Security.SecurityException ex)    {      // 告知用户保存失败。       MessageBox.Show("拒绝授予保存该文件的权限," +          "未保存此位图。");   }    catch (System.Exception ex)    {      // 此处对其他异常作出反应。      MessageBox.Show(ex.Message);   }}

使用 System.Security.Permissions(英文)命名空间中的类、属性和枚举,可以对应用程序中安全任务进行更多的控制。如果您在编写可从其他应用程序调用的库,则可以让库验证调用代码的权限。例如,您只需在代码文件的顶部添加以下程序集级别的属性。加载该程序集时,运行时将验证权限。如果运行时拒绝所请求的权限,程序集将无法加载并且将引发一个安全异常。如果向独立的应用程序添加此属性,则应用程序可能不会运行。如果此属性出现在类库中,则可能不会在运行时加载该库。您需要在调用此类库的代码中添加 try/catch 块。

' Visual Basic<Assembly: System.Security.Permissions.FileIOPermissionAttribute( _SecurityAction.RequestMinimum, Write:="c:\PrettyPicture.bmp")> // C#[assembly: System.Security.Permissions.FileIOPermissionAttribute(SecurityAction.RequestMinimum, Write="c:\\PrettyPicture.bmp")]

您也可以专门向运行时请求权限,下面的示例中使用了 Demand 方法。运行时可能允许或拒绝该请求。拒绝请求是通过引发安全异常来实现的。您可以按如下所示重新编写代码,以明确请求写入位图文件的权限:

' Visual BasicPublic Sub MakeABitmap()   Dim filename As String = "c:\PrettyPicture.bmp"   Dim permission As FileIOPermission = _       New FileIOPermission(FileIOPermissionAccess.Write, _       filename)   Dim b As Bitmap = Nothing   Try      b = New Bitmap(100, 100)      permission.Demand()      b.Save(filename)   Catch ex As System.Security.SecurityException      ' 告知用户保存失败。       MessageBox.Show("拒绝授予保存该文件的权限," & _         "未保存此位图。")   Catch ex As System.Exception      ' 此处对其他异常作出反应。      MessageBox.Show(ex.Message)   End TryEnd Sub// C#using System.Security.Permissions;public void MakeABitmap(){   string filename = "c:\\PrettyPicture.bmp";   FileIOPermission permission = new       FileIOPermission(FileIOPermissionAccess.Write,       filename);   Bitmap b = null;   try    {      b = new Bitmap(100, 100);      permission.Demand();      b.Save(filename);   }    catch (System.Security.SecurityException ex)    {      // 告知用户保存失败。       MessageBox.Show("拒绝授予保存该文件的权限," +          "未保存此位图。");   }    catch (System.Exception ex)    {      // 此处对其他异常作出反应。      MessageBox.Show(ex.Message);   }}

测试

开发部分信任区域的第二步是在多个环境中进行测试,尤其是在您的 Intranet 和 Internet 上。这将强制引发安全异常。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索安全
, 应用程序
, 运行
, 代码
, 用户
, visual
, visual studiomfc字体异常
, 运行失败visual
, as环境问题
C#  部署iis 异常
visual c basic .net、visual basic.net下载、visual basic.net教程、visual basic.net2015、visual basic.net前景,以便于您获取更多的相关知识。

时间: 2024-08-02 22:32:36

Visual Basic .NET 和 Visual C# .NET 程序员需要解决的安全问题 (zt)的相关文章

Visual Basic .NET 和 Visual C# .NET 程序员需要解决的安全问题 (z

Visual Basic .NET 和 Visual C# .NET 程序员需要解决的安全问题 Robin Reynolds-HaertleVisual Studio TeamMicrosoft Corporation 2002 年 1 月 摘要:本文着重讨论了 Visual Basic .NET 和 Visual C# .NET 开发人员在开始使用 .NET 框架时需要解决的主要安全问题.此概述讨论了 Windows 应用程序和 Web 应用程序,以及开发过程的实现.调试和部署阶段.本文适用于

Visual Basic .NET 和 Visual C# .NET 程序员需要解决的安全问题(二)

其他资源除了上面的概述中介绍的内容外,还有许多其他内容可供选择.以下主题更详细地讨论了代码访问安全性: Introduction to Code Access Security(英文) Code Access Security(英文) Security Namespaces in Visual Studio(英文) Web 应用程序解决 Web 应用程序的安全问题,可以保护您的服务器免受恶意代码的攻击,并保护数据不被破坏.您可以使用多种方法来保护服务器.通过禁用 XML Web services

在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组

visual|创建|控件|数组 在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组 Matthew A. StoeckerVisual Studio TeamMicrosoft Corporation 2002 年 1 月 摘要:本文介绍如何使用 Visual Basic .NET 和 Visual C# .NET 创建和管理控件数组. 目录 简介 前提 创建项目 实现集合 公开控件数组 创建公共事件处理程序 测试项目 总结 简介数组为使用共享公共功能的控件

调试 ASP 中使用的 Visual Basic COM 组件

概要本分步指南介绍了如何调试(或逐步执行)在 Active Server Pages (ASP) 页中使用的 Microsoft Visual Basic (VB) 组件对象模型 (COM) 组件. 调试 ASP 页中使用的 VB COM 组件 在开始菜单中指向程序,指向 Microsoft Visual Studio 6.0,然后单击 Microsoft Visual Basic. 在 Visual Basic 中,打开您要调试的 COM 组件项目,并在希望调试的位置设置断点.为此,单击希望调

用Visual Basic修改Windows98注册表

visual|window|注册表 Windows98系统注册表中包含关于系统配置及运行的重要信息.本文以修改KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run子键分支中的键值信息为例,介绍如何在Visual Basic中,利用Win32 API函数修改注册表. 声明Win32 API函数'该函数用于打开系统注册表中已存在的键. 函数的返回值:键打开成功返回0,否则返回非0, phkResult被设置为该键的句柄. De

Visual Basic.NET 新编程模型和语言改进(转)

visual|编程 摘要:Visual Basic.NET是针对微软的.NET框架,对Visual Basic进行重塑之后的结果   .在里面有许多修改,使Visual Basic.NET比Visual Basic 6.0更易使用.更强大,而且给它赋予了过去需要使用C++这样的语言才具有的访问某些系统资源的能力.最重要的是增加了对象的继承性.在Visual Basic.NET里,所有受控类型都派生自System.Object. 一个重要的新语言特性是垃圾搜集,它由公共语言运行时(Common L

什么是Visual Basic.NET?

visual 什么是Visual Basic.NET?    Visual Basic.NET是下一代的Visual Basic.而并不是简单的在Visual Basic 6.0上在添加一些新特性而已,微软重新设计了产品以便使开发者能够更加容易的开发分布式应用,例如基于WEB的程序以及多层系统.    Visual Basic.NET中有两种窗体包,Windows窗体以及Web窗体:一个新版的ADO用于接受离线数据源:新的语言,移走了原来的关键字,提高Type数据的安全性以及提供低级别结构以满足

Visual Basic.NET 中的语言新变化

visual 简介 要快速创建企业级的Web应用程序,开发人员必须依赖于可伸缩性.强壮性和可重用性等商业逻辑.在过去的几年中,面向对象的程序设计成为符合这些要求的系统的首要方法.使用面向对象的编程语言有助于使大规模的系统更易于理解.更易于调试.升级更迅速. 为了使Visual Basic开发人员能够从面向对象设计中受益并简化企业级Web应用程序的开发,Visual Basic的下一个版本­--Visual Basic.NET将支持包括实现继承在内的全部面向对象的语言特性.有了这些语言特性,Vis

与Visual Basic .NET一起使用.NET Framework(转)

visual 使用.NET Framework,Microsoft Visual Basic开发人员可以创建健壮的.在先前的Visual Basic版本中很难编写的应用程序.本文将讨论使用.NET Framework的好处,并且将包括一些功能强大的.Visual Basic开发人员可以与该框架一起使用的特性,包括多线程和线程池(thread pooling).Windows服务和文件系统监控等. 为什么使用框架 单词框架(framework)有几种含意.在这种情况中,它指的是创建和运行应用程序的