我想检查远程图像是否受热链接保护。
- 如果图像不受盗链保护,我想显示图像。(别担心,我会给源添加一个可见的超链接,并且我会给合法所有者删除图像的可能性。)
- 如果图像受到保护,我什么也不做。
是否有可能(使用 PHP 和/或 Javascript)区分受热链接保护的图像和“可热链接”图像?
我想检查远程图像是否受热链接保护。
是否有可能(使用 PHP 和/或 Javascript)区分受热链接保护的图像和“可热链接”图像?
是的,你绝对可以从 PHP 中做到这一点。当您想要热链接文件时,请创建一个 HTTP 连接并在请求中设置Referer 标头到您的站点。如果您收到带有图像数据的 200 响应,则它不受热链接保护。如果您收到 301 转发响应,则它是受热链接保护的。
这样做可能是最简单的:
<img src="http://example.com/image.png" onerror="alert('Image not found or protected');" />
当然,有可能找出答案,但这需要发出 HTTP 请求,这可能会很昂贵——尤其是在远程主机速度慢或负载不足的情况下。
这是你在 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
您无法使用客户端 JavaScript 轻松检测每个 URL,但您可以使用hotlink.js完全规避热链接保护。