试图保护多媒体文件

时间:2012-02-05 18:37:27

标签: php security

我用PHP和MYSQL创建了一个数据库系统。它有很多敏感信息,所以我试图提供最好的安全性。

我对视频和音频文件有疑问。我只想要登录并且实际上有权下载文件以便能够下载它们的人,而不是任何只指向媒体文件所在文件夹的人。我怎样才能做到这一点?!谢谢!

3 个答案:

答案 0 :(得分:0)

通过php包装器(即<img src="files/file.php?id=oj348jfoj" />)调用文件,如果用户有权查看文件,则在file.php中输出带有图像标题的文件。在您的表中,您拥有与您的oj348jfoj令牌对应的真实图像URI,这就是您将file.php作为图像加载并输出到请求者的内容。这样,服务器文件的真实URI保持隐藏,您可以检查每个图像加载的访问权限。

答案 1 :(得分:0)

您需要使用PHP流式传输文件。使用查询字符串传递文件的名称,然后将其写入页面。您可以在流式传输文件之前检查权限。

的伪代码:

header("Content-Disposition: atachment; filename=$filename");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize("$path/$filename"));
header("Pragma: no-cache");
header("Expires: 0");
$fp=fopen("$path/$filename","r");
print fread($fp,filesize("$path/$filename"));
fclose($fp);
exit();

答案 2 :(得分:-2)

因此。文件必须在服务器上,这很清楚。这是一个建议:将它们隐藏在某个地方。然后,当用户点击下载时,将其内容复制到临时位置并保存到MySQL表中,到期时间为10-30分钟(如果是巨大的文件可能会更多)。然后用户可以从该链接下载。最后,每隔10-30分钟(相同数量)运行一个删除过期文件的cronjob。

这不是100%的安全性,因为非登录也可以下载,但只有当登录共享URL时,才能将它们发送给他们。