如何防止我的网站上的资源热链接(“图像盗窃”/“带宽盗窃”)?

如何防止我的网站上的资源热链接(“图像盗窃”/“带宽盗窃”)?

我正在尝试编写“终极”反热链接.htaccess......

你可以找到很多示例/教程/发电机但其中很多都是错误的或不完整的(甚至两者兼而有之)。

这些是我正在寻找的功能:

  • 当 HTTP_REFERER 是外部站点时,必须阻止文件扩展名列表的热链接。
  • 必须允许当前域的热链接(duh)而不在 .htaccess 中对其进行硬编码。
    • 对于当前域,它必须在 http 和 https 下工作。
    • 对于当前域名,它必须与 www 一起使用,也可以与不带 www 一起使用。
  • 必须能够向这些规则添加例外域(例如我们的朋友 Google),并且这些域必须在 http 和 https 下以及带有 www 或不带有 www 的情况下工作。

这是我目前所取得的成就:

<IfModule mod_rewrite.c>

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]

</IfModule>

我的问题:

  1. 如何避免mydomain.com在 .htaccess 中进行硬编码?(如果能够将此 .htaccess 部署到我的所有域而不必为每个域进行修改,那就太好了。)
  2. 在我的 RewriteRule 中,gif|jpe?g|png|zipx?相当于gif|jpg|jpeg|png|zip|zipx对吗?(抱歉,我对正则表达式还不熟悉。)
  3. 您是否发现我的 .htaccess 中存在我不知道的错误?

对于 #1,我知道这在某种程度上是可能的。我发现最接近的是从 URL 中删除 www 的代码片段,而无需对域名进行硬编码。有没有办法将此方法用于我的问题 #1?

RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

更新:

我知道有些解决方案会提供带水印的图片而不是普通图片。但我不是在寻找这种解决方案。我想要一个普遍的解决方案(提供 403 错误)适用于所有类型的二进制文件(zip、exe、iso、jpg、png、gif……)。

答案1

不管你做什么,你都会“浪费”CPU 周期(为了确定引荐来源网站(进行链接的网站)是否获得授权,你必须对请求数据进行一些处理)。
你唯一能做的就是节省带宽,同时浪费最低限度CPU 周期。

Apache Docs 中的一些示例可以完全满足您的要求。下面这个:

SetEnvIf Referer example\.com localreferer
<FilesMatch \.(jpg|png|gif)$>
Order deny,allow
Deny from all
Allow from env=localreferer
</FilesMatch>

似乎是最适用的(并且不需要 mod_rewrite 的全部权重)。
您可以使用附加SetEnvIfAllow指令添加其他有效引用。

答案2

如何编写一条规则,如果 referer 未知(或被禁止),则只需调用一个 Php 文件,将图像作为参数传递,然后在 Php 文件中用大红色输入:“此文件来自 MYWEBSITE.COM 并且没有官方授权在此处显示”。

至于你的问题,请将你的规则设为全局规则。如果我错了,请纠正我,但如果规则被声明它将应用于任何 vhost 上的所有 vhost(一种“默认规则”)。

另一个想法很简单:只需重定向到一个 Php 文件(此处filter.php),该文件将查看授权网站,如果一切正常则返回所需的文件:

RewriteRule /(.*)\.jpg$ /filter.php?im=$2\.jpg [QSA,L]

只需filter.php动态加载 vhost 列表或类似的东西:

if (isset($_SERVER['HTTP_HOST'])) {
   if ((mb_ereg('thereferers\.I\.HATE\.com',HOST) !== false) ) {
       ... your code ...
   }
}

答案3

Cloudflare 可能会对你有所帮助: http://www.cloudflare.com

然而,这只适用于图像,但这似乎就是您所追求的。

热链接保护

自动为您的图片启用热链接保护,以防止站外链接。不在区域内且非空白的引荐来源将被拒绝访问。支持的文件扩展名有 gif、ico、jpg、jpeg 和 png。

受保护:http://mydomain.com/images/pic.jpg 绕过方法:http://mydomain.com/images/hotlink-ok/pic.jpg

答案4

或者使用CoralCDN让人们随心所欲地进行热链接吗?

相关内容