web-dev-qa-db-ja.com

Apache 2:現在のホストからのリファラーですか

Mod_setenvifを備えたApache2があります。私の目標は、私のglobal Apache.conf内の画像のすべてのホットリンクを停止することです。現在それは:

<FilesMatch ".(gif|jpg|jpeg|png)$">
    SetEnvIfNoCase Referer "^http://[^/]*blogger.com/" hotlink
    SetEnvIfNoCase Referer "^http://[^/]*myspace.com/" hotlink
    SetEnvIfNoCase Referer "^http://[^/]*ebay" hotlink
    ...
    deny from env=hotlink
</FilesMatch>

これまでのところうまく機能しますが、すべてのホットリンカーを一度キャッチして、構成に追加する必要があります。次のようなものを追加して、より幅広いアプローチを取りたいと思います。

    # Set variable "hotlink" if Referer contains "forum"
    SetEnvIfNoCase Referer "forum" hotlink

    # Unset variable if Referer is from the same Host as current request
    SetEnvIfNoCase Referer %{Host} !hotlink

計画は一致するhttp:// evilhost。com/forum /ですが、一致しませんhttp:// myhost。com/forum /

問題は、後者の未設定が機能しないことです。ヘッダープロパティ「Host」を正規表現パターンとして使用できないように見えます-少なくとも私が試した方法ではありません。もちろん、構成に可能なすべてのホスト名を手動で入力することもできますが、それは避けたいことです。

だから私の質問は:

  • HTTPヘッダーを正規表現パターンとして使用する方法はありますか?
  • そうでない場合、リファラーが同じホストからのものである場合に変数「hotlink」の設定を解除するという私の目標を達成できる別の方法を知っていますか?
1
BlaM

次のような操作を行うことで、ホットリンクを動的にブロックできます。

RewriteCond "%{HTTP_Host}_%{HTTP_REFERER}" !\.?([^\.]+\.[^\.]+?)_https?://.*\1/.*$ [NC]
RewriteRule .(gif|jpg|jpeg|png)$ . [F,L]
1
user32627

(これはコメントとして始まりましたが、長すぎました...)

あなたの画像は本当にthat多くの異なるローカルホスト名によってアクセスされていますか?ほとんどのサイトでは、個々の仮想ホストが通常2つのホスト名(通常はexample.comやwww.example.comなど)に関連付けられているためです。存在しない問題を解決しようとしていないのですか?

FilesMatchの代わりにmod_rewriteを使用することで、必要なことを実行できる可能性があります(これは、一致文字列で%{HTTP_Host}を使用できるため、すべてのローカルホスト名を入力する必要がなくなるためです)。単純なグーグル検索は、その多くの異なるローカルホスト名をもたらしますか?ほとんどのサイトでは、個々の仮想ホストが通常2つのホスト名(通常はexample.comやwww.example.comなど)に関連付けられているためです。存在しない問題を解決しようとしていないのですか?

FilesMatchの代わりにmod_rewriteを使用することで、必要なことを実行できる可能性があります(これにより、一致文字列で%{HTTP_Host}を使用できるため、すべてのローカルホスト名を入力する必要がなくなります)。単純なグーグル検索で このサイト が得られます。これは、RewriteRuleを使用してホットリンクをブロックする方法について詳しく説明しています。

1
larsks

私の頭のてっぺんから(例えば、私はまだこれを本当に考えていません)、なぜあなたはあなたの論理を逆にしてみませんか?

<FilesMatch ".(gif|jpg|jpeg|png)$">
    SetEnvIfNoCase Referer "^http://[^/]evilhost.com/" localref

    Order deny,allow
    deny from all
    allow from env=localref
</FilesMatch>
0
larsks