公開日:2013年3月21日
最終更新日:2013年12月26日
最終更新日:2013年12月26日
ディレクトリ・トラバーサル対策(PHP編)
ディレクトリ・トラバーサルの対策は以下の記事を参照してください。
この一部を PHP で実現すると以下のようになります。
根本的対策
■ファイルを開く場合は、固定ディレクトリ+ファイル名にする
basename 関数を利用してファイル名を取得後、ディレクトリと結合してパスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $DIRECTRY_PATH = "/var/files/"; //ファイル名取得 $fileName = basename("../../../etc/passwd"); //パス結合 $path = $DIRECTRY_PATH . $fileName; ?> <html> <body> <?php echo htmlspecialchars($path, ENT_QUOTES, "UTF-8"); ?> </body> </html> |
実行結果は以下のようになります。
1 |
/var/files/passwd |
保険的対策
■ファイル名のチェックを行う
正規表現で、パスに含まれる「/」、「../」、「..\」をチェックします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php //ファイル名 $fileName = "../../../etc/passwd"; //正規表現でチェック $result = preg_match('/(\.\.\/|\/|\.\.\\\\)/', $fileName) ? "true" : "false"; ?> <html> <body> <?php echo htmlspecialchars($result, ENT_QUOTES, "UTF-8"); ?> </body> </html> |
実行結果は以下のようになります。
1 |
true |
スポンサーリンク
カテゴリー:Webアプリケーションセキュリティ
Twitter でも、いろんな情報を発信しています。@fnyaさんをフォロー
コメントを残す