如何防止深层链接到我网站上的文件
题
我拥有一个网站,其中包含许多可供下载的免费软件。我面临的问题是,来自世界各地的人们正在采用文件的直接链接(例如.zip文件),并将其发布在其网站和一般论坛上。我获得了大量的带宽,这没关系,但访问的页面数量很少。有没有一种方法或脚本可以添加到链接中,以便当有人按下外国网站的链接时,我的网站上的页面会打开,然后让他下载文件,以便我可以获得更多访问量。
例如,这是我网站的地址:
当有人按下它时,它会直接开始下载过程。
解决方案
如果您使用的是PHP,你可以将用户链接到下载,但只有在$_SERVER['HTTP_REFERER']
是从您的网站的脚本。如果不是您重定向到您的网站。
其他提示
您的站点由 Apache Web 服务器托管,因此您应该能够在站点的 httpd.conf(或虚拟主机块)中执行以下操作
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/ [NC]
RewriteRule ^/PublicFiles/ /page-about-direct-links.html
这基本上是在说:
- 打开 mod_rewrite 引擎
- 如果 HTTP Referrer 不为空...
- 并且不包含我的域名(带或不带“www”)...
- 将 /PublicFiles/ 下任何内容的请求重定向到 /page-about-direct-links.html
有关 mod_rewrite 的更多信息可以在这里找到: mod_rewrite - Apache HTTP 服务器
为什么不只是使链接动态和间接的,例如:
上页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年以来,计数器=你每次下载递增一次的计数器,散列= MD5串连的哈希值(时间戳,计数器,秘密盐),其中秘密盐=任何喜爱代码你保持替换时间戳瓦特/毫秒计的当前时间秘密。
然后在页面Z.php,你只是前30分钟内重新计算从查询字符串中的计数器和时间戳的哈希,检查它的查询字符串的哈希值匹配,并且该时间戳是最近的(例如,或者60分钟或其他)。如果是的话,服务有问题的文件。如果不是,抛出一个错误消息。这给某人只是短暂时间内直接链接到您的文件。如果你甚至不希望出现这种情况,然后继续在Z.php查询字符串收到的计数器值的跟踪和不接受他们不止一次。
我不是在所有的网络专家,但我在想下面的指针 -
如果您正在使用asp.net可以通过http在网站级别的帮助(对那些在网络上的信息很多的配置处理程序或模块,最近我看着它的一些工作,这里有一个的文章例如
我们的想法是它到达目标文件之前拦截该请求并将其重定向到要显示的页面;例如 - 如果有人想浏览到您发布的URL(“ HTTP ://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip “)截获此调用,使用一些查找,找到你想有显示和重定向请求的页面;我猜用户下面的链接会不会太恼火(除非他们做了“目标另存为”,这将导致他们节省一些HTML而不是ZIP)。
然而,有一些“洞”在我的计划 - 你如何实际提供的从自己的网页作品的链接?我相信你可以从你的网站来请求和那些从别人的,你可以通过检查请求对象检查处理程序/模块来区分。