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

Ale*_*exV 8 .htaccess hotlinking bandwidth-control apache-2.2

我正在尝试编写“终极”反热链接 .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>
Run Code Online (Sandbox Code Playgroud)

我的问题:

  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]
Run Code Online (Sandbox Code Playgroud)

更新:

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

vor*_*aq7 9

无论您做什么,您都将“浪费”CPU 周期(要确定引用站点(进行链接的站点)是否获得授权,您必须对请求数据进行一些处理)。
您唯一能做的就是节省带宽,同时浪费最少的 CPU 周期。

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

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

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