【问题标题】:Creating a private image folder?创建私人图像文件夹?
【发布时间】:2012-06-24 00:37:13
【问题描述】:

我有一个不断增长的网站,其中包含 4 种尺寸的大约 30k 张图片,总共 120k。我目前的解决方案是将它们存储在数据库中,从我在堆栈 oveflow 上阅读的内容来看,这似乎是一个非常糟糕的主意。

我开始明白为什么了。我注意到性能急剧下降。认为显而易见的解决方案是将这些图像移动到文件夹设置中,我想使用用户 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

保护此私人文件夹并仅在文件所有者授予权限的情况下才向其他用户提供访问权限的最佳方法是什么?

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

有什么想法或建议吗?

【问题讨论】:

    标签: php image security


    【解决方案1】:

    您可以使该文件夹无法从 Web 访问(例如,将文件夹放在 htdocs 之外或添加 .htaccess 规则)。

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

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

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

    【讨论】:

      【解决方案2】:

      你可以试试这个

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

      并在 imageViewer.php 中进行所有处理,例如用户是否有权限!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-30
        • 2011-10-01
        • 1970-01-01
        • 2013-04-06
        • 2013-11-30
        • 1970-01-01
        • 1970-01-01
        • 2021-07-12
        相关资源
        最近更新 更多