BLOG ENTRY

Directory Traversal(ディレクトリ遡り攻撃)の対策方法(PHP)

php

書籍からの情報を元に、Directory Traversal(ディレクトリ遡り攻撃)の対策方法(PHP)をメモ。







対策1、2、3、のいずれか(もしくは4)を選択して実施する。



1、ホワイトリスト法



[PHP]
if (!in_array($_GET['data_file'] , (許可ファイル名の配列)))exit;
readfile('/home/myhome/data/'.$_GET['data_file']);
[/PHP]



2、サニタイズ法



ファイル名に、basename()をかけてから渡す。
[PHP]
readfile('/home/myhome/data/'.basename($_GET['data_file']));
[/PHP]
ファイル指定に階層構造が必要なければ、リクエスト変数の受け取り時点(チェック前)にbasename()を使うことで、Directory Traversal攻撃への対策も同時に処理できる。
[PHP]
$data_file = basename($_GET['data_file']);
[/PHP]



3、ブラックリスト法



ファイル名に’..’があった時点で処理を中断する。
[PHP]
if(strstr($_GET['data_file'] , '..'))exit;
readfile('/home/myhome/data/'.$_GET['data_file']);
[/PHP]


ファイル指定に階層構造が必要なければ、リクエスト変数の受け取り時点(チェック前)にbasename()を使うことで、Directory Traversal攻撃への対策も同時に処理できる。
[PHP]
$data_file = basename($_GET['data_file']);
[/PHP]



4、open_basedir制限をかける



PHPスクリプトが開く可能性のあるディレクトリに、php.iniもしくはhttp.confでopen_basedir制限をかける。


php.ini例
[CODE]
open_basedir = /home/myhome/:/tmp/:/usr/local/lib/php/
[/CODE]
http.conf例


[CODE]
php_admin_value open_basedir /home/myhome/:/tmp/:/usr/local/lib/php/
[/CODE]
この場合、/home/myhome/内にあるPHPスクリプトのみが上記open_basedir制限を受ける。





詳しいことはPHPサイバーテロの技法に書かれてます。この本はすごくためになりました。著者の方に感謝。





その他14種類の脆弱性についてはこちらで一覧確認できます。

No related posts.

  • name:PHPで脆弱性の少ないセキュアなアプリを作るために実装時に意識すること | Web&MUSICブログ QUALL
  • date:2008/04/26
  • [...] 6 => Directory Traversal , [...]

  • type:ピンバック [ ]

    WRITE COMMENT


    (required)


    (required)


    (required)

    MENU

    veltica creative of twitter