ASP.NET防止文件被下载和查看

来源:互联网 发布:淘宝3c认证怎么弄 编辑:程序博客网 时间:2024/06/06 13:58

包括以下几种情况

1. 使用 ASP.NET 来保护文件类型(绝对不允许用户下载/查看)

http://support.microsoft.com/kb/815152

默认状态下,ASP.NET 被配置以截获并停止在 ASP.NET 应用程序中使用的几种不同的文件类型的请求。这些文件类型是那些不会检索的用户。这些文件类型包括存储的应用程序和.cs 文件存储在应用程序的源代码的配置信息的.config 文件。

1)编辑在 Internet 服务管理器中的脚本映射

Microsoft Internet Information Services (IIS) 5.0 确定如何处理请求基于请求的文件扩展名的脚本映射。这些脚本映射会调整使用 Internet 服务管理器。对于 ASP.NET 可以阻止文件类型,您必须首先配置将这些请求转发到 ASP.NET 的 IIS 5.0。若要这样做,请按照下列步骤操作:

  1. 在任务栏上单击 开始、 指向 设置,然后单击 控制面板
  2. 双击要打开 管理工具 文件夹,然后双击运行 Internet 服务管理器
  3. 用鼠标右键单击虚拟服务器或虚拟文件夹包含在 ASP.NET 应用程序,然后单击 属性
  4. 选择 主目录目录 选项卡。如果尚未为虚拟的文件夹中创建应用程序,请单击在 应用程序设置 下的 创建
  5. 应用程序设置,下单击 配置
  6. 若要打算处理 ASP.NET 请求的 Aspnet_isapi.dll 文件的位置选择 .aspx 应用程序映射,然后单击 编辑
  7. 添加/编辑应用程序扩展名映射,将出现对话框。在 可执行文件 字段中选择文本,然后按 CTRL + C 将文本复制到剪贴板上。
  8. 单击 取消 返回到 应用程序配置 对话框。
  9. 现在,添加每个扩展要阻止的 ASP.NET 的应用程序的映射。若要执行此操作单击 添加。然后,可执行文件 字段中,请按 CTRL + V 以粘贴 Aspnet_isapi.dll 文件的路径。
  10. 动作 部分中选择 全部动作 选项。验证已选中 脚本引擎 复选框未选中 检查如果文件存在 复选框。
  11. 单击 确定
  12. 为每个文件扩展名,您要由 ASP.NET 处理后重复此过程。

2)配置文件类型所需的阻止

若要阻止为 ASP.NET 应用程序的其他文件类型,请按照下列步骤操作:

  1. 在文本编辑器 (如记事本) 打开 Web.config 文件。 在 Web.config 文件位于根目录下的您的 Web 应用程序。
  2. 在 Web.config 文件中添加该 <httphandlers><system.web> 下的配置元素 元素。

    注意您必须将不复制该 <httphandlers> Machine.config 文件中的元素。您必须将不复制该 <httphandlers>原因 元素是的因为该 <httphandlers> 元素允许您在不完全重写 Machine.config 设置的情况下添加其他文件类型。
  3. 在该 <httphandlers> 元素,使用 <add> 子标记,以指定要被阻止的其他文件类型。 将 谓词 属性设置为等于 *。执行此操作时可以指定所有类型的 HTTP 请求将被都阻止。定义为通配符,它与您要阻止的文件类型相匹配的 path 属性。例如对于您可以指定 *.mdb。最后,将 类型 属性设置为 System.Web.HttpForbiddenHandler"。下面的代码示例演示如何在 Web.config 文件中配置"httpHandlers"部分:
    <system.web>    <httpHandlers>        <add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" />        <add verb="*" path="*.csv" type="System.Web.HttpForbiddenHandler" />        <add verb="*" path="*.private" type="System.Web.HttpForbiddenHandler" />    </httpHandlers></system.web>
  4. 将保存在 Web.config 文件。在 ASP.NET 应用程序会自动重新启动。

 

2. HOW TO:使用 Visual C# .NET 创建 ASP.NET HTTP 处理程序

http://support.microsoft.com/kb/308001

 实现处理程序

  1. 打开 Microsoft Visual Studio .NET。 在 Visual C# .NET 中,新建一个名为 MyHandler 的类库项目。
  2. 设置一个对 System.Web.dll 程序集的引用。
  3. 将以下指令添加到该类中:
    using System.Web;
  4. 重命名类 SyncHandler.cs,然后相应地更改类定义。
  5. 实现 IHttpHandler 接口。您的类定义应如下所示:
    public class SyncHandler : IHttpHandler
  6. 实现 IHttpHandler 接口的 IsReusable 属性和 ProcessRequest 方法。因为这是一个同步处理程序,所以为 IsReusable 属性返回 False 以使该处理程序不共用。
    public bool IsReusable{   get {return false;}}public void ProcessRequest(HttpContext context){   context.Response.Write("Hello from custom handler.");}
  7. 编译项目。

部署处理程序

  1. 在 C:/Inetpub/Wwwroot 目录下新建一个名为 Handler 的目录。
  2. 在新创建的 Handler 目录下创建一个 Bin 子目录。结果形成的路径是 C:/Inetpub/Wwwroot/Handler/Bin。
  3. 将 MyHandler.dll 从项目的 Bin/Debug 目录复制到 C:/Inetpub/Wwwroot/Handler/Bin 目录。
  4. 按照下面的步骤将新的 Handler 目录标记为一个 Web 应用程序:
    1. 打开 Internet 服务管理器。
    2. 右键单击 Handler 目录,然后单击属性
    3. 目录选项卡上,单击创建
  5. 按照下列步骤为该处理程序创建一个应用程序映射。对于此处理程序,为 *.sync 扩展名创建一个到 Aspnet_isapi.dll 文件的映射。每当请求 .sync 文件时,该请求就会被路由到 ASP.NET,由 ASP.NET 执行处理程序中的代码。
    1. 右键单击 Handler Web 应用程序,然后单击属性
    2. 目录选项卡上,单击配置
    3. 单击添加以添加一个新映射。
    4. 可执行文件文本框中,键入下面的路径:
      C:/WINNT/Microsoft.NET/Framework/< 版本号 >/Aspnet_isapi.dll
    5. 扩展名文本框中,键入 .sync
    6. 确保清除了“检查文件是否存在”复选框,然后单击确定以关闭添加/编辑应用程序扩展名映射对话框。
    7. 单击确定以关闭应用程序配置处理程序属性对话框。
  6. 关闭 Internet 服务管理器。

配置系统

  1. 在 C:/Inetpub/Wwwroot/Handler 目录下,新建一个名为 Web.config 的文件。
  2. 将下面的代码添加到 Web.config 中:
    <configuration>   <system.web>      <httpHandlers>         <add verb="*" path="*.sync" type="MyHandler.SyncHandler, MyHandler" />      </httpHandlers>   </system.web></configuration>
    verb="*" 属性中,我们指示处理程序处理一个使用了任一谓词(如 POST、HEAD、GET 等)的请求。 如果希望此处理程序仅处理 POST 请求,则将它更改为 verb="POST"

    path="*.sync" 属性中,我们指示处理程序处理 .sync 文件的任何传入请求。

    type="MyHandler.SyncHander, MyHandler" 属性中,我们指示处理请求的处理程序在 MyHandler.SyncHandler 名称空间实现,而此类则驻留在 MyHandler 程序集中。

测试模块

要测试处理程序,文件系统中不需要有一个页。例如,请求 Handler Web 应用程序中的 Default.sync 文件(http://< 计算机名 >/Handler/Default.sync)。您会看到下面的结果:

Hello from custom handler.
3.手动修改Page,不让用户看到URL而禁止Download.(如果用户知道URL,则仍然可以Download)..,

<

 

asp:LinkButton ID="btnReport" runat="server" OnClick="BtnReport_Click" Text="<%# ((DictionaryEntry)Container.DataItem).Key %>" />

 

LinkButton lb = (LinkButton) sender;

 

string filename = lb.Text;

 

string filepath = "..//" + ConfigurationManager.AppSettings["TemplateFolder"] + "//" + filename;

 

try

{

Response.ContentType =

"plain/text";

Response.AppendHeader(

"Content-Disposition", "attachment; filename=" + filename);

Response.TransmitFile(Server.MapPath(filepath));

Response.End();

}

 

catch {}

原创粉丝点击