Bei der Entwicklung und Bereitstellung von PHP -Anwendungen müssen Sie häufig die Funktion PHP_uname () verwenden, um die Betriebssysteminformationen des Systems zu erhalten. Diese Funktion gibt den Betriebssystemnamen, die Versionsnummer, den Hostnamen und die anderen Informationen des aktuellen Servers zurück. Diese Informationen können jedoch böswilligen Nutzern ausgesetzt sein, was wiederum die Sicherheit des Systems bedroht. Daher müssen wir in einer Produktionsumgebung Maßnahmen ergreifen, um die Ausgabeinformationen der Funktion php_uname () zu verbergen oder zu filtern.
php_uname () ist eine integrierte PHP-Funktion, die relevante Informationen zum aktuellen Betriebssystem zurückgibt. Der Ausgabeinhalt enthält den Namen, die Version, den Hostnamen usw. des Betriebssystems, und das übliche Format lautet wie folgt:
echo php_uname();
Ausgangsbeispiel:
Linux server1 4.15.0-123-generic #126-Ubuntu SMP Thu Nov 7 18:59:47 UTC 2019 x86_64
Diese Informationen können für Entwickler nützlich sein. Wenn sie jedoch misstrauischen Benutzern ausgesetzt sind, können Angreifer diese Informationen verwenden, um die Konfiguration und die potenziellen Schwachstellen des Systems zu schließen.
Die Ausgabeinformationen von PHP_uname () können den folgenden sensiblen Inhalt auslaufen:
Betriebssystemtyp und -version : Angreifer können diese Informationen verwenden, um festzustellen, welche Schwachstellen das System beeinflussen können.
Hostname : Wenn der Hostname ausgesetzt ist, kann ein Angreifer möglicherweise auf den physischen Standort des Servers oder der Netzwerk -Topologie schließen.
Kernelversion : Einige Kernelversionen haben möglicherweise bereits Sicherheitslücken bekannt, und ein Angreifer kann diese Informationen verwenden, um einen Angriff zu starten.
Daher müssen wir in der Produktionsumgebung, um die Sicherheit zu verbessern, die Ausgabe der Funktion php_uname () ausblenden oder filtern.
Am direktesten ist es, die Funktion durch die Konfiguration von PHP zu deaktivieren . Diese Methode verhindert, dass Php_uname () aufgerufen wird.
Öffnen Sie die Konfigurationsdatei php.ini .
Fügen Sie dem Konfigurationselement dentabled_functions php_uname hinzu:
disable_functions = php_uname
Starten Sie PHP oder Webserver neu, damit die Konfiguration wirksam wird.
Bei diesem Ansatz wird jeder Code, der versucht, die Funktion von PHP_uname () zu verwenden, aus der Ausführung blockiert.
Wenn php_uname () nicht vollständig deaktiviert werden kann, können wir die Ausgabe auch filtern oder ändern, indem wir benutzerdefinierten Code schreiben. Beispielsweise können einfachere oder sicherere Informationen angezeigt werden, indem die Ausgabe der Funktion neu geschrieben wird.
if ($_SERVER['SERVER_NAME'] === 'production_server') {
echo "Server Information Hidden for Security";
} else {
echo php_uname();
}
In diesem Code wird die Ausgabe von PHP_uname () nur in einer bestimmten Serverumgebung angezeigt. Andernfalls wird eine versteckte Eingabeaufforderung angezeigt.
Für Apache -Server können einige sensible Informationen aus der Datei .htaccess blockiert werden.
Beispielsweise wird die Zugriffskontrolle über mod_rewrite durchgeführt, um sicherzustellen, dass bestimmte sensible Informationen nicht aufgedeckt werden:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/php_uname$
RewriteRule .* - [F]
</IfModule>
Diese Konfiguration lehnt direkte Anforderungen an php_uname () ab.
Durch die Konfiguration des Open_Basedir -Limits können Sie steuern, dass PHP -Skripte nur auf bestimmte Verzeichnisse zugreifen können, um das Lesen von Systeminformationen zu verhindern, die nicht aufgedeckt werden sollten.
Öffnen Sie die Konfigurationsdatei php.ini .
Konfigurieren Sie Open_Basedir :
open_basedir = /path/to/your/application:/path/to/other/allowed/directories
Diese Konfiguration beschränkt PHP-Skripte auf nur angegebene Verzeichnisse und vermeidet so die Leckage systemempfindlicher Informationen.
Um die Sicherheit von PHP -Anwendungen in Produktionsumgebungen zu verbessern und zu verhindern, dass die Funktion von PHP_uname () systemempfindliche Informationen austritt, können Sie die Funktion deaktivieren, den Ausgabeinhalt ändern oder Konfigurationsdateien und Zugriffssteuerungsmethoden verwenden, um sie einzuschränken. Der beste Weg, dies zu tun, besteht darin, mehrere Methoden zu kombinieren, um sicherzustellen, dass vertrauliche Informationen nicht nicht vertrauenswürdige Benutzer ausgesetzt sind.