检查远程镜像是否被热链路保护
Check if a remote image is hotlink-protected
我想检查远程映像是否受热链接保护。
- 如果图像没有防止热链接,我想显示图像。(别担心,我会添加一个可见的超链接到源,我将给合法所有者删除图像的可能性。)
- 如果图像是受保护的,我将不做任何事情。
是否有可能(与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完全绕过热链接保护。
相关文章:
- Ember文档理解-模型是否链接到模板
- 链路翻转时的 DIV 背景图像交换
- 涡轮链路触发事件链,但随后发生正常导航(Rails 4)
- 如何在反应路由器上的链路中引用状态
- D3.js力导向图保持恒定的链路距离
- 节点和集群以及使用D3的集群到集群链路
- 链路衰落的奇怪行为
- 手机号码链路检测
- 显示链路去激活的消息
- 增加从节点a到节点b的链路之间的距离
- 只选择链路参数
- 如何切换活动链路
- 如何设置活动链路指示灯位置
- 如何在反应中通过链路路由器获取程序值
- 替换多个链路
- 如何测试CSS文件是否链接在头部
- 如何设置链路的动态id
- ngRoute只对路由配置中的链路使用
- 我如何使网页检查,看看是否链接文件有错误的文件类型检查另一个文件类型
- 检查远程镜像是否被热链路保护