限制访问网站上的图像

Posted

技术标签:

【中文标题】限制访问网站上的图像【英文标题】:Restricting access to images on a website 【发布时间】:2010-11-15 04:45:16 【问题描述】:

我正在建立一个投资组合网站,其中包含许多图片,其中一些我不希望公众看到。我想我会通过电子邮件向某人发送用户名和密码,他们可以使用它们“登录”来查看我的工作。

我在网上看到了各种“隐藏图像”问题的解决方案,包括以下使用 php 的 readfile 的解决方案。我还看到另一个使用 .htaccess。

Use php's readfile() or redirect to display a image file?

我对 readfile 解决方案并不着迷,因为加载图像似乎很慢,我希望能够使用 Cabel Sasser 的 FancyZoom,它需要不受限制地访问图像,(他的库需要一个链接到完整大小的图像),因此排除了 .htaccess。

回顾一下我正在尝试做的事情:

1) 提供一个网站,让用户能够在其中验证自己是否是我想查看我的图像的人。 2) 限制随机网络用户看到这些图像。 3) 使用 FancyZoom 放大缩略图。

我不在乎最终会使用什么技术——javascript、PHP 等——无论是最干净、最简单的。

顺便说一句,我是 Java 开发人员,而不是 Web 开发人员,所以我可能没有正确考虑这个问题。

【问题讨论】:

readfile 的性能不会成为问题,除非您要发送大量图像。对于投资组合网站来说完全没问题。 【参考方案1】:

使用 .htaccess 应该是最安全/最简单的方法,因为它内置于网络服务器本身的功能中。

【讨论】:

我不想使用 Auth 指令,因为它们会弹出一个对话框。我研究了使用以下内容:[code start] SetEnvIf Referer "mydomain.com" ALLOW_ACCESS Deny from all Allow from env=ALLOW_ACCESS [code end] 但是 FancyZoom 图像请求未能通过 SetEnvIf。【参考方案2】:

而不是提供图像的链接。提供指向 cgi 脚本的链接,该脚本将自动提供正确的图像标题和内容。

例如: image.php?sample.jpg

然后,您可以确保它们已作为链接的一部分进行身份验证(例如,传递会话 ID)。

这将是标题的一部分,然后您的图像数据可以跟随。

header('Content-Type: image/jpeg');

编辑:如果它必须要快,你可以用 C/C++ 而不是 php 来编写。

【讨论】:

对,这基本上是readfile的解决方案。我没有意识到我可以在包装我的图像的 a 的 href 中传递 image.php?sample.jpg(FancyZoom 期望缩略图图像由指向全尺寸图像的链接包裹。传递 image.php? href 中的 full_size_sample.jpg 可以解决问题!谢谢。 如果您自己进行此操作,请务必小心不要暴露系统上的所有数据以及使得执行 XSS 攻击变得相当容易。如果您要这样做,可能的文件的白名单是最安全的方法。 你能告诉 MERN 堆栈网站的类似解决方案吗?【参考方案3】:

我不知道它是否符合您的需求,但我通过使用 TinyWebGallery 解决了一个类似的问题(给受限人群提供图片),这是一个小型图库应用程序 没有数据库。

您可以允许通过密码访问不同的目录,并且可以将图片直接上传到文件系统,因为 TinyWebGallery 会即时检查新的目录/图片。它将生成缩略图并让用户可以对图片进行评分/评论(您可以禁用此功能)。

这不是最小的工具,但是我认为它比使用 apache 指令更容易设置,而且它看起来更好作为 裸图像

【讨论】:

【参考方案4】:

如果您使用的是nginx,则可以使用Secure Link module。

【讨论】:

以上是关于限制访问网站上的图像的主要内容,如果未能解决你的问题,请参考以下文章

在不将 ip 列入白名单的情况下限制对 S3 托管网站的访问

Azure Vnet Blob 存储

API接口访问频次限制 / 网站恶意爬虫限制 / 网站恶意访问限制 方案

公网ip被X网站限制访问,现有啥手段可以继续访问X网站?

网站访问限制

如何使用 *** 限制对 S3 托管网站的访问