文件共享网站的PHP安全


PHP Security for File Sharing Website

我正在建立一个文件共享网站,我想问一个关于安全性的问题。我的系统类似于以下网站:FileFlyer、ShareFlare和LetItBit。

当用户想要下载一个文件时,他需要购买一把钥匙,然后他就可以"解锁"文件并下载

问题:一个用户购买密钥并解锁文件后,他可以与所有人共享下载链接。

我的解决方案:当用户解锁文件时,我会将他的IP、文件ID和生成的随机ID插入到SQL表中。下载链接将是一个PHP文件,下载id作为GET参数。在下载链接中,我将检查用户的IP是否匹配。如果是,我将添加一个readfile函数,然后开始下载。

我的问题:这足够安全吗?如果不是,为什么?还有一件事-我将如何拒绝访问文件路径?例如,如果文件路径是www.SITE.com/files/file.rar,我不希望从那里访问文件。

根据您的评论,如果您不允许通过httpd.conf访问目录,这将避免直接的文件路径访问,这将解决您的问题,即在第一人下载并复制静态url并尝试再次下载后,由于目录访问被拒绝,将不会发生这种情况

您可以将文件移动到文档根目录之外,然后当用户想要下载文件时,您可以使用文件读取功能通过PHP进行流式传输。这听起来合理吗?

类似这样的东西:

<?php
// Remember to have path outside document root:
$filename = "/path/to/file";
header("Content-Disposition: atachment; filename=".$filename);
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($filename)); 
header("Pragma: no-cache");
header("Expires: 0");
$fp=fopen($filename,"r");
print fread($fp,filesize($filename));
fclose($fp);
exit();