5

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.

4

1 回答 1

3

当然有一些方法,有些方法比其他方法更值得信赖。


使用Referer -Header

有一个名为HTTP-Header 的名称Referer,它通常包含一个字符串,表示用户访问该 URL 以访问当前请求。

您可以将其视为“我来自这里”的标题。

如果保证它始终存在,那么防止人们窃取您的带宽将是小菜一碟,尽管由于情况并非如此,因此仅依赖此值几乎是一场赌博(有时可能不存在)。


使用Cookie

判断用户是否是您网站上的真正访问者的另一种方法是使用 cookie,没有 cookie 并试图访问特定资源(例如图像)的用户可能会收到一条消息说“对不起,只有 example.com 的真实访问者才能访问此图像”

太糟糕了,没有任何说明客户端被迫实施和处理 cookie。


使用设置过期时间的链接 [推荐]

这可能是最安全的选择,尽管它是最难实现的。

使用仅在N小时内有效的链接将无法窃取您的带宽,而不会遇到实施某种爬虫的麻烦,该爬虫会定期爬取您的网站并返回访问资源(例如图像)所需的当前访问令牌)。

当用户访问该站点时,生成的N小时令牌将应用于所有可用资源,并将其附加到返回给访问者的路径中。此令牌是强制性的,仅在N小时内有效。

如果用户尝试使用无效/不存在的令牌访问图像,您可以发送回HTTP 状态代码404401作为HTTP 状态代码(最好是后者,因为它是一个禁止请求)。

然而,有一些怪癖值得一提

  • 来自 *search-engine*s 的爬虫可能不会在N小时内的特定时刻访问整个网站,请确保他们可以访问您网站的全部内容。通过使用标头User-Agent的值来识别它们。

  • 不要试图将令牌的寿命降低到任何合理的时间,请记住,有些用户的连接速度很慢,拥有5 秒的令牌可能听起来很酷——但真正的用户可能会被错误地标记。

  • 永远不要将令牌放在人们应该能够从外部点(搜索引擎)找到的资源上,例如包含您希望保护的图像的页面。

    如果您不小心这样做,您将主要损害您网站的声誉。


额外的想法...

请记住,任何实施以使 leechers 无法盗链您的资源的方法都不应导致真正的访问者被标记为带宽 leech。您可能想放松限制而不是加强限制。

我宁愿有 10 个普通访问者和 2 个 leechers,而不是没有 leechers 但只有 5 个普通用户(因为我不小心将 5 个真正的访问者标记为 leechers,而没有考虑太多)。

于 2012-07-17T18:33:34.150 回答