注册 登录
编程论坛 ASP.NET技术论坛

ASP.NET2.0如何设置IIS下的某文件夹里面的文件不让局域网内的用户直接通过URL访问?

foshan 发布于 2007-04-18 09:33, 2880 次点击
近段时间在学习开发一个小程序,是将合同扫描文件从客户端上传到服务器的,然后指定用户才可进入网页进行文件的下载。
今天发现一个问题:放置在IIS下默认网站内的文件夹内的word文件,是可以通过
“http://localhost//UploadedFiles/
***/***/***/***.doc”进行文件下载,而无需打开登录网页通过认证才可下载文件。如果用户知道文件的放置路径或者用户刻意去“撞”文件的路径,岂不是什么机密文件都被他下载走了???如何解决这个问题啊???

[此贴子已经被作者于2007-4-20 15:04:47编辑过]

9 回复
#2
foshan2007-04-19 08:18
在客户端将文件上传到服务器IIS文件夹以外的地方保存,但这样一来,又不能下载了。大家是如何解决这个问题啊?
#3
冰镇柠檬汁儿2007-04-19 09:03

把路径和文件名起的没人能猜到就可以了

#4
fququ2007-04-19 09:04
装ftp-server 可以解决.程序只需要按照客户名往各各ftp目录里存放就好.不给ftp user开放写,只开放读就可以.
#5
foshan2007-04-19 10:58
装ftp-server ?要不要每个客户端的电脑都要装相应的软件的啊??
#6
foshan2007-04-19 16:19
这个算不算防盗键???大家是如何解决这个问题的?
#7
skyland842007-04-19 16:25

我记得可以把IIS 设置成不允许跨页面访问的!

当你设置好后!

你在处理一个页面(下载页面)
之后在这个页面中判断这个用户是否可以下载!

如果可以!
就 重定向到 要下载的资料!

这样行不?

#8
fququ2007-04-20 01:33

楼上的方法可能对迅雷等的下载工具软件不起做用.
查看当前连接如果包涵主域名可以自动跳转到主域名试下可行否.

#9
foshan2007-04-20 15:02

看了 清清月儿 的《ASP.NET2.0雷霆之怒盗链者的祝福》的文章,按照文中的教导想实现:局域网内设置IIS下的某文件夹不让用户直接通过URL访问,而是要通过身份验证进入主页后,才能下载文件。
以下是我根据文章的指导进行操作,但最后输入 http://localhost/showbaobiao\1.rar 一样可以下载文件,而不是像文章所说的会跳转到WebForm1.aspx,在WebForm1.aspx页面中按下“下载”按钮才可以输出rar文件,请大家帮忙看看哪里出错了,谢谢!
1、首先创建一个类库项目myhandler.cs,后台的代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// myhandler 的摘要说明
/// </summary>
public class myhandler:IHttpHandler
{
public myhandler()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IHttpHandler 成员
public void ProcessRequest(HttpContext context)
{
// 跳转到WebForm1.aspx,由WebForm1.aspx输出rar文件
HttpResponse response = context.Response;
response.Redirect("http://192.168.1.11/showbaobiao/WebForm1.aspx");
}

public bool IsReusable
{
get
{
// TODO: 添加 MyHandler.IsReusable getter 实现
return true;
}
}
#endregion

}
2、 在配置文件Web.config文件节点里增加如下节点:
<httpHandlers>
<add verb="*" path="*.rar" type="myhandler,App_Code"/>
</httpHandlers>
3、在WebForm1.aspx里增加一个文本为“下载”的Button,其Click事件和后台的代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
FileInfo file = new System.IO.FileInfo(Server.MapPath("1.rar"));
Response.Clear();
Response.AddHeader("Content-Disposition", "filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
string fileExtension = file.Extension;
// 根据文件后缀指定文件的Mime类型

switch (fileExtension)
{
case "mp3":
Response.ContentType = "audio/mpeg3";
break;
case "mpeg":
Response.ContentType = "video/mpeg";
break;
case "jpg":
Response.ContentType = "image/jpeg";
break;
case "bmp":
Response.ContentType = "image/bmp";
break;
case "gif":
Response.ContentType = "image/gif";
break;
case "doc":
Response.ContentType = "application/msword";
break;
case "css":
Response.ContentType = "text/css";
break;
default:
Response.ContentType = "application/octet-stream";
break;
}
Response.WriteFile(file.FullName);
Response.End();
}
}

4、 最后一步就是在IIS里增加一个应用程序扩展。在“默认网站”->“属性”->“主目录”->“配置”。在弹出的“应用程序配置”窗口里按“添加”,在弹出的“添加/编辑应用程序扩展名映射”窗口里“可执行文件”选择C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,在扩展名里输入“.rar”,然后确定即可。
5、 在IE里输入http://localhost/shobaobiao/1.rar,会立即跳转到http://localhost/shobaobiao/WebForm1.aspx,然后按WebForm1.aspx的“下载”按钮就可以下载1.rar了。

但是,当我操作到第五步时,在IE里输入http://localhost/shobaobiao/1.rar 并按回车键后,并没有跳转到http://localhost/shobaobiao/WebForm1.aspx页面,如何解决这个问题啊,请大家支招,谢谢!

#10
foshan2007-04-23 16:50
已解决。
但是,这样的设置,对于用 迅雷 来下载文件,是起不到任何阻止作用的。如何更好地解决这个问题啊??
1