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/....
使用这样的代码
$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)
| 归档时间: |
|
| 查看次数: |
14619 次 |
| 最近记录: |