我目前正在为一个客户创建一个网站,主要涉及销售各种文件。这显然是一件很常见的事情,这让我觉得自己有点愚蠢,因为我没有想出一个方法来做这件事。
完成购买后,应将客户带到包含下载链接的页面,并接收包含下载链接的电子邮件,以及包含将为其创建的帐户信息的电子邮件(他们也可以从帐户的控制面板下载)。我想弄清楚的是如何隐藏/隐藏文件在我的服务器上的位置,这样购买它的人就不能简单地将文件的直接链接复制并粘贴到其他地方。即使我请求下载一个文件,一个http://example.com/blah/download/454643格式的链接,一个与文件的实际位置不对应的网址,我认为仍然有可能在服务器上找到文件。我真的不太了解权限是如何在我的服务器上工作的,这就是为什么我会问。提前感谢:)
发布于 2008-10-16 23:40:38
您基本上不会将文件的直接URL提供给用户。基于服务器的权限在这里没有任何作用。
假设您将所需的文件保存在/data/ files /file.pdf中(将文件存储在web根目录之外的最佳实践)。您可以为用户提供一个类似于/download.php?auth=32的下载链接
当用户点击链接时,download.php将检查会话/cookie是否通过身份验证,以及下载id是否有效(如果您有基于时间的下载到期),然后download.php将从其位置读取所需的文件,并将其与适当的头部一起发送到浏览器以强制下载。
发布于 2008-10-17 07:37:10
将这些文件存储在您的web根目录下,但请确保您存储它们的文件夹位于php.ini文件的"open_basedir“指令中,这将允许您从PHP脚本访问它们。将它们存储在web根目录之外意味着它们永远不会通过HTTP直接访问。
有一个PHP脚本,就像这些答案中列出的那些可以流式传输/读取文件。如果它是一个大文件,您可能需要更改"max_execution_time“,以说明脚本读取文件所需的额外时间。此脚本将允许您对用户进行身份验证,并检查他们是否已为文件付费。
在包含脚本的文件夹中放置一个.htacces,该脚本将从该文件夹请求的文件重写为变量。这使得它们看起来像是在直接访问文件,而不是。就我个人而言,为了简单起见,我只会把这个脚本放在这个文件夹中。所以:
http://www.yourdomain.com/files/expensive_song.mp3
实际上重写为:
http://www.yourdomain.com/files/download_file.php?filename=expensive_song.mp3
祝好运。
发布于 2008-10-17 01:32:22
如果你有运行Lighttpd的权限,你绝对应该看看Mod_SecDownload模块。我在之前的一个安全销售视频和图像文件的项目中使用过这个。
由于who服务器不知道应用程序中使用的任何权限,因此每个知道
的用户都可以使用生成的URL。
mod_secdownload通过引入一种在指定时间内对URL进行身份验证的方法来解决此问题。在允许文件被are服务器下载之前,应用程序必须生成令牌和时间戳,并由are服务器进行检查。
生成的URL必须具有以下格式:
/哪个看起来像"yourserver.com/bf32df9cdb54894b22e09d0ed87326fc/435cc8cc/secure.tar.gz“
是的MD5
具有秘密字符串的用户(user supplied)
正如您所看到的,令牌根本没有绑定到用户。唯一的限制因素是时间戳,它用于在给定的超时(secdownload.timeout)之后使URL无效。
https://stackoverflow.com/questions/210645
复制相似问题