Is there a way to find out if anyone is calling the image located on my website directly on their website?
I have a website and I just want to make sure no one is using my bandwidth.
Is there a way to find out if anyone is calling the image located on my website directly on their website?
I have a website and I just want to make sure no one is using my bandwidth.
当然有一些方法,有些方法比其他方法更值得信赖。
有一个名为HTTP-Header 的名称Referer
,它通常包含一个字符串,表示用户访问该 URL 以访问当前请求。
您可以将其视为“我来自这里”的标题。
如果保证它始终存在,那么防止人们窃取您的带宽将是小菜一碟,尽管由于情况并非如此,因此仅依赖此值几乎是一场赌博(有时可能不存在)。
判断用户是否是您网站上的真正访问者的另一种方法是使用 cookie,没有 cookie 并试图访问特定资源(例如图像)的用户可能会收到一条消息说“对不起,只有 example.com 的真实访问者才能访问此图像”。
太糟糕了,没有任何说明客户端被迫实施和处理 cookie。
这可能是最安全的选择,尽管它是最难实现的。
使用仅在N小时内有效的链接将无法窃取您的带宽,而不会遇到实施某种爬虫的麻烦,该爬虫会定期爬取您的网站并返回访问资源(例如图像)所需的当前访问令牌)。
当用户访问该站点时,生成的N小时令牌将应用于所有可用资源,并将其附加到返回给访问者的路径中。此令牌是强制性的,仅在N小时内有效。
如果用户尝试使用无效/不存在的令牌访问图像,您可以发送回HTTP 状态代码404
或401
作为HTTP 状态代码(最好是后者,因为它是一个禁止请求)。
然而,有一些怪癖值得一提:
来自 *search-engine*s 的爬虫可能不会在N小时内的特定时刻访问整个网站,请确保他们可以访问您网站的全部内容。通过使用标头User-Agent的值来识别它们。
不要试图将令牌的寿命降低到任何合理的时间,请记住,有些用户的连接速度很慢,拥有5 秒的令牌可能听起来很酷——但真正的用户可能会被错误地标记。
永远不要将令牌放在人们应该能够从外部点(搜索引擎)找到的资源上,例如包含您希望保护的图像的页面。
如果您不小心这样做,您将主要损害您网站的声誉。
请记住,任何实施以使 leechers 无法盗链您的资源的方法都不应导致真正的访问者被标记为带宽 leech。您可能想放松限制而不是加强限制。
我宁愿有 10 个普通访问者和 2 个 leechers,而不是没有 leechers 但只有 5 个普通用户(因为我不小心将 5 个真正的访问者标记为 leechers,而没有考虑太多)。