またも、Webサーバ内部の改造です。
工房では、工房にアップされているすべての画像への直リンクを禁止しています。
具体的には、「.htaccess」に、以下のように記述しています。
「Referer」の値をチェックして、Refererがセットされていない場合(=直リンクされている場合)、または工房のドメイン以外の場合(=自分のページに勝手に表示している場合)には、アクセスさせないようにしています。
#こうすると、セキュリティーソフトを入れていて、Refererを出力しないような設定をしている場合には、画像が表示されなくなってしまいますが、まぁ、そういうヒトは、そういうヒトということで。
ただし、その一方で、Googleなどの画像検索クローラーがやってきた場合には、アクセスさせたい訳です。
上記のように、ホスト名を指定して許可すればいいのですが、Googleのようなクローラーであっても、ホスト名が得られず、IPアドレスしか分からない場合があります。
このような場合、そのIPアドレス毎に許可してやればいい訳ですが、クローラーのIPアドレスは、アクセスの度にコロコロ変わることがほとんどです。
そこで、クローラーのIPアドレスを含むサブネット全体を、丸ごと許可してやることにします。
#ちょうど、スパム対策の逆の手法ですね。
では、どのようにクローラーのIPアドレスを取得するかというと、.htaccessに、以下のように設定します。
これは、HTTPのステータスコードに基づき、クライアントエラーが発生した場合には、“error.phpを呼び出す”という設定になります。
1行目は、エラーコード403(Forbidden)で、リソースへのアクセスを拒否された場合に、2行目は、エラーコード404(Not Found)で、リソースが見つからなかった場合に、それぞれerror.phpを呼び出すことになります。
これを受けて、error.phpでは、以下のようなHTMLを出力します。
あたかも、Apacheとまったく同じ挙動をするように偽装していますが、実は、裏ではしっかりアクセスログを取っています。
以下、そのソース(一部)です。
このスクリプトによって集められたIPアドレスを逆引きし、Googleなどのクローラーであった場合には、そのサブネットを得て、アクセス許可リストに追加していきます。
逆に、直リンクしたり、自分のページに勝手に表示したりしている場合には、アクセス拒否リストに追加していきます。
また、ある一定時間以内に、ある一定回数以上のアクセスがあった場合には、Webサーバへのアタックと見なして、アクセス拒否リストに追加したりできます。
実際のエラーログの一部です。
IPアドレスを逆引きすると、Googleが取得したサブネットからのアクセスであることが分かります。
これらより、.haccessには、上記のように設定しました。
このように、HTTPのステータスコードを取り込み、エラーログを解析することにより、「クローラーには優しく、不届きなヤカラには厳しい」対処を取ることができます。