.htaccess活用法(2)

.htaccess(拡張子がhtaccessということで、ドットが必要です。ファイル名がないので最初戸惑いますが、こういうものだと思ってください。)が利用可能だと、

2.特定のホスト(IPアドレス。プロバイダ)からのアクセスを制限する

先ほど紹介したBasic認証もしくはDigest認証はIDとパスワードによる認証及びアクセス制限でしたが、他にもアクセス制限の方法はあります。

例えば、掲示板管理のための一般的な方法として、特定のホスト(IPアドレス。プロバイダ)からのアクセスを制限するという手法が取られます。掲示板には、誹謗中傷の類の書き込みを繰り返す「荒らし」と呼ばれる行為や、意味不明な書き込み、ネットワークビジネスの勧誘的な書き込み、また、相手を挑発するような書き込みなどで、荒れる場合があります。そのような場合に、そのような行為に加担する人のアクセスを拒否したい場合が出てきます。この場合に、会員制(メンバー制)の掲示板であれば、それこそ.htaccessなどでIDとパスワードによる照合が可能ですから、該当会員のデータを消せば入室できなくなります。

.htaccessにおけるコメントの書き方
perlと同じく「#」を使います。サンプルは下記を見てください。

#if User-Agent is "Ninja", the variable 'deny_ua' should be set.
SetEnvIf User-Agent "Ninja" deny_ua
order allow,deny
allow from all
#if the variable 'deny_ua' is defined, it means that User-Agent is "Ninja". In that case, the access should be denied.
deny from env=deny_ua

PHPやJavascriptに慣れた人なら思わず「//」としてしまうことがありますので(私だけ?)、注意しましょう。コメントに日本語を使うこともテストした限りではOKでしたが、どんな環境でもOKかは分かりません。

.htaccessは必ずShift_JISで保存しましょう。EUC-JPなどで保存した場合、前章で見たようにBasic認証で表示されるダイアログが文字化けする場合があります。

なお、サンプルに出てきたSetEnvIfについては、次章の「参照元(Referer)によるアクセス制限が可能(画像の直リンク禁止も可能)」を参照してください。

しかし、会員制にすると自由な書き込みがしにくくなることなどから、全ての掲示板で会員制を取ることもできないでしょう。そのような場合、どのようにして該当会員だけをシャットアウトして、他の会員は入室できるようにするかという方法を考えてみると、「プロバイダ○○○のアクセスポイント×××を使っている者は入室お断り」とするしかないと思われます。

これは、.htaccessで可能です。その拒否したいアクセスのIPアドレスが123.45.67.89ならば、書き方は次のような感じです。

    order allow,deny
    allow from all
    deny from 123.45.67.89

言わずもがなですが、「allow = 許可する」「deny = 否定する」です。特定のホストからのアクセスを拒否する(それ以外はOKとする場合)、「order allow,deny」とした上で、一旦、「allow from all = 全てのアクセスを許可する」とし、拒否するIPアドレスなどを列挙します。一行目の「order allow,deny」は、先にallowを指定して、次にdenyを指定するというアクセス制御の評価順序を宣誓するためのものです。

ただし、IPアドレスは接続のたびに変わることが多いので、ある時は「123.45.67.89」でも、また別の時には「123.45.87.69」かもしれません。ですが、仮に「123.45」の部分は変わらないとすれば、

    order allow,deny
    allow from all
    deny from 123.45.

とします。

また、逆に、特定のホストからの接続のみを許可する場合には、

    order deny,allow
    deny from all
    allow from 123.45.67.89

などとします。「order deny,allow」と「deny」と「allow」の順番が逆になったことに注目してください。

もちろん、IPアドレスではなく、ホスト名もしくはその一部(プロバイダ名やそのアクセスポイントなどが記されています)を指定することも可能です。

--広告--
【PR】 マジックリスニングなど英語教材比較

【PR】 足の臭いにお悩みの方にグランズレメディー

【PR】 コンピュータ関連書籍をお探しならこちら


    order allow,deny
    allow from all
    deny from hogehoge.example.com

のような感じです。

ただ、このように.htaccessを利用して、ホスト名でアクセス制限を書く場合、どうしても「無実の第三者」を締め出してしまう可能性もあります。アクセスを制限したい特定のプロバイダが大手のプロバイダであった場合、そのプロバイダを利用している人全てが拒否されたりすることもあるかもしれません。ですので、利用法を熟慮すべきです。

また、proxy接続などで毎回接続ホストを変えてアクセスされた場合などは、対処が難しいです。



▼ Allowディレクティブ、Denyディレクティブ、
Orderディレクティブ

http://httpd.apache.org/docs-2.0/ja/mod/mod_access.html


次章では、「.htaccessを使った、参照元(Referer)によるアクセス制限」について考えます。画像ファイルなどを直リンクされたくないという場合に有効です。