Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら RSSフィードのご登録はこちらから
公開日:2013年3月21日
最終更新日: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アプリケーションセキュリティ対策

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA