検索
カレンダー
2012年 2月
« 5月    
 1234
567891011
12131415161718
19202122232425
26272829  
ブログメニュー

一括ダウンロードソフトを拒否する

2007年3月15日

先日、管理しているサイトの負荷が増えてきたので、一括ダウンロードソフトによる画像へのアクセスを禁止したいという相談を受けました。
以前より、「リクエストヘッダのUser-AgentにMozillaが含まれていないブラウザからのアクセスは禁止する」や「Refererが同じサイトでないアクセスは禁止する」といったことはよく行われていると思います。

ですが、これらの方法には問題があることが分かりました。
まずUser-Agentを見る方法ですが、ブラウザによってはUser-Agentに「Mozilla」が含まれていない場合がありますし、最近のダウンロードソフトはUser-Agentを偽装する機能を持っているようです。
また、Refererを見る方法は、ノートンのセキュリティソフトを使っている訪問者を弾いてしまう可能性があります。

そこで別の方法を考えることにしました。
究極的には「同一IPアドレスからの異常な連続アクセスを拒否する」という対応が一番だと思うのですが、レンタルサーバではWebサーバ側で対策を行うことができません。
PHPなどのスクリプトを経由することも考えたのですが、それでは負荷が大きくなってしまい、本末転倒になってしまいます。
そこで、Cookieを使ってみることにしました。

具体的な流れは次のようになります。
1.トップページ(もしくは画像へリンクしているページ)に以下のようなタグを追加する。

<meta http-equiv="Set-Cookie" content="access=true">

2.画像(や一括ダウンロードソフトのアクセスを禁止したいファイルがあるディレクトリ)に以下のような.htaccessファイルを設置する。

<FilesMatch ".(jpg|jpeg|wmv|avi|mp3|mp4|scr|exe|lzh|zip)$">
SetEnvIf Cookie "^access=" accessed
Order deny,allow
Deny from all
Allow from env=accessed
</FilesMatch>

これで、1で設定したページをブラウザで一旦表示させない限り、2で設定したディレクトリにある画像などのファイルへ表示できなくなります。
ブラウザがCookieを許可している必要があったり、Webサーバが.htaccessファイルを許可している必要がありますが、この設定で大半の自動ダウンロードソフトを弾けるのではと思います。

参考:
参照元 (リファラ) が遮断され、Web サイトが正しく表示されない (Norton Internet Security 2003/Norton Personal Firewall 2003)

.htaccessだけでSSL対応するには

2006年10月22日

SSLを考えずに作られているページを、.htaccessだけの変更でSSL対応する方法をご紹介します。
もちろん、サーバがSSLに対応している必要はありますが…。
さらに.htaccessとmod_rewriteが入っている必要もあります。

SSLページにしたいHTMLファイル(PHP等でも可)のあるディレクトリに.htaccessファイルを作成し、下の文を追加します。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

ファイルを個別に指定したい場合はちょっと面倒ですが下記のようにします。
ここでは例としてfoo.htmlとbar.htmlをSSLページとし、それ以外はSSLでないページとします。

RewriteEngine on

RewriteCond %{REQUEST_URI} .*/foo.html$ [OR]
RewriteCond %{REQUEST_URI} .*/bar.html$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !(.*/foo.html$)
RewriteCond %{REQUEST_URI} !(.*/bar.html$)
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

(2007/10/31追記)
RewriteEngine on の記述が抜けていたので追記しました。指摘してくださったタルさん、ありがとうございました。

ダウンロードするファイルのファイル名を指定する

2006年10月18日

プログラムによって作成したCSVデータなどをダウンロードさせたい場合、デフォルトのファイル名は呼び出されたURLのファイル名になり、xxx.php等になってしまいます。
これを指定したファイル名にしたい場合はHTTPレスポンスのヘッダに、”Content-Disposition”を指定します。
例えばPHPでしたら以下のようになります。

header(”Content-Disposition: attachment; filename=\”fname.ext\”;”);

参考;
Studiying HTTP