在服务器上存储私有图像的正确方法?

时间:2015-07-08 21:15:41

标签: php image security server file-management

我编写了一个PHP脚本来检索不在public_html文件夹下的图像。该脚本验证用户是否有权查看图像然后显示它。图像权限设置为" 0755"

这是一种防止其他人查看私人图像的安全方法吗?散列图像文件名会增加任何安全性好处吗?还有其他可以改进此脚本的替代方法吗?

image_retrieval.php的脚本

<?php
include '../user_verification.php';
$image_request = $_GET['image_request'];
$pic = file_get_contents("/home/username/images/'.$image_request.'");
header('Content-type: image/jpeg');
echo $pic;
?>

display_image.php的脚本

    <?php
include '../world/verification.php';
$image_request = $_GET['image_request'];
echo"<img src='http://www.domainname.com/request_image.php?userid=$userid&image_request=$image_request'>";
?>
<form id='image_requester' method='get' action='display_image.php'>
    <input type="text" id="image_request" name="image_request">
    <input type="hidden" value="<?echo"$userid";?>" id="userid" name="userid">
    <input type="submit" value="request">
</form>

2 个答案:

答案 0 :(得分:1)

由于图像不公开,因此足够好。散列名称的唯一好处是它们会更独特,你可以将它们全部存储在一个目录下,但如果你真的想要我建议使用时间戳,因为它不会与其他图像冲突!

否则,如果以某种方式损害了auth层,则将图像存储为哈希只会证明是有用的。但如果发生这种情况,那么不久之后有人可以列出那里的所有内容。

从上面发布的代码来看,似乎所有图像都在一个地方,我要做的是分别存储每个用户的图像,这样即使auth图层在某种程度上对某人有所妥协,只有那些人的图像在风险而不是每个人的风险。如果需要,请按照您的说法对它们进行哈希处理,或者使用不会相互冲突的名称存储它们,同时将对该图像的引用存储在数据库中。

答案 1 :(得分:0)

在PHP中,脚本处理身份验证,一旦得到验证,它将使用&#39; X-Sendfile&#39;设置一些响应头。告诉Web服务器传递文件;脚本结束,Web服务器接管。

检查一下:

http://blog.jasny.net/articles/how-i-php-x-sendfile/