gpt4 book ai didi

php - 生成ip和限时下载链接

转载 作者:可可西里 更新时间:2023-11-01 13:03:02 26 4
gpt4 key购买 nike

有一个下载文件的直接链接。用户可以在付款后下载该链接,如下所示:

http://example.com/download/webapp.rar

但我需要生成 ip 和限时下载链接,以防止文件被他人窃取。我想在不使用任何数据库的情况下执行此操作。像这样:

http://example.com/download.php?a5fds588fgdf

http://example.com/download/a5fds588fgdf

有什么技巧吗?

最佳答案

有一个非常好的 nginx 模块可以做到这一点。

URL 有两个参数 - 我们称它们为 s(安全性)和 t(时间戳)。安全性是从时间戳、路径和盐生成的安全哈希(在您的情况下,只需添加 ip)。

$ip = $_SERVER['REMOTE_ADDR'];
$salt = 'change me cause im not secure';
$path = '/download/webapp.rar';
$timestamp = time() + 3600; // one hour valid
$hash = md5($salt . $ip . $timestamp . $path); // order isn't important at all... just do the same when verifying
$url = "http://mysite.com{$path}?s={$hash}&t={$timestamp}"; // use this as DL url

验证:

$ip = $_SERVER['REMOTE_ADDR'];
$salt = 'change me cause im not secure';
$path = $_SERVER['REQUEST_URI'];
$hashGiven = $_GET['s'];
$timestamp = $_GET['t'];
$hash = md5($salt . $ip . $timestamp . $path);
if($hashGiven == $hash && $timestamp <= time()) {
// serve file
} else {
die('link expired or invalid');
}

现在您只需将下载重写到这个“中间人”脚本即可。

nginx 重写示例:

location /download {
rewrite ^.*$ /download.php last;
break;
}

我不太熟悉 apache 重写,所以你可以自己检查一下。

如果您使用以下模块之一,则无需自己验证所有这些,并且在性能方面要好得多,但请注意,它提供了更多配置,有时还提供了另一种生成 url 和哈希的方法(请参阅模块文档在这里)。

或者您只使用 nginx 安全链接模块:http://wiki.nginx.org/HttpSecureLinkModule

还有一个灯饰:http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

或者nginx安全下载模块:http://wiki.nginx.org/HttpSecureDownload

也许 apache 也有一些东西......也许你可以在那里做一些重写......

关于php - 生成ip和限时下载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com