PHP - 保护数字下载

时间:2011-03-23 22:16:49

标签: php download download-manager

我正在尝试弄清楚如何保护PHP中的数字下载。只需要一些一般的指示,这样我就可以开始我的研究。我似乎无法找到任何有用的东西。

我想让我的用户可以下载文件,但不希望他们能够直接访问下载文件夹。此外,我希望下载链接仅在设定的时间段或单次下载时可用。

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:10)

最好的方法是将支票后的下载管理委托给apache的mod

x_sendfile

https://tn123.org/mod_xsendfile/

用法:

<?php
...
if ($user->isLoggedIn())
{
    header("X-Sendfile: $path_to_somefile");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$somefile\"");
    exit;
}
?>
<h1>Permission denied</h1>
<p>Login first!</p>

基本上,当你发送标题X-Sendfile时,mod会拦截文件并为你管理下载(文件可以在虚拟主机之外随时找到)。

否则你可以实现一个简单的文件download.php来获取文件的id并在登录检查后用readfile打印内容

答案 1 :(得分:1)

只是一些示例:您可以将文件放在Web服务器的文档根目录之外,或者放在受.htaccess文件保护的目录中,并使用“全部拒绝”规则;然后通过自定义PHP函数传递文件,该函数设置正确的标题(mime-type,filesize等)并返回文件。

你可以创建基于MD5或SHA1哈希的唯一id的链接 - 一个mod_rewrite规则将id指向你的PHP文件,你在数据库中查找id并进行时间检查,比如

example.com/downloads/73637/a8d157edafc60776d80b6141c877bc6b

被重写为

example.com/dl.php?id=a8d157edafc60776d80b6141c877bc6b&file=73637

以下是使用nginx和PHP执行所需操作的示例: http://wiki.nginx.org/HttpSecureLinkModule

答案 2 :(得分:0)

Secure Download Links”,PHP脚本可用于隐藏下载URL或重命名下载文件,它可以选择存储在web根目录下以及存储在webroot上面的文件,也可以使用绝对的http URL。