防止在php中直接下载zip文件

时间:2016-05-26 22:02:15

标签: php

我想保护我网站上的直接下载(复制/粘贴链接)。  我发送电子邮件中的下载链接,链接就像它目前可以通过直接链接输入访问,但我希望它只在单击电子邮件链接时才能工作,我知道这可以通过检查会话变量来完成,但问题是我没有任何登录模块。

2 个答案:

答案 0 :(得分:4)

如果客户的IP必须在同一会话中下载,您可以根据客户端的IP创建一个特殊的访问令牌。

e.g。

$downloadKey = md5($filename . '_' . $_SERVER['REMOTE_ADDR']);
$_SESSION[$downloadKey] = $downloadKey;
//  Include download link with key=$downloadKey

然后,处理ZIP下载的PHP代码可以重新哈希请求的客户端IP和文件名,以查看它是否与会话值匹配。如果匹配,则可以继续下载。

$request = md5($requestedFilename . '_' . $_SERVER['REMOTE_ADDR']);
if (isset($_SESSION[$request]) && file_exists($requestedFilename)) { 
{
   // stream file
   unset($_SESSION[$request]);
}
else {
   // 401 unauthorized
}

这假设已经从网上看不到zip文件,并且您正在打开并从PHP脚本中流式传输它。

答案 1 :(得分:1)

如果你有电子邮件/文件名,你不需要任何“登录模块”(你如何收到这些电子邮件是另一个问题)

简单:为每个电子邮件地址+文件名创建唯一链接(例如)https://example.com/download.php?file=ENCRYPTED_EMAIL_FILE_NAME,发送链接。

download.php脚本解密点击的$ _GET ['file'],并将其发送到具有正确标头的浏览器。如果解密失败,请显示404,登录黑客尝试或类似的事情。

如果你没有电子邮件,那么,也许你应该学习一些关于CMS /框架/数据库等的知识。