PHP中的可过期下载链接

时间:2017-12-12 14:25:37

标签: php

我知道有关此主题的类似帖子,但我无法弄清楚。因为我是这个领域的新手。

  1. 我有一个网站主机和一个下载主机。我想将 .rar 文件上传到我的下载主机,并提供48小时访问的下载链接。像这样:(虽然文件名是 a.rar ,例如,URL是其他的东西)
  2. www.example.com/sdf3r234/dfsf3434fd368jmnvnbvb34.rar

    我的网站已准备就绪,这是最后一部分,也是最具挑战性的部分。重要部分。我不知道该读什么或做什么。

2 个答案:

答案 0 :(得分:4)

使用linux符号链接。将您的rar文件保存在一个单独的位置,无法从Internet访问。在文档根目录中创建一个指向所需rar文件的符号链接,添加到包含日期和时间的数据库表中,并在48小时后删除记录和符号链接。

如果您不能/无法使用数据库,请在符号链接名称中包含日期和时间,并每小时运行一次脚本进行清理,使用glob()来检索符号链接列表,解析日期和从文件名开始的时间,然后决定要删除哪些。

关于ln命令:

ln -s /home/myuser/rarstorage/originalrarfile.rar /var/www/download/201712171536randomcharacters.rar

我假设您的rar文件存储在/home/myuser/rarstorage中。无法从任何网址访问此目录。

我认为您的网站位于/var/www

ln命令会在originalrarfile.rar内创建指向/var/www/download的符号链接。在我的例子中,我将格式为yyyymmddhhii的日期和时间包含在符号链接名称中。

如果您有shell访问权限,请手动尝试。

您可以使用symlink() PHP命令获得相同的结果。

要检查下载是否过期,请使用glob()功能列出所有符号链接。 你有一个文件数组。解析每个名称并转换为日期和时间,与当前日期和时间进行比较,确定是否必须删除符号链接。

您应该每小时查看过期文件,因此如果您的托管不允许使用cron,您最好使用cronjob或以其他方式模拟它。

如果您的提供商不允许文档根目录之外的目录,只需在文档根目录中创建rarstorage目录,并使用此.htaccess文件阻止对它的任何访问:

deny from all

答案 1 :(得分:0)

您可以将过期日期添加到您的URL并在PHP中检查 - 如果日期是将来,请提供文件,否则将失败。是的,在这种简单的方法中,攻击者可能只是篡改数据并更改过期日期。因此,您可以添加另一个包含日期安全哈希的URL参数和仅由您知道的秘密 - 如果哈希丢失或散列密码且您的过期日期与提供的哈希不匹配,则不得提供该文件。

这比Ghigo的方法容易一些,因为你不需要数据库