【问题标题】:How to avoid the direct access of images [closed]如何避免直接访问图像[关闭]
【发布时间】:2020-10-26 01:28:53
【问题描述】:

我有一个图片文件夹,例如

 - www.domain.com/images/1.jpg
 - www.domain.com/images/2.jpg
 - www.domain.com/images/3.jpg

我想在 AJAX 请求时显示图像,否则请避免直接访问(浏览器地址栏)。 这个场景如何实现?

更新 以一种简单的方式,我希望在我的网站上请求时显示图像,无论是 AJAX 还是任何其他请求。但如果之前没有请求,要避免直接访问图像。例如,我有一个图像“domain.com/images/myimage.jpg”。所以在访问者通过我的网站前端请求之前,该图像不应直接访问(浏览器地址栏)。

请注意:已经检查了其中一些类型的真实示例。我知道他们的图片名称,但是当我将链接放在地址栏上时,它会显示Access Denied,直到我从他们的网站请求,并且他们正在使用 AJAX 请求。

【问题讨论】:

  • Ajax 请求从不显示图像,它们只能检索图像数据或图像 url。如果他们返回和图像 url,则浏览器必须向该 url 发出请求以显示您不想要的内容。我能想到的唯一可行的方法是拒绝通过 htaccess 或类似方法访问所有图像文件,然后在您的 php 中,获取文件内容并将它们作为 base64 编码字符串返回到 ajax 并让前端使用那个。
  • 正如 hardillb 下面提到的,您可以通过某些标头过滤请求,但请注意,这种方法很容易被绕过。
  • 而且任何选项都不会被视为“保护”图像,因为一旦您展示它,它的游戏就结束了。
  • 以一种简单的方式,我希望在我的网站上请求时显示图像,无论是 AJAX 还是任何其他请求。但如果之前没有请求,要避免直接访问图像。例如,我有一个图像“domain.com/images/myimage.jpg”。因此,在访问者通过我的网站前端请求之前,该图像不应直接访问(浏览器地址栏)。

标签: php ajax


【解决方案1】:

您实际上想在这里解决什么问题?

如果图像显示在页面上,则无法阻止人们下载该图像,但您可以阻止人们在从您的网站提供图像的同时将图像嵌入到他们自己的网站中。

无需通过 AJAX 加载图像。

最简单的方法是根据referrer header过滤访问。

这意味着只有在站点页面中包含图像(或客户端专门设置正确的标题)时才能访问图像

【讨论】:

  • 以一种简单的方式,我希望在我的网站上请求时显示图像,无论是 AJAX 还是任何其他请求。但如果之前没有请求,请避免直接访问图像。例如,我有一个图像“domain.com/images/myimage.jpg”。因此,在访问者通过我的网站前端请求之前,该图像不应直接访问(浏览器地址栏)。
  • 那么基于引用的过滤就是解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-12-14
  • 2016-06-23
  • 2011-04-28
  • 2016-09-25
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多