广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    ASP.NET虚拟主机的重大安全隐患

    2018-04-06 10:40:36 次阅读 稿源:互联网
    广告

      说明:本文中所有程序均在Windows 2000 Server中文版 + SP2上编译运行无误

      开发环境:.Net 框架1.0 Version 1.0.3705

      一、ASP.NET虚拟主机存在的重大隐患

      我曾经在WWW.BRINKSTER.COM申请了一个免费的ASP.NET空间,上传了两个程序,其中一个查看目录和文件的程序证明我的判断:ASP共享空间服务器存在的一个安全问题,在 ASP+ 共享空间服务器中依然存在并且变得更加难以防范!通过这个程序我可以浏览所有用户的ASP+程序,可以查看服务器的系统日志……,当然,如果我想删除什么的话也不会有什么问题。为了让大家更清楚地了解这一问题,我们有必要简单介绍一下ASP中就已经存在的这一问题。

      ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录和文件进行读写、删除、改名等操作。FSO对象来自微软提供的脚本运行库scrrun.dll中。

      使用下面的代码就可以在ASP中创建一个FSO对象:

      Set fso = CreateObject("Scripting.FileSystemObject")

      我们使用fso对象包含的属性和方法,如Drive、Drives、Folder、Floders、File、Files等对服务器的磁盘、目录和文件进行读、写、删除等操作。这一强大的文件系统访问能力给ASP共享空间提供者带来了严重的安全问题,很多ASP空间的管理员都删除此组件或将这个组件改名以避免用户使用这一标准组件。删除组件或组件改名确实是一个简单的方法并且也很有效,但是却使广大用户无法使用它的强大的功能。网络上还有一种看起来很美的方案,它允许用户使用 FileSystemObject 组件又不影响服务器的安全,即对每一个用户都设置一个独立的服务器用户和单个目录的操作权限。但是这种方法是有问题的。因为ASP和ASP.NET中在这方面的问题十分类似,所以我们将在ASP.NET的相应解决办法部分详加说明。

      在ASP.NET中我们发现这一问题仍然存在,并且变得更加难以解决。这是因为.NET中关于系统IO操作的功能变得更加强大,而使这一问题更严重的是ASP.NET所具有的一项新功能,这就组件不需要象ASP那样必须要使用regsvr32来注册了,只需将Dll类库文件上传到bin目录下就可以直接使用了。这一功能确实给开发ASP.NET带来了很大的方便,但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了,防范此问题就变得更加复杂。在讨论解决方案之前,我们先来看一下怎么来实现上述的危险的功能。

    二、文件系统操作示例

      在我们编写代码之前,有必要了解一下我们需要用到的几个主要的类。这几个类都在System.IO名称空间下,System.IO 名称空间包含允许在数据流和文件上进行同步和异步读写的类。

      在整个应用程序的开始部分我们需要了解一下服务器的系统信息,这就需要用到System.Environment类,该类提供有关当前环境和平台的信息以及操作它们的方法。我们通过System.Environment类可以得到系统的当前目录和系统目录,这可以使我们更快的发现几个关键的目录;我们还可以通过获取运行当前进程的用户名来帮助我们了解ASP.NET程序运行所使用的用户,进一步设置用户权限以避免这一安全问题。

      我们还要使用System.IO名称空间的其他几个类是:

      System.IO.Directory:提供用于创建、移动和枚举通过目录和子目录的静态方法的类

      System.IO.File:提供用于创建、复制、删除、移动和打开文件的静态方法的类

      System.IO.FileInfo:提供创建、复制、删除、移动和打开文件的实例方法的类

      System.IO.StreamReader:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。

      每个我们所使用的类的属性和方法的具体用法我们将以代码注释的方式在程序中加以说明。

      System.IO名称空间在 .NET FRAMEWORK提供的mscorlib.dll中,在使用VS.Net编程之前需要将此Dll引用到此项目中。

      我们所编写的程序都使用了Codebehind方式,即每一个aspx程序都有一个对应的aspx.cs程序,aspx程序中只是写与页面显示相关的代码,所有逻辑实现的代码都放在相应的aspx.cs文件中,这样就可以更好得做到显示与逻辑的分离。由于我们的目的不是讨论Codebehind技术,所以就不在对此多加讨论了。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告