web-dev-qa-db-ja.com

Apache 2:サーバー全体での画像のホットリンクを防止する

一般的な「悪者」、つまり他の人の帯域幅を使用する傾向のあるユーザーがいるサイトからリンクされている場合、サーバー上の画像へのアクセスをブロックしようとしています。

  • livejounal.com
  • blogger.com
  • myspace.com
  • .。

私の質問を他の質問と区別するものが2つあります この質問その質問

  • 「サーバー全体」で実行したい、つまり、.htaccessや個々の仮想ホストではなく、すべてのホスト/ドメインに対してApache.confで構成したい
  • 403 FORBIDDENを送信するだけでなく、選択した画像にリクエストをリダイレクトしたい

Apache.confにRewriteRulesを含めようとしましたが、何もしません。また、SetEnvに応じてリダイレクトできるオプションはないようです。

助言がありますか?

3
BlaM

画像がホットリンクされていなくても、デフォルトのエラー403ドキュメントが変更されたままになるため、あまり美しくなくても解決策があります。

これはApache2.confに入ります:

    SetEnvIfNoCase Referer "livejournal.com" hotlink

    <FilesMatch ".(gif|jpg|jpeg|png)$">
            ErrorDocument 403 /server404/no_hotlink.php
    </FilesMatch>
    <FilesMatch ".(gif|jpg|jpeg|png|mpg|avi|flv)$">
            deny from env=hotlink
    </FilesMatch>

    Alias /server404 "/var/www/_404"
    <Directory "/var/www/_404">
        AllowOverride AuthConfig
        Order allow,deny
        Allow from all
    </Directory>

しばらくの間、サーバー全体の404エラードキュメントに/ server404パスを使用していたので、すでにそれを使用していました。 403やGlobalNoHotlinkなどの名前を付けることもできます。

画像(最初のFilesMatch)の場合、「禁止された」ErrorDocumentを/ server404ディレクトリのPHPファイルに設定します。次に、それがホットリンクされているかどうかを確認します(ビデオファイルの場合も同様です。 2つのFilesMatchタグ)、ホットリンクされている場合はアクセスを禁止します。

これは/var/www/_404/no_hotlink.phpに入ります-PHPファイルは禁止された画像で呼び出されます:

    <?PHP
    $file = dirname(__FILE__) . '/_default/no_hotlink.png';

    header('HTTP/1.1 200 OK', true, 200);
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header('Content-length: ' . filesize($file));
    header('Content-type: image/png');
    readfile($file);
    ?>
  • 最初の行は、送信する画像ファイルを識別するために使用されます。
  • 次に、HTTPヘッダーを200に設定します(これはオプションです。自分で決定してください)。
  • 画像のキャッシュを回避するためにいくつかのヘッダーを追加します(ユーザーがサイトにアクセスすることを決定した場合に、8000x8000のピンクピクセルファイルがサイトの「キャッシュから」表示されないようにしますか?)。
  • ダミーファイルのサイズに応じたコンテンツの長さと
  • MIMEタイプ(PNGを使用しない後者を変更する必要がある場合があります)。
  • 次に、ファイルを読み取ります。

それは機能しますが、私が望むほど美しくはないので、他の解決策についてはまだ満足しています。

2
BlaM

Httpd.confに次のようなものがあります。

RewriteCond "%{HTTP_REFERER}" !=""
RewriteCond "%{HTTP_REFERER}" "!^http://www.mydomain.com/.*$" [NC]
RewriteRule "\.(jpg|png)$ - [F]

以前にRewriteCondsとRewriteRulesを使用したことがない場合は、これも使用する必要があります。

RewriteEngine On

グーグルまたはApacheクックブックで見つけました。もう思い出せない。

0
f.ederi.co