Der Zweck der PHP-Option „safe_mode“ besteht darin, einige der in diesem Kapitel beschriebenen Probleme zu lösen. Allerdings ist es architektonisch falsch, diese Art von Problem auf PHP-Ebene zu lösen, wie im PHP-Handbuch (http://www.php.cn/) angegeben.
Wenn der abgesicherte Modus aktiviert ist, überprüft PHP den Eigentümer der vom ausgeführten Skript gelesenen (oder bearbeiteten) Datei, um sicherzustellen, dass es sich um denselben Eigentümer des Skripts handelt. Dies schützt zwar vor vielen Beispielen in diesem Kapitel, wirkt sich jedoch nicht auf Programme aus, die in anderen Sprachen geschrieben sind. Verwenden Sie beispielsweise ein in Bash geschriebenes CGI-Skript: >
Kümmert sich der Bash-Parser um die Konfigurationszeichenfolge in der PHP-Konfigurationsdatei oder überprüft sie diese sogar, um den abgesicherten Modus zu aktivieren? Natürlich nicht. Auch andere vom Server unterstützte Sprachen wie Perl, Python usw. kümmern sich nicht darum. Alle Beispiele in diesem Kapitel können problemlos an andere Programmiersprachen angepasst werden.
#!/bin/bash echo "Content-Type: text/plain" echo "" cat /home/victim/inc/db.inc
Ein weiteres typisches Problem besteht darin, dass der abgesicherte Modus den Zugriff auf Dateien des WEB-Servers nicht verweigert. Dies liegt daran, dass ein Skript zum Erstellen eines anderen Skripts verwendet werden kann und das neue Skript zum WEB-Server gehört, sodass es auf alle Dateien zugreifen kann, die zum WEB-Server gehören:
Das obige Skript erstellt die folgende Datei:
<?php $filename = 'file.php'; $script = '<?php header(\'Content-Type: text/plain\'); readfile($_GET[\'file\']); ?>'; file_put_contents($filename, $script); ?>
Da die Datei vom Webserver erstellt wurde, ist ihr Eigentümer der Webserver (Apache wird im Allgemeinen als Benutzer „nobody“ ausgeführt):
<?php header('Content-Type: text/plain'); readfile($_GET['file']); ?>
Daher kann dieses Skript viele der Sicherheitsmaßnahmen des abgesicherten Modus umgehen. Selbst wenn der abgesicherte Modus aktiviert ist, kann der Angreifer dennoch einige Informationen anzeigen, z. B. Sitzungsinformationen, die im Verzeichnis /tmp gespeichert sind, da diese Dateien zum Webserver (niemandem) gehören.
$ ls file.php -rw-r--r-- 1 nobody nobody 72 May 21 12:34 file.php
Der abgesicherte Modus von PHP spielt durchaus eine Rolle und kann als Tiefenverteidigungsmechanismus betrachtet werden. Allerdings bietet es nur einen geringen Schutz und es gibt in diesem Kapitel keine anderen Sicherheitsmaßnahmen, die es ersetzen könnten.
Das Obige ist der Inhalt des PHP-Sicherheitsmodus. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php). .cn)!