Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在服务器上存储私有映像的正确方法?_Php_Image_Security_Server_File Management - Fatal编程技术网

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

Php 在服务器上存储私有映像的正确方法?,php,image,security,server,file-management,Php,Image,Security,Server,File Management,我编写了一个PHP脚本来检索不在public_html文件夹下的图像。该脚本验证用户是否具有查看图像的权限,然后显示图像。图像权限设置为“0755” 这是防止其他人查看私人图像的安全方法吗?对图像文件名进行哈希运算会增加安全性吗?是否有其他替代方法可以改进此脚本 image_retrieval.php的脚本 <?php include '../user_verification.php'; $image_request = $_GET['image_request']; $pic = fi

我编写了一个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>


因为这些图像不是公开的,所以已经足够好了。散列名称唯一的好处是它们更加独特,您可以将它们全部存储在一个目录下,但如果您真的需要,我建议您使用时间戳,因为这不会与其他图像发生冲突

否则,将图像存储为散列仅在auth层受到某种损害时才证明是有用的。但如果发生了这种情况,那么不久之后就有人可以列出其中的所有内容


从您上面发布的代码来看,似乎所有图像都在一个地方,我要做的是分别存储每个用户的图像,这样即使身份验证层以某种方式对某个人造成危害,也只有个人图像处于危险中,而不是每个人的。如果需要,可以按照您所说的方式对它们进行散列,或者使用彼此不冲突的名称存储它们,同时将对该图像的引用存储在数据库中

在PHP中,脚本处理身份验证,一旦得到验证,它将设置几个带有“X-Sendfile”的响应头,通知web服务器传递文件;脚本结束,web服务器接管

选中此项:

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