Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion über den Kompromiss zwischen Sicherheit und Leistung von PHP open_basedir

Eine kurze Diskussion über den Kompromiss zwischen Sicherheit und Leistung von PHP open_basedir

高洛峰
高洛峰Original
2016-11-29 11:11:141114Durchsuche

Sicherheit und Leistung der Website scheinen im Widerspruch zueinander zu stehen. Bei einer PHP-Website ist die Auswahl besonders schwierig. Um das einfachste Beispiel zu nennen: Das open_basedir der PHP-Konfigurationsdatei beschränkt die Dateien, die PHP öffnen kann, auf den angegebenen Verzeichnisbaum, einschließlich der Datei selbst. Ursprünglich ist dies sehr vorteilhaft für die Sicherheit der Website, aber nach Angaben des Autors aus dem Internet wird open_basedir einen großen Einfluss auf die Leistung des io-Betriebs von PHP haben. Forschungsdaten zeigen, dass die Ausführungsgeschwindigkeit des mit php_basedir konfigurierten Skripts 10-mal oder mehr langsamer ist als ohne Konfiguration!

Zuerst habe ich dieses Ergebnis nicht ganz geglaubt, aber die Testdaten haben mich überzeugt, diesen Standpunkt zuzugeben.

Erstellen Sie ein einfaches Skript:

<?php
functionmicrotime_float()
{
    list($usec,$sec) =explode(" ", microtime());
    return((float)$usec+ (float)$sec);
}
 
$time_start= microtime_float();
 
is_file(&#39;1.html&#39;); //判断当前目录是否有1.html这个文件
$time_end= microtime_float();
$time=$time_end-$time_start;
 
echo"Did is_file in $time seconds\n";
?>

Für die Testergebnisse von open_basedir
0,0006 / 5,0E-5
Die Lücke ist ziemlich groß, aber kluge Freunde sollten aufpassen Ja, meine Website ist mit open_basedir konfiguriert. Im Vergleich zu einem solchen Leistungsverlust würde ich lieber Leistung im Austausch für Sicherheit opfern. Kein Grund zu raten, vielleicht treffen Sie die gleiche Wahl wie ich ~ Schließlich ist die Serversicherheit wichtiger.

Tipps: So konfigurieren Sie open_basedir
Wenn ein Skript versucht, eine Datei beispielsweise mit fopen() oder gzopen() zu öffnen, wird der Speicherort der Datei überprüft. PHP weigert sich, eine Datei zu öffnen, wenn sie sich außerhalb des angegebenen Verzeichnisbaums befindet. Alle symbolischen Links werden aufgelöst, daher ist es nicht möglich, diese Einschränkung durch symbolische Links zu umgehen.

Spezieller Wert Gibt an, dass das Arbeitsverzeichnis des Skripts als Basisverzeichnis verwendet wird. Dies ist jedoch etwas gefährlich, da das Arbeitsverzeichnis des Skripts leicht mit chdir() geändert werden kann.

In der Datei httpd.conf kann open_basedir wie jede andere Konfigurationsoption mithilfe der Methode „php_admin_value open_basedir none“ deaktiviert werden (z. B. in einigen virtuellen Hosts).

Unter Windows trennen Sie Verzeichnisse durch Semikolons. Verwenden Sie Doppelpunkte, um Verzeichnisse auf anderen Systemen zu trennen. Als Apache-Modul wird der open_basedir-Pfad im übergeordneten Verzeichnis automatisch geerbt.

Die mit open_basedir angegebenen Einschränkungen sind eigentlich Präfixe, keine Verzeichnisnamen. Das heißt, „open_basedir = /dir/incl“ ermöglicht auch den Zugriff auf „/dir/include“ und „/dir/incls“, sofern vorhanden. Wenn Sie den Zugriff nur auf das angegebene Verzeichnis beschränken möchten, beenden Sie den Pfadnamen mit einem Schrägstrich. Beispiel: „open_basedir = /dir/incl/“.


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