TOP →
覚え書き →
WebAppSecurity → This Page
ウェブアプリケーション作成時のセキュリティ注意点
ディレクトリトラバーサル
ディレクトリトラバーサル(Directory Traversal)とは
相対パス記法を利用して想定外のディレクトリのファイルを指定する攻撃方法のこと。
例
ユーザ、申請、オプションのリンクをクリックするとリンクに指定された URL 引数のファイルを
リンクの下の部分に開きます。
ユーザは
./disp.cgi?filename=user
申請は
./disp.cgi?filename=order
オプションは
./disp.cgi?filename=option
のようになっているとし、disp.cgi では
open FILE, "$PARAMETER{filename}.htm";
のようにして
引数のファイル名を読み込んで表示しているものとする。
問題点
以下のような URL でアクセスされると想定外のファイルを読まれてしまう。
1.
./disp.cgi?filename=../data/data.dat
2.
./disp.cgi?filename=../data%00
1.の場合は上の階層のディレクトリにある任意のファイルを読まれてしまいます。
2.の場合は上の階層のディレクトリにある全てのファイルを読まれてしまいます。
(C や Perl では %00 は NULL 文字のため、残りの .htm が無視されてしまうから)
対応策
1.パラメータのチェックをハードコーディングで行う
パラメータの種類が少ない場合は有効です。
今回の例でいうと user、order、option 以外の値だったらエラーにすればいいわけです。
2.正規表現チェック
正規表現を用いてある一定のパターン(半角英数文字だけとか)のみ許可するといった
チェックをかけ、パターンに合わない場合はエラーにする。
注意!
パラメータに半角スラッシュが含まれていたらエラーにすればいいじゃんと
思うかもしれませんが、それはダメです。
OS によっては ..\ とかでアクセスされるし、
URL エンコーディングを多重にデコードした場合などにチェックをすり抜けるからです。
TOP →
覚え書き →
WebAppSecurity → This Page