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