不正アクセスを防ぐ為に

uchiumiです。
以前askeet1日目の記事を書いていたとき、バーチャルホストを設定する時に、アクセス制限は正しくしましょうということをartn先輩に教えてもらいました。
なので今日はバーチャルホストのアクセス制限について書いていきたいと思います。

【目次】
  • アクセス制限をする
  • アクセス制限の範囲
  • まとめ

【アクセスを制限をする】

【正しい例】

<Directory "/home/sfprojects/askeet/web"> ←対象のフォルダ
    Allow from All ← アクセスを許可する
</Directory>

デフォルトの設定ではweb上での閲覧ができないようになっているので、上記のように記述して “/home/sfprojects/askeet/web”のディレクトリの中身を閲覧できるようにしてあげます。
このように設定する事により、「web」にあるもの以外のファイル(コンフィグファイル)などは、外部からは直接見られることはありません。

しかし、もしこの「web」の中にプロジェクトを作り、同じようにディレクトリを指定して書いてしまうと、上記と同じ意味にはならなくなってしまいます。

【ダメな例】

・どこかで下のような設定をしてあった

<Directory "/home/sfprojects/askeet/web">
    Allow from All
</Directory>

・↑の設定を知らずに、下のように設定した

<Directory "/home/sfprojects/askeet/web/project/askeet2/web/">
    Allow from All
</Directory>

【何故ダメなのか】

askeet/webのフォルダが既にアクセス許可されている為、askeet2のプロジェクトのファイルは全てアクセスが許可されていることになってしまっています。
その為、URLベタ打ちやaタグで呼び出されることで、ファイルを見られてしまう可能性があります。
自分ではaskeet2/webの中身だけ許可したつもりなのに、他のファイルも実はアクセス可能になってるなんて、怖いですよね。
なので自分が作業しているディレクトリがどのような状態にいるのかを把握しておくことはとても大切だと思いました。

【アクセス制限の範囲】

【直接アクセス以外は対象外】

アクセス制限をしっかりすれば、許可されていないディレクトリにあるファイルは見られることはないのは解りました。
ですが、何故actionやtemplateなどのファイルは、許可されていないディレクトリにあるのに見る事ができるのかということに疑問を持ちました。
これもartn先輩が詳しく教えてくれました。

どうやらファイルの呼び出し方が違う為ということでした。
ここでのアクセス制限は、aタグやURLのベタ打ちなどで、ファイルそのものをページとして表示する場合の制限であり、
インクルードなどで内部で呼び出されたファイルは、アクセス制限をしていても呼び出してるファイルがアクセス許可されていれば見れる。
とのことでした。

【内部からの間接的な不正アクセスを防ぐ為に】

アクセス制限では防げないような内部的な不正アクセスとは、
例えば以下のようにユーザーから取得するデータを使ってページを表示させようとするプログラムがあった時、取得される値をユーザーが意図的に不正なものに書き換えた場合などのことです。

<?php
$template = 'blue.php';
if ( is_set( $_COOKIE['TEMPLATE'] ) )
   $template = $_COOKIE['TEMPLATE'];
include ( "/home/users/phpguru/templates/" . $template );
?>

(Wikipedia参照)
これはディレクトリトラバーサルの対策をすることにより防ぐ事ができます。

はじめ、アクセス制限をすることとディレクトリトラバーサルの対策をすることは同じ事だと思っていたのですが、先輩から話をきいて、違うものだということが理解できました。
なので、何をすればどのようなものを防ぐことができるのかということを理解しておくことは大切だと思いました。

【まとめ】

・バーチャルホスト設定時のアクセス制限はしっかりとつける
・自分の作業ディレクトリの状態を把握しておく
・バーチャルホストのアクセス制限 → 直接的なファイルへのアクセスを防げる
・ディレクトリトラバーサル    → 間接的なファイルへのアクセスを防げる

以上になります。

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree