2013-08-21 65 views
2

我需要一种方法来保护下载器看到文件的下载URL。PHP保护下载

这个想法是,用户在付费后被给了一个下载链接,但是阻止他们在没有付费的朋友之间传播URL。

这有什么常见的解决方案?可能更改文件名?

(我可以做PHP和MySQL这个帖子是真的方法)

+0

你总是可以使用重写屏蔽URL。 – 2013-08-21 11:23:34

+0

@remyabel实际上并没有保护文件。 – Prix

+0

@remyabel天才!唯一的问题是,最终用户仍然会看到*一个URL *并能够从该URL *下载该文件。他并不关心它在服务器内部如何被损坏。 – deceze

回答

3

如果用户在您的网站上有一个帐户,如果他们支付了下载,请在您的数据库中存储。然后给他们一个链接,比如download.php,在那里你确认他们是否付费,如果是的话,给文件做一个位置。例如,对于一个.pdf:

if($userpaid === true) { 
    $filename = 'congrat-you-paid-it.pdf'; //Name to display 
    $file = './download/pdf/secretlink.pdf';  
    header('Content-type: application/pdf'); 
    header('Content-Disposition: inline; filename="'.$filename.'"'); 
    header('Content-Length: ' . filesize($file)); 
    @readfile($file); 
    exit; 
} 
3

一种解决方案可能是在运行时使用SESSION或类似的临时存储并生成下载网址。因此,再次点击该网址可能无法正常工作。

此外,不应允许直接访问这些文件。

+0

这是否可以通过电子邮件向他们发送链接?不太熟悉如何做到这一点,但会查看它,谢谢 – user961882

+2

为了清楚起见,这意味着:为每次购买的每个文件创建一个不同的URL。对于同一文件的其他客户而言,这些链接永远不会相同。我也会说:将它们存储在数据库中。通过这种方式,您可以通过电子邮件将链接发送给用户,并且一旦他下载了文件,就可以使链接无效并添加一些附加信息,例如下载的日期和时间。 – insertusernamehere

+0

@ user961882,是的,你可以创建这些链接并通过邮件发送。正如前面的评论中所建议的那样,您可以将这些URL存储在数据库中,另外您可以将它们与用户相关联,以便其他用户无法下载...并下载用户必须登录(当然) –

0

使用会话方便快捷,更好的安全性,你可以做的是:

  • 把实际的文件中的一个单独的文件夹,并把一个的.htaccess其中的 只允许脚本访问该文件。

  • 然后生成一个随机的唯一变量

  • 然后,让这个名称的临时文件,并给予相应的链接到 客户

  • 最后运行cron作业删除不必要的创建的文件。

+1

可能不应该这样做。没有必要物理地操作文件。你可以通过保持文件名不变,然后通过一个唯一的字符串路由到它们来完成同样的事情,只允许使用一次。 – 1mike12

+0

同意@ 1mike12,是一个古老的答案。接受的答案更有意义。 –

1

创建一个令牌。存储在您的最后并使用文件URL发送。当用户点击URL与令牌匹配并允许下载时,然后从存储中删除令牌。 每次注册用户想要下载时,您都必须生成新的令牌。

0

您可以根据下载次数,IP地址以及可能的时间限制下载URL,这样购买了您的下载的用户只能访问该文件,并且当他们给朋友时它不起作用:)

首先你可以测试这个免费的工具,让你在FLY上创建一个受保护的链接http://protectedlinks.net/PLSafe/index.php