web-dev-qa-db-ja.com

.htaccessを使用して特定のドメインのホットリンクを防ぐ方法は?

画像スクレイパーサイトから大量のスパムを受け取っています。 150以上のドメインが私の画像をターゲットにしており、スパム送信されたリンクを私のサイトに送信しています。それらからのホットリンクを防止したいだけです。特定のサイトのみをブロックしたいだけです。

特定のサイトでのみホットリンクを防止し、リストに含まれていない他のサイトを許可するhtaccessルールはありますか?

3
Ankit Jha

https://www.htaccesstools.com/hotlink-protection/ を使用する

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

必要かどうかはわかりませんRewriteEngine on。次の行では空白のリファラーを許可しています。ログファイルを確認する必要がある場合や、オプションでこの行を削除する場合があります。

最後の2行はコードの要です。 example.comをドメイン名に変更します。また、画像の種類をさらに追加または削除する場合は、単純に追加または削除できます。しないでください|文字はor文字です。あなたがそれらを見るのと同じように、あなたはあなたのリストにこれらを必要とします。この場合、jpgまたはjpegまたはpngまたはgifです。

上記のリンクを使用して、これを行うことができます。

4
closetnoc

私の画像をターゲットにし、スパムのリンクを私のサイトに送信している150以上のドメインがあります。それらからのホットリンクを防止したいだけです。特定のサイトのみをブロックしたいだけです。

「150」はブロックするのに少し過剰です具体的にこれは将来維持するのが難しくなる可能性があります。 allホットリンクサイトを @ closetnocの回答 のようにブロックし、必要に応じて特定のリファラーを許可するをブロックするのがより一般的です。

ただし、質問に答えるために、それら--specificリファラーのみをブロックする場合は、次のようなものが必要になります。

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^https?://referer-1\.example/ [OR]
RewriteCond %{HTTP_REFERER} ^https?://referer-2\.example/ [OR]
# etc...
RewriteCond %{HTTP_REFERER} ^https?://referer-150\.example/
RewriteRule \.(jpe?g|png|gif)$ - [NC,F]

これは、.htaccessファイルの上部に配置する必要があります。

最後の条件にORフラグがあってはなりません。それ以外の場合はallトラフィックがブロックされます。

Lフラグを使用する場合、RewriteRuleディレクティブでFフラグは必要ありません。

UPDATE:上記をより効率的にするには、最初に、Refererがnot予想されるホスト名であることを確認する条件を最初に含める必要があります(そしてオプションでnot空白です)-@closetnocの回答のように-ルールの[早期に失敗]が99.9%のリクエストに対して。

例えば:

RewriteEngine On

# Fail early for all "direct" and "internal" requests
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example\.com

# Block specific Referers...
RewriteCond %{HTTP_REFERER} ^https?://referer-1\.example/ [OR]
RewriteCond %{HTTP_REFERER} ^https?://referer-2\.example/ [OR]
# etc...
RewriteCond %{HTTP_REFERER} ^https?://referer-150\.example/
RewriteRule \.(jpe?g|png|gif)$ - [NC,F]
2
MrWhite