【问题标题】:How can you prevent direct browsing to an image in a web directory?如何防止直接浏览到 Web 目录中的图像?
【发布时间】:2009-03-03 20:47:50
【问题描述】:

我正在创建一个您必须登录才能访问的图片库网站。该站点将使用会话来跟踪用户名和密码。登录的用户将能够搜索图像并查看结果。据推测,这意味着我将把图像放在网络目录中。如何让未登录的人无法直接浏览此目录中的图像?

这是基于 PHP 的,带有 MySQL。

【问题讨论】:

    标签: security permissions


    【解决方案1】:

    检查引荐来源标头,并要求它来自您的网站。 您还可以检查 cookie 是否已发送给您(他们已登录)。

    您最好的选择是让 PHP 从您的网络目录之外的位置获取图像。

    另外,查看注释字符串:使用 mod_rewrite 可以直接从 apache 完成所有这些操作。

    【讨论】:

    • 这个解决方案最好的一点是你可以在你的 Apache .htaccess 文件中完成它,所以它根本不依赖你的程序。
    • 请记住,当有人打算访问您的图像时,引荐来源标头可能会被欺骗并且不可靠。但是,其他解决方案效果很好。
    【解决方案2】:

    将图片放在无法通过直接 URL 访问的文件夹中,并让程序直接提供图片

    【讨论】:

      【解决方案3】:

      不要将图像放在可浏览的目录中。更好的是,将它们存储在您的 webroot 之外。在用户经过验证和验证后,放置某种自定义处理程序将加载请求的图像并将其发送回用户。这也将防止您的图像的热链接。

      【讨论】:

        【解决方案4】:

        将图片放在网站外部的文件夹中,并使用代理页面将图片发送到浏览器。在 img 标签中创建一个用作 url 的页面,例如:

        getimage.php?id=8783475

        在页面中,您检查用户是否已登录,并根据参数确定要发送什么图像。将页面的内容类型设置为与图片匹配的类型,例如“image/jpeg”,读取图片文件直接发送到响应流。

        【讨论】:

          【解决方案5】:

          如果您的图片不是太大,有一种非常聪明的方法可以保护它们免受未经授权的访问。 您可以使用 base64 编码,与 Outlook Express 附件编码相同,并将代码放在使用 SESSION 对象的 ASP 页面中。有关此主题的更多信息,请参阅 ASP 教程。 当用户访问该页面时,asp 代码会检查用户是否已通过身份验证。如果他不是,脚本会中断页面​​代码,而不是可视化图像。 如果用户通过身份验证,则脚本会加载整个页面,并将 base64 重建为可见图像。 这里的技巧是您没有包含纯图像的目录,但是图像在页面 html 中编码,因此它是由脚本动态重建的。 由于目录中没有图像,因此没有人可以尝试将浏览器直接指向它们,因为它们根本不存在。 您可以使用此站点对图像进行编码:

          http://www.motobit.com/util/base64-decoder-encoder.asp

          然后你必须使用这个标签在 html 代码中“调用”图像:

          img src="data:image/gif;base64, .................... ............(这里放置从上面网站获得的代码)......

          你已经完成了!如果用户未登录,则无法访问您的图像。

          【讨论】:

            【解决方案6】:

            不要让别人直接访问你的图片目录。

            让您的图片库软件将图片转发给用户。检查所需的凭据。

            【讨论】:

              猜你喜欢
              • 2014-09-15
              • 2012-11-19
              • 1970-01-01
              • 1970-01-01
              • 2011-04-28
              • 1970-01-01
              • 2013-12-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多