我用PHP和MYSQL制作了一个数据库系统。它有很多敏感信息,所以我试图把最好的安全性。试图保护多媒体文件
我对视频和音频文件有疑问。我只想要登录并且实际上有权下载文件以便能够下载它们的用户,而不是任何只指向媒体文件所在的文件夹的用户。我怎样才能做到这一点?!谢谢!
我用PHP和MYSQL制作了一个数据库系统。它有很多敏感信息,所以我试图把最好的安全性。试图保护多媒体文件
我对视频和音频文件有疑问。我只想要登录并且实际上有权下载文件以便能够下载它们的用户,而不是任何只指向媒体文件所在的文件夹的用户。我怎样才能做到这一点?!谢谢!
通过一个php包装器(即<img src="files/file.php?id=oj348jfoj" />
)调用你的文件,并在你的file.php文件中输出带有图像头的文件,如果用户有权查看文件的话。在你的表中,你有与你的oj348jfoj
标记对应的真实图像URI,这就是你file.php加载并输出为请求者的图像。通过这种方式,服务器文件的真实URI保持隐藏状态,您可以检查每个图像加载的访问权限。
所以。这些文件必须在服务器上,这很明显。这里有一个建议:将它们隐藏在某个地方。然后,当用户点击下载时,复制将其内容复制到临时位置并保存到10到30分钟的MySQL表中(如果HUGE文件可能更多)。然后用户可以从该链接下载。最后,每10-30分钟(等量)运行一次cronjob,删除过期的文件。
这不是100%的安全性,因为一个未登录的用户也可以下载,但只有当登录的用户共享URL时,他们才可以直接发送给他们。
您需要使用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();
你存储数据库或文件系统上的文件? – Vyktor 2012-02-05 18:43:45