web-dev-qa-db-ja.com

私のサイトのリソースのホットリンク(「画像の盗難」/「帯域幅の盗難」)を防ぐ方法は?

私は「究極の」アンチホットリンク.htaccessを書き込もうとしています...

ネット上には多くの 例/チュートリアル / ジェネレーター がありますが、それらの多くは間違っているか不完全です(または両方)。

これらは私が探している機能です:

  • HTTP_REFERERが外部サイトの場合、ファイル拡張子のリストのホットリンクをブロックする必要があります。
  • .htaccess。にハードコーディングせずに、現在のドメイン(duh)のホットリンクを許可する必要があります。
    • 現在のドメインでは、httpおよびhttpsで機能する必要があります。
    • 現在のドメインでは、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. .htaccessにmydomain.comをハードコーディングしないようにするにはどうすればよいですか? (この.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]

更新:

通常の画像の代わりに透かし入りの画像を提供するソリューションを知っています。しかし、私はこの種の解決策を探していません。あらゆる種類のバイナリファイル(Zip、exe、iso、jpg、png、gif)で機能するユニバーサルソリューション(403エラーを処理)が必要です。 ..)。

8
AlexV

何をしても、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の全重量を必要としません)。
追加のSetEnvIfおよびAllowディレクティブを使用して有効なリファラーを追加できます。

9
voretaq7

リファラーが不明な場合(禁止されている場合)、画像をパラメーターとして渡すPhpファイルを呼び出し、Phpファイルに大きな赤で入力するというルールを作成してはどうでしょうか。「このファイルはMYWEBSITE.COMからのものです。ここに表示する正式な許可はありません。」.

あなたの質問に関しては、あなたのルールをグローバルにしてください。私が間違っている場合は訂正してください。ただし、ルールが宣言されている場合before任意のvhostは、すべてのvhostに適用されます(「デフォルトルール」の一種)。

そして別のアイデアは単純です:Phpファイルにリダイレクトするだけです(ここではfilter.php)許可されたWebサイトを調べて、すべて問題がない場合は必要なファイルを返します。

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

filter.php仮想ホストのリストなどを動的にロードするだけです:

if (isset($_SERVER['HTTP_Host'])) {
   if ((mb_ereg('thereferers\.I\.HATE\.com',Host) !== false) ) {
       ... your code ...
   }
}
3
Olivier Pons

Cloudflareはあなたにいくらかの助けになるかもしれません: http://www.cloudflare.com

ただし、これは画像に対してのみ機能しますが、それがあなたが求めているもののようです。

ホットリンク保護

画像のホットリンク保護を自動的に有効にして、オフサイトリンクを防ぎます。ゾーン内になく、空白でもないリファラーはアクセスを拒否されます。サポートされているファイル拡張子は、gif、ico、jpg、jpeg、およびpngです。

保護: http://mydomain.com/images/pic.jpg バイパスするには: http://mydomain.com/images/hotlink-ok/pic.jpg

1
pablo

質問1:

RewriteEngineオン
RewriteCond%{HTTP_REFERER}!^ http://(。+)?yoursite.com/ [NC]
RewriteCond%{HTTP_REFERER}!^ $
RewriteRule。*。(jpe?g | gif | bmp | png)$-[F]

質問2:

はい

質問3

私は自分のものを使います

0
genesis