konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


[[セキュリティ指針]]

ディレクトリトラバーサル対策

説明

ディレクトリトラバーサルとは、パスの指定が意図しない範囲まで到達し、本来アクセスできないファイルの情報が漏洩してしまう問題を指す。

被害例

上記問題があるサイトにたとえば次のようなURLを送ることで、/etc/passwdファイルが漏洩する例がある。

http://www.example.com/download.php?filename=../../../../etc/passwd

対策

以下の文字列をサニタイズする。

../

もしくは、絶対パスを算出し、正しいディレクトリからダウンロードされているか確認する。

コーディング手法

  • basename関数を使用する。
    $upfile = $rootpath . basename($filename);
  • realpath関数を使用する。(推奨)
     function isSecurePath($rootpath, $filename)
     {
         $path = realpath($rootpath . $filename);
         if ($path === false) {
             return false;
         } elseif (strncmp($path, $rootpath, strlen($rootpath)) !== 0) {
             return false;
         }
         return true;
     }

最終更新のRSS