.htaccessでアクセス制限

ディレクトリ単位でのアクセス制限方法の解説

CGIやPHPスクリプトを利用する場合など、管理用のファイルをWeb上に置くことがあるでしょう。 携帯サイトでパソコンからのアクセス禁止にしたい場合もあるでしょう。 そのような場合は .htaccessを利用してアクセス制限をしておきましょう。

※注意※ サーバーの設定によっては、このページで紹介している方法が利用できないことが有ります。 利用しているサーバーのマニュアル等でご確認ください。

.htaccessとは

.htaccessとは、Apache などの Webサーバーの動作を、ディレクトリ単位で制御するための設定ファイルです。CGI実行の許可や、リモートIPに基づくアクセス制限、リファラに基づくアクセス制限などが可能になります。

.htaccessを利用するには、制限をかけたいディレクトリに、.htaccessという名前のファイルを作成すればOKです。

.htaccessによるアクセス制限

ここでは、一番良く利用すると思われる、アクセス制限について解説します。

リモートIP/ホストによるアクセス制限

リモートIP/ホストによるアクセス制限は、以下のように記述します。

Order Allow,Deny
Allow from all
Deny from .abcde.com
Deny from 111.122.133.
Deny from 111.122.133.192/26

order には、条件判定の順序を書きます。 Allow,Deny なら、許可-拒否の順で判定します。 Deny,Allow なら、拒否-許可の順で判定します。 条件が矛盾する場合は後から判定した基準が有効になります。

許可/拒否するアドレスは、ホスト名で指定することも、リモートIP(必要ならサブネットマスク利用)で指定することもできます。

IPアドレスやサブネットマスクについてはIPアドレスをごらんください。

リファラによるアクセス制限

リファラとは、リンク元のことです。 通常、リンクを貼ってくれているページや、検索エンジンのURLになります。

リファラをチェックして、特定のページからのアクセスを禁止(許可)することができます。 画像やスクリプトの直リンクを禁止したい場合や、 特定サイトからの訪問を禁止したい場合に利用します。

SetEnvIf Referer "http://php-web.net/" Ref1
SetEnvIf Referer "http://ninkiweb.net/" Ref2
Order Deny,Allow
Deny from all
Allow from env=Ref1
Allow from env=Ref2

SetEnvIf Referer "サイトURL"のように記述します。 アドレスが複数ある場合は、上の例のように、Ref1, Ref2, などとしてください。

order には、条件判定の順序を書きます。 IPアドレスによる制限の場合と同様に、Allow,Deny なら、許可-拒否の順で判定します。 Deny,Allow なら、拒否-許可の順で判定します。

※注意※ セキュリティソフト等の設定によってはリファラが取得できないことがあるようです。

アクセス制限するファイルの設定

標準では .htaccessを設置したディレクトリ全体がアクセス制限の対象となります。 しかし、特定のファイルにだけ、アクセス制限をかけたい場合もあるでしょう。 そのような場合は、以下のように書いてください。

<FilesMatch "\.(gif|jpe?g|png)$">
SetEnvIf Referer "http://php-web.net/" Ref1
Order Deny,Allow
Deny from all
Allow from env=Ref1
</FilesMatch>

FilesMatchで指定したファイルにだけ、アクセス制限をかけることができます。 ファイルの設定には、上の例のように、正規表現を利用することができます。 上の例では、拡張子が .gif, .jpg, .jpeg, .png のファイルの他サイトからのアクセス(直リンク)を制限します。

Copyright (C) 2003-2013. PHP で WEB 作成 All rights reserved.