想象一下这种情况
这有一个问题:
其他用户仍然可以从其绝对路径访问图片。 有什么方法可以阻止这种情况吗?
答案 0 :(得分:3)
将图像存储在Web根目录之外,并有一个PHP脚本,用于确定当前用户是否有权访问它,如果是,则返回图像内容,否则返回403 Forbidden错误。
您可以将文件看起来,就像您正在为原始图片提供服务一样:
使用此.htaccess
:
RewriteEngine on
RewriteRule images/(.*) image.php?file=$1 [L]
然后您的image.php
可以是:
<?php
$file = $_GET['file'];
// use $file to look up file information, eg. in the database
if( $it_exists && $has_permission_to_view) {
readfile("/root/path/to/real/images/".$file);
exit;
}
else header("HTTP/1.1 403 Forbidden");
答案 1 :(得分:0)
您可以将图像存储在具有由“uniqid”功能生成的复杂文件夹名称的绝对路径中,但会将其作为流式传输显示给用户。使用PHP脚本,您可以从绝对路径读取图像数据,并将其作为数据流传递给浏览器。如果你从一开始就这样做,没有人会知道绝对路径。然后,当用户将图像设为私有时,使用具有查看图像权限的PHP脚本进行检查,如果检查为真则将数据流传输给用户,如果不是,则不执行任何操作或流式传输“无图像”gif。
我几年前就已经这样做了,但是在这一刻我找不到我用过的功能。但这并不复杂。
参见例如:
http://www.php.net/manual/en/function.imagejpeg.php
http://www.php.net/manual/en/function.imagecreatefromstring.php