如何在asp.net保护文件
简介
如果我们做网站是用Access数据库作为数据源,则我们最关心的是Access数据库文件的安全问题。如果我们将存有重要信息(如密码、付款信息、个人私有的数据等等)的.mdb文件,放在Web服务器上可访问的目录中,任何一个人若猜到数据库文件名就可以通过浏览器或其他下载工具进行下载,这是非常危险的。
有许多方法对.mdb数据库文件进行保护,甚至任何一个你想保护的文件。最直接有效的方法是把.mdb数据库文件放在web服务器non-web accessible目录中。许多web服务器中,都提供一个特殊的可读写的database目录,但它是不准以网页形式进行访问的。
理解IIS和asp.net如何工作
当访问一个从IIS服务器请求时,IIS ISAPI(Internet server application programming interface ,英特网服务器应用编程接口)会对被访问文件的扩展名进行检查,其访问的文件类型是否被web服务器解析器屏蔽。
Web服务器默认时,IIS对于简单的请求会返回其文件包含的内容。它会解析出所认知的存在的文件,如图片、html页面、CSS文件、扩展的Javascript文件等,例如,当访问一个html文件时,IIS返回它所包含的内容信息。
对于内容是动态生成的文件,ISAPI对请求的文件进行动态生成内容。比如,一个用asp语言做的网站,其.asp的文件会映射到扩展了的asp.dll英特网服务器应用编程接口中进行解析。扩展了的Asp.dll英特网服务器应用编程接口自动解析web服务器请求的asp页并返回生成的html文件内容。如果你的网站是使用asp.net语言写的,IIS则会把.aspx文件映射给扩展了的aspnet_isapi.dll英特网服务器应用编程接口,当aspnet_isapi.dll接受到.aspx文件的请求时,扩展了的aspnet_isapi.dll英特网服务器应用编程接口在进程中自动生成为html文件的内容。
扩展了的aspnet_isapi.dll英特网服务器应用编程接口是一个非托管的代码。它不能在.net Framwork中运行。当IIS发送请求到扩展的英特网服务器应用编程接口,即aspnet_isapi.dll在asp.net引擎上转发它的请求并通过.Net Framwork托管代码进行解析 。
ASP.NET引擎非常接近于IIS,就好像IIS有一个目录将指定的文件类型映射到ISAPI上,但ASP.NET引擎将文件类型映射到HTTP Handlers。一个HTTP Handler 是一个为特定文件类型自动生成的托管代码。例如,ASP.NET是用PageHandlerFactory生成的;网络服务的SOAP响应是用WebServiceFactoryHandler生成的。PageHandlerFactory 知道如何将一个ASP.NET网页解析为HTML文件;WebServiceFactoryHandler 知道如何将接收到的SOAP响应为其调用正确的网络服务的方法并返回正确格式的SOAP响应。
测试HttpForbiddenHandler
ASP.NET网络应用程序是通过XML格式文件进行配置的,即Web.config文件。此文件包含的主要信息有:
● 据库连接字符串
● 认证用户的信息,可包括用户名和蜜码
● 其他相关的缓存、编码等配置信息
花点时间,你试着访问一个ASP.NET网络应用程序的Web.config文件,结果如何?很明显,允许所有网络访问者看到ASP.NET网络应用程序的Web.config文件的内容是很危险的,所以,ASP.NET 网络应用程序已配置aspnet_isapi.dll将.mdb文件类型过滤掉。
如何在访问Web.config文件时阻止呢?在IIS中,.config文件映射到ASP.NET ISAPI上,那么ASP.NET引擎会把请求的.config文件映射到HttpforbiddenHandler HTTP handler,接着HttpForbiddenHandler HTTP handler 通过网页浏览器以HTML的格式返回给用户。
现在我们来看如何在ASP.NET中使用HttpForbiddenHandler HTTP handler 来保护.config文件,我们也可以参照此技术来保护.cs、.vb、.webinfo、.vbproj、.csproj、.resx等其他文件类型。同样地,我们用此技术来保护Access数据库文件(.mdb文件)或是任何一个文件类型。在下面章节中,我们将看到保护指定文件类型的必要步骤。
保护.mdb文件
为了达到保护.mdb数据库文件类型和.config文件类型,我们必须设置以下两个步骤:
1. 配置IIS,将.mdb文件类型映射到ASP.NET ISAPI
2. 配置ASP.NET,将.mdb文件类型映射到HttpForbiddenHandler HTTP handler
你必须在网页服务器上在IIS中,将.mdb文件类型映射到aspnet_isapi.dll ISAPI上。登录到网页服务器,通过[开始]—>[管理工具]—>[Internet 服务管理器],下一步,在某一个网站上右击,会出现弹出式菜单,接着选择[属性]弹出此站点的属性对话框,点击[主目录]选项卡,点击[配置]按钮,则会显示[应用程序配置]对话框,如下所示
点击[添加]增加一个映射,这时会显示一个对话框,要你输入ISAPI的文件名,此文件名可以是.exe或是.dll文件,它会阻止用户请求时的特殊文件类型(你也可以阻止其文件类型的所有HTTP请求(GET和POST)或是特定的HTTP动作)
那么,输入*.mdb回车,选择可执行的文件为ISAPI为aspnet_isapi.dll(此文件可以在当前$WINDOWS_DIR$\Microsoft.Net\Framework\$VERSION$中找到)。
现在我们已配好.mdb过滤器,我们还要做最后一步:使网络应用程序.mdb文件类型映射到HttpForbiddenHandler HTTP 句柄。为了达到这上步,我们必须将下面的配置加到Web.config文件中:
<httpHandlers>
<add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
必须将此段代码放在<system.web>这一节中,当前的网络应用程序在访问该程序使用的.mdb时,就会阻止访问。
如果你想将所有的网络应用程序都无法访问*.mdb文件类型,将<add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" /> 加入到machine.config文件的<httpHandlers>节中。(machine.config可在$WINDOWS_DIR$\Microsoft.Net\Framework\$VERSION$\CONFIG 目录中找到)