.NET网站 防止地址栏直接下载文件

yuanwudong 2014-09-27 09:50:17
使用到的类是IHttpHandler ,也就是每次请求asp.net网站上的TXT和XLS资源的时候,都会由这个类来请求处理


DownloadHandler.cs 的代码如下:
public DownloadHandler()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 指示IHttpHandler 实例是否可再次使用
/// </summary>
public bool IsReusable
{
get { return true; }
}


public void ProcessRequest(HttpContext context)
{
Uri referrerUri = HttpContext.Current.Request.UrlReferrer;//获取下载之前访问的那个页面的uri
Uri currentUri = HttpContext.Current.Request.Url;
if (referrerUri == null)//没有前导页,直接访问下载页
{
//输出提示,可以根据自身要求完善此处代码
HttpContext.Current.Response.Write("请不要盗链本站资源,请从首页访问。<a href='../index.aspx'>进入首页</a>");
return;
}
}




WEB.config 配置了

<httpHandlers>

<add path="*.txt" verb="*" type="DownloadHandler"/>
<add path="*.xls" verb="*" type="DownloadHandler"/>

</httpHandlers>

别人直接在软件里面打开 我的txt xls 等后缀的文件 就会调用 IHttpHandler 判断是不是直接打开的。是的话不让直接打开 !
在本地测试正常。放到服务器上面。一点用没有。 IHttpHandler 没有被调用。不知道为什么。请高人指点 !
...全文
283 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qzyf1992 2014-09-28
  • 打赏
  • 举报
回复
参考 突然发现刚没放链接 给你放一下 http://bbs.csdn.net/topics/390893900
於黾 2014-09-28
  • 打赏
  • 举报
回复
你的xls文件难道不是从数据库导出的,然后给个动态名字吗? 谁会把xls文件作为静态资源放到服务器上,有数据库不用,用它干嘛. 既然是动态导出的,那么在点导出按钮之前,用户根本就不知道你的文件会叫什么名字,而且知道了也没有用,它现在还不存在. 而如果是过去导出的,既然是刚刚用户自己导出过,那他即使不登陆再次下载,也没有什么问题啊 而且导出的临时文件,你应该定时清理,而不是永久存放 第二天用户还想下载这个文件,已经不存在了
  • 打赏
  • 举报
回复
用个简单的方法,下载地址加个时间戳验证。以前网盘资源解析出来的直链就是这么干的
wish907 2014-09-28
  • 打赏
  • 举报
回复
学到一招....
by_封爱 2014-09-28
  • 打赏
  • 举报
回复
csdn的下载好像也没有解决这个问题.. 比如 我有一个资源 http://download.csdn.net/download/diaodiaop/7611721 你必须要登陆还可以下载是吧.. 但是如果你没登陆 直接打开 http://dlwt.csdn.net/fd.php?i=935576117211683&s=88c6f64e400a5fcc28ac0ef72e79ac6a 依然可以下载...所以csdn都没解决你就先别操心了..不如研究点别的东西...
qzyf1992 2014-09-28
  • 打赏
  • 举报
回复
参考iis中httphandler失效
  • 打赏
  • 举报
回复
在asp.net中,动态产生的数据文件都要放在app_data目录下面。否则放在外边,你的网站可能会不断重启。这是一个常识。
  • 打赏
  • 举报
回复
这个方式其实不现实 --> 这个方式其实不可取 你把所有的符合特定文件后缀的东西都截获了,你降低了网站的效率。
  • 打赏
  • 举报
回复
随便搜了一个文章 http://www.cnblogs.com/basibasi/archive/2008/02/16/1070895.html 这个方式其实不现实。通过访问 http://www.abc.com/mysite/dwnfile.ashx?name=1234.txt http://www.abc.com/mysite/dwnfile.ashx?name=1234.xlsx 这样下载更直接,更容易控制。
myhope88 2014-09-28
  • 打赏
  • 举报
回复
没弄过,帮顶下
moonwrite 2014-09-28
  • 打赏
  • 举报
回复
<httpHandlers> <add path="*.txt" verb="*" type="DownloadHandler"/> <add path="*.xls" verb="*" type="DownloadHandler"/> </httpHandlers> IIS6he IIS7放的地方是不同的~ IIS7 应用程序池 中的 托管管道模式 经典 和 集成 也会去读取web.config不同的位置httpHandlers http://blog.csdn.net/bearwcn/article/details/6428570

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧