创建私有图像文件夹?

时间:2012-06-23 16:29:28

标签: php image security

我有一个不断增长的网站,有4种大小的3万张图像,总共120k。我目前的解决方案是将它们存储在数据库中,从我在堆栈上看到的内容来看,这似乎是一个非常糟糕的主意。

我开始明白为什么了。我注意到性能急剧下降。认为显而易见的解决方案是将这些图像移动到文件夹设置中,我想将用户ID用作目录名称,然后使用公共和私有子目录。

结构如下所示:

/54869
    /public
        /size_1/img1.jpg
        /size_2/img1.jpg
        /size_3/img1.jpg
        /size_4/img1.jpg
    /private
        /size_1/img2.jpg
        /size_2/img2.jpg
        /size_3/img2.jpg
        /size_4/img2.jpg

保护此私人文件夹的最佳方法是什么,如果文件所有者已授予权限,则仅提供其他用户访问权限?

我还想阻止用户只是查看任何文件夹的内容,但我想我可以执行检查客户端来解决此问题。

有任何想法或建议吗?

2 个答案:

答案 0 :(得分:3)

您可以从网络上访问该文件夹(例如将文件夹放在htdocs之外或添加.htaccess规则)。

创建一个PHP脚本,处理对私有映像的所有请求。 该脚本必须执行以下操作:

  • 检查用户是否经过身份验证
  • 检查用户是否有权查看所请求的图像
  • 打开图像并将其打印到浏览器(您需要设置正确的http标头以确保将内容视为图像)

然后,在您的HTML中,只需指向/secret_image.php?id=3或者您想要使用图片的路径/secret_image.php?p=/54869/public/size_1/img1.jpg

答案 1 :(得分:0)

你可以试试这个

imageViewer.php?imgID=XXX;     where XXX=hashFunction(salt.imgName)

如果用户有权限,请执行 imageViewer.php 中的所有处理!