如何防止深度链接到我的网站上的文件

时间:2008-12-27 14:15:49

标签: html hyperlink download access

我拥有一个网站,其中包含大量免费软件可供下载。我面临的问题是来自世界各地的人们正在接受直接联系 的文件(例如.zip文件)并将其发布在他们的网站和一般论坛上。我获得了大量的带宽,这没关系,但访问的页面数量很少。有没有我可以添加到链接的方法或脚本,以便当有人按下来自外国网站的链接时,会打开我网站上的页面,然后让他下载文件以便我可以获得更多访问。

例如,这是我网站上的地址:

  

http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip

当有人按下它时,它将直接开始下载过程。

5 个答案:

答案 0 :(得分:19)

您的站点由Apache Web服务器托管,因此您应该能够在站点的httpd.conf(或虚拟主机块)中执行以下操作

RewriteEngine On
RewriteCond   %{HTTP_REFERER} !^$
RewriteCond   %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/  [NC]
RewriteRule   ^/PublicFiles/  /page-about-direct-links.html

基本上是说:

  1. 打开mod_rewrite引擎
  2. 如果HTTP推荐人不是空白......
  3. 并且不包含我的域名(有或没有“www。”)...
  4. 将/ PublicFiles /下的任何请求重定向到/page-about-direct-links.html
  5. 有关mod_rewrite的更多信息,请访问:mod_rewrite - Apache HTTP Server

答案 1 :(得分:16)

如果您使用的是PHP,则可以使用脚本将用户链接到下载,但前提是$_SERVER['HTTP_REFERER']来自您的网站。如果不是您重定向到您的网站。

答案 2 :(得分:11)

不要提供指向您所服务文件的直接链接。提供一个脚本,一旦您点击提交按钮,脚本就会通过脚本发送内容。

通过cgi进行网络搜索以发送文件。

这是我在网上找到的一个简洁的链接: here

答案 3 :(得分:1)

为什么不将链接设置为动态和间接的,例如:

第X页的

:(静态)

<a href="Y">SuperNeat Program</a>
第Y页

:(动态生成)

Click here to download 
<a href="Z.php?timestamp={timestamp}&counter={counter}&hash={hash}">
SuperNeat Program</a>

并用自1970年以来的msec替换当前时间的时间戳,counter =每次下载时递增一次的计数器,hash =连接的MD5哈希(时间戳,计数器,秘密盐)其中,秘密盐=您保留的任何收藏代码秘密。

然后在页面Z.php上,您只需从计数器和查询字符串中的时间戳重新计算哈希值,检查它是否与查询字符串中的哈希值匹配,并且时间戳是最近的(例如,从前30分钟或60分钟或其他)。如果是,则提供相关文件。如果不是,则抛出错误消息。这为某人提供了一个短暂的时间段来直接链接到您的文件。如果你甚至不想这样,那么跟踪Z.php查询字符串中收到的计数器值,不要多次接受它们。

答案 4 :(得分:0)

我不是网络专家,但我正在考虑以下指针 -

如果您正在使用asp.net,那么在网站级别配置的http处理程序或模块可以提供帮助(很多关于网络上的人的信息,我最近查找了一些工作,这里只有一个article示例

这个想法是在请求到达目标文件之前拦截它并将其重定向到您想要显示的页面;例如 - 如果有人希望浏览您发布的网址(“http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip”)来拦截此调用,请使用一些查找来查找您希望显示的页面并将请求重定向到那里;我在猜测用户跟随链接不会太烦恼(除非他们已经“保存目标为”,这将导致他们保存一些HTML而不是ZIP)。

但是,我的计划中存在一些“漏洞” - 您如何实际提供可在您自己的页面中工作的链接?我相信您可以区分来自您的网站的请求和来自其他人的请求,您可以通过检查请求对象来检查处理程序/模块。