ASP.NET中实现文件的保护性下载基础篇(2)

  前面提过,IIS会把注册的扩展名发送到aspnet_isapi.dll。图1展示的是找到的已注册扩展名。我们可以在虚拟目录或者网站的“Properties”中的“Configuration”选项就可以看到这个对话框。带有由aspnet_isapi.dll进行处理的已注册扩展名的任何文件都受到ASP.NET的Forms身份验证的支配。下面我们对Forms身份验证的运行机制做简单介绍。

  定制的HTTP处理程序实际上就是实现了IHttpHandler接口的那些类。Forms身份验证允许您防止匿名用户在未授权的情况下访问某些web页面。文件web.config利用以下代码来设置Forms身份验证:



Code highlighting produced by Actipro CodeHighlighter (freeware)


   <authentication mode="Forms">
  
<forms loginUrl="Login.aspx"/>
  
</authentication>
  
<authorization>
  
<deny users="?"/>
  
</authorization>

  上面的代码会防止没有通过身份验证的用户访问所有的页面。如果一个匿名用户试图访问一个网页,该代码会自动地将他们重定向到Login.aspx页面。这样一来,站点开发人员就能决定在这个页面中使用哪种身份验证方法,但是在ASP.NET 2.0中,开发人员可以很轻松地使用新的安全控件来完成此项工作。

  现在,我们说过这个代码能够阻止未通过身份验证的用户访问任何页面,但是准确来说它是阻止了未经认证的用户访问所有被aspnet_isapi.dll拦截的那些文件。这将在后面详加解释。为了给本文的后面的内容做铺垫,我们需要先描述示例电子商务站点的一些具体细节。

内容导航

  六、保护措施规划

  假设我们的站点使用户能在线购买软件,但是在购买或者下载软件之前,用户必须首先注册。然后,分别为用户和产品建立一个表,然后分别存放用户名和产品序列号。当用户购买软件的时候,通过在另一个表中创建一个记录来关联用户和产品。我们称这个表为UserProducts。

  我们想把所有的软件产品文件存储在一个称为files的文件夹中,该文件夹位于网站的根文件夹之中。产品表有一个字段,用于产品文件名,该文件名对应于files文件夹中的一个压缩文件。 我们称这个字段为ProductFileName。下面我们逐步介绍如何保护这些ZIP 文件。

  七、保护所有的压缩文件

  首先,我们要防止所有的压缩文件被未经验证的用户所下载。我们要让所有扩展名为.zip的文件经由ASP.NET 的Forms身份验证处理,这样匿名用户就不能访问它们了。虽然这一步并不是最关键的,但是它确实提供了文件的安全性。

  通常如果您能直接浏览某网站上的一个ZIP 文件,该站点会提示您打开或者将该文件保存到硬盘上。我们想让ASP.NET拦截对扩展名为zip的文件的请求,所以需要在IIS的应用程序映射表中添加相应的扩展名。

  为此,可以打开IIS的管理控制台,找到相应的站点或虚拟目录,单击右键并选择“Properties”选项,就会显示图 2。如果单击“Web Site”或者“Virtual Directory”选项卡中的“Configuration”按钮的话,就会看到扩展名表和用于处理它们的DLL,见图1。我们必须将扩展名“zip”添加到这个列表中,为此,可以单击“add”按钮,然后再扩展名文本框中键入“zip”,并单击“Limit to verb”选项按钮。

用ASP.NET实现文件的保护性下载基础篇

图2 网站属性

用ASP.NET实现文件的保护性下载基础篇

图3 导航至aspnet_isapi.dll

内容导航

  在Verbs文本框中,键入GET、HEAD、POST、DEBUG,以指示aspnet_isapi.dll拦截zip类型文件的请求。在Executable:文本框中,导航至aspnet_isapi.dll文件的位置,见图3。这个文件位于相应框架版本文件夹下的C:\WINDOWS\Microsoft.NET\Framework\目录中,如图4所示。

  

用ASP.NET实现文件的保护性下载基础篇

图4 给IIS添加zip扩展名映射

  

用ASP.NET实现文件的保护性下载基础篇

图5 映射zip扩展名

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjjdzp.html