1

我想检查远程图像是否受热链接保护。

  • 如果图像不受盗链保护,我想显示图像。(别担心,我会给源添加一个可见的超链接,并且我会给合法所有者删除图像的可能性。)
  • 如果图像受到保护,我什么也不做。

是否有可能(使用 PHP 和/或 Javascript)区分受热链接保护的图像和“可热链接”图像?

4

4 回答 4

4

是的,你绝对可以从 PHP 中做到这一点。当您想要热链接文件时,请创建一个 HTTP 连接并在请求中设置Referer 标头到您的站点。如果您收到带有图像数据的 200 响应,则它不受热链接保护。如果您收到 301 转发响应,则它是受热链接保护的。

于 2013-01-22T01:16:21.830 回答
1

这样做可能是最简单的:

<img src="http://example.com/image.png" onerror="alert('Image not found or protected');" />

当然,有可能找出答案,但这需要发出 HTTP 请求,这可能会很昂贵——尤其是在远程主机速度慢或负载不足的情况下。

于 2013-01-22T01:13:46.653 回答
1

这是你在 Ruby 中的做法

class CheckImageHotlinkStatus
  require 'net/http'
  require 'uri'
  def self.call(image_url)
    uri = URI(image_url)
    req = Net::HTTP::Get.new(uri)
    req['Referer'] = 'http://your-site-here.com'
    response = Net::HTTP.start(uri.hostname, uri.port) do |http|
      http.request(req)
    end
    # Net::HTTPForbidden ...download & embed
    # Net::HTTPOK ...fine to hotlink
    # ...everything else 
    puts response.class
  end
end
于 2016-06-17T17:28:02.050 回答
0

您无法使用客户端 JavaScript 轻松检测每个 URL,但您可以使用hotlink.js完全规避热链接保护。

于 2018-02-27T19:27:00.460 回答