如何为可下载文件创建临时链接

Vha*_*jan 8 php cakephp cakephp-1.3

我正在制作一个临时下载链接的项目,以保护文件免受hotlinkers的攻击......

我相信这是可能的.因为我们都知道许多文件共享网站" 不想提及任何 "...他们的文件链接已到期...

防爆.

如果我从他们的网站下载一个文件,他们会提供直接链接点击它吗?但是那个链接会在几小时或几分钟后过期.

我怎么知道链接已过期?如果我在一天后在我的下载管理器上复制相同的链接,则无法下载相同的文件.

我已经做到了这一点htaccess.

防爆.

RewriteRule .*\.(rar|ZIP)$ http://domain.com [R,NC]
Run Code Online (Sandbox Code Playgroud)

如果他们复制浏览器地址栏中的直接链接,他们将被重定向到http://domain.com

但是如果他们在下载管理器上复制直接链接,则会下载该文件.

如果他们将链接发布到论坛网站,博客等任何其他网站,并要求读者将链接复制并粘贴到他们的下载管理器中,以便他们可以直接下载,该怎么办?

这是我想要阻止保护我的文件的问题.我在PHP上这样做,但我无法弄清楚...

非常感激您的帮忙.

Ben*_*ham 24

链接到类似的地方/downloads/abb76b3acbd954a05bea357144d614b4,其中abb ...是一个随机字符串,例如当前时间的盐渍哈希.为某人创建此链接时,将随机字符串存储在数据库表中.此表可能如下所示:

+----+-------------+----------------------------------+---------------------+---------------------+
| id | filename    | token                            | created             | modified            |
+----+-------------+----------------------------------+---------------------+---------------------+
|  1 | image.jpg   | abb76b3acbd954a05bea357144d614b4 | 2012-03-26 19:36:41 | 2012-03-26 19:36:41 |
|  2 | program.exe | 19660d0f5e0ca3d42e1718de5d0a1d7e | 2012-08-29 11:07:58 | 2012-08-29 11:07:58 |
+----+-------------+----------------------------------+---------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

当您收到请求时/downloads/...,查找随机字符串并发回正确的文件.如果created时间戳太旧,请不要这样做.使用cronjob清理旧表行,或者理想情况下,每次有人发出请求时都要这样做/downloads/....


Sta*_*ble 2

使用这样的代码

 $path="uploads/";
                  $actualfilename=$path.$filename;
                  $fakefilename="downloadfile.pdf";
                   if($typeofview=="download") {
                          @readfile($actualfilename);
                        header('Content-type: application/pdf');
                        header('Content-Disposition: attachment; filename="' . $fakefilename . '"');
                        header('Content-Transfer-Encoding: binary');
                        header('Content-Length: ' . filesize($actualfilename));
                        header('Accept-Ranges: bytes');
                        exit;
Run Code Online (Sandbox Code Playgroud)

将其添加到您的 .htaccess 文件中

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule fakefile.php(.*)$ orignalfile.php?$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)