我在php中编写一个Web应用程序,用户可以上传自己的文件或图像,但是如何保护这些文件不被所有者以外的其他人访问。想想dropbox,保护这些文件的机制是什么,我试图搜索但是没有得到任何关于此的信息。任何指针或指向教程的任何链接都非常有用。提前谢谢。
答案 0 :(得分:7)
如果您将图像和文件作为二进制blob存储在数据库中,那么只需在从数据库中检索和显示它们之前检查登录用户的权限即可。
如果您将它们存储为常规文件,您需要做的是将它们存储在网站的文档根目录之上,而不能在网络上公开访问它们。然后要检索图像,在检查数据库中的正确所有权后(我们不知道您的体系结构,因此替代您存储了属于谁的内容),PHP可以检索文件并使用正确的标头将其发送到浏览器
例如,要显示图像:
// Check permissions...
// If permissions OK:
$img = file_get_contents("/path/to/image.jpg");
// Send jpeg headers
header("Content-type: image/jpeg");
// Dump out the image data.
echo $img;
exit();
例如,您可以保留一个与用户ID匹配的文件名数据库表,以跟踪谁拥有的内容。
答案 1 :(得分:3)
执行此操作的典型方法类似于......
然后,用户使用该ID从服务器请求文件。
为此,您将拥有一个脚本,该脚本根据ID查询数据库中的文件,然后检查用户是否有权读取它。如果用户具有访问权限,它将读取该文件并将其输出到用户的浏览器。
例如,要在PHP中读取jpeg图像:
<?php
header('Content-type: image/jpg');
readfile('/path/to/image.jpg');
答案 2 :(得分:0)
使用唯一且特殊的文件名,并仅将其显示给被禁用的用户。 您可以在PHP中设置会话,并检查会话是否包含文件是否正确。并使用httacces tio重定向到PHP。
<?
sessuion_start();
file_exists($_SESSION['specialkey']_$_GET['realfilename']){
include(/* include the file */); // or readfile
//or header location, but then the rteal URL will become visible
}else{
die('acces denied');
}
特殊键在显示页面的PHP页面中设置,并且对于evey文件是唯一的,并且是从DB获得的。 这是我能够最快的方式。
您可能还希望将文件存储在只能从PHP访问的目录中
编辑 而不是包括你可以使用Jani Hartikainen方法