Heim >php教程 >PHP开发 >Konfigurieren Sie einige serverseitige Funktionen von PHP, um die PHP-Sicherheit zu verbessern

Konfigurieren Sie einige serverseitige Funktionen von PHP, um die PHP-Sicherheit zu verbessern

PHP中文网
PHP中文网Original
2016-12-05 11:19:581473Durchsuche

Shaun Clowes und rfp haben zuvor ausführlich die Probleme vorgestellt, auf die PHP- und CGI-Programme während des Programmierprozesses stoßen, und wie man das System durch Anwendungsschwachstellen durchbrechen kann. In diesem Artikel werden wir einige PHP-Kenntnisse durchgehen
Serverseitige Funktionen zur Konfiguration zur Verbesserung der PHP-Sicherheit. Beim Schreiben von CGI-Skripten müssen wir auf verschiedene Sicherheitsaspekte achten und Benutzereingaben streng filtern. Aber wie können wir am Ufer entlang gehen, ohne unsere Schuhe nass zu machen, und wie können wir Sesamsamen essen
, ohne Sesamsamen zu verlieren? Es gab schwerwiegende Fehler, selbst in bekannten Programmen wie phpnuke und phpMyAdmin. Problem, ganz zu schweigen von den Skripten, die von Gangstern wie mir geschrieben wurden. Wir gehen also davon aus, dass es, wie zum Beispiel vor einiger Zeit, ein ernstes Problem mit dem PHP-Skript gegeben hat Es gibt ein großes Problem damit, dass phpnuke PHP-Skripte hochladen kann. Wie können wir den Server konfigurieren, um zu verhindern, dass das Skript das System durchbricht, wenn ein solches Problem auftritt?

1. Achten Sie beim Kompilieren auf das Patchen bekannter Schwachstellen

Ab 4.0.5 hat die Mail-Funktion von PHP einen fünften Parameter hinzugefügt, der jedoch nicht ordnungsgemäß gefiltert wird, sodass PHP-Anwendungen dies können Durchbrechen Sie die Einschränkungen des Safe_Mode und führen Sie Befehle aus. Wenn Sie also 4.0.5 und 4.0.6 verwenden
Vor der Kompilierung müssen wir die Datei ext/standard/mail.c im PHP-Quellcodepaket ändern, um den fünften Parameter der Mail-Funktion zu deaktivieren oder Shell-Zeichen zu filtern. In Zeile 152 der Datei mail.c ist dies die folgende Zeile:
if (extra_cmd != NULL) {
gefolgt von extra_cmd=NULL; oder extra_cmd = php_escape_shell_cmd(extra_cmd); und dann kompilieren php, dann haben wir die Schwachstelle gepatcht.

2. Ändern Sie die php.ini-Konfigurationsdatei

Nehmen Sie Änderungen basierend auf der php.ini-dist der PHP-Distributionsversion vor.
1)Fehlerbehandlung und -protokollierung
Im Bereich Fehlerbehandlung und -protokollierung können Sie einige Einstellungen vornehmen. Zuerst finden Sie:
display_errors = On
Standardmäßig schaltet PHP die Fehlermeldungsanzeige ein. Wir haben es geändert in:
display_errors = Off

Nach dem Ausschalten der Fehleranzeige wird die PHP-Funktion aktiviert Ausführungsfehler Die Informationen werden dem Benutzer nicht mehr angezeigt, was Angreifer bis zu einem gewissen Grad daran hindert, den physischen Standort des Skripts und einige andere nützliche Informationen aus der Fehlermeldung zu erfahren, was zumindest bestimmte Hindernisse für die Black-Box-Erkennung des Angreifers schafft . Diese Fehlermeldungen können für uns selbst nützlich sein. Wir können sie in die angegebene Datei schreiben lassen und dann Folgendes ändern:
log_errors = Off
in:
log_errors = On

und das angegebene Datei, suchen Sie die folgende Zeile:
;error_log = Dateiname
Entfernen Sie den vorherigen; Kommentar und ändern Sie den Dateinamen in die angegebene Datei, z. B.
/usr/local/apache/logs/php_error.log

error_log = /usr/local/apache/logs/php_error.log
Auf diese Weise werden alle Fehler in die Datei php_error.log geschrieben.

2)Abgesicherter Modus

Die Funktion „safe_mode“ von PHP schränkt viele Funktionen ein oder deaktiviert sie, wodurch PHP-Sicherheitsprobleme weitgehend gelöst werden können. Suchen Sie im Abschnitt „Abgesicherter Modus“ nach:
safe_mode = Off
und ändern Sie es in:
safe_mode = On

Dadurch wird die Funktion „safe_mode“ aktiviert. Einige Funktionen wie „shell_exec()“ und „die Systembefehle ausführen können, sind verboten, und einige andere Ausführungsfunktionen wie: exec()“, system(), passthru(), popen() ist auf die Ausführung von Programmen in dem durch „safe_mode_exec_dir“ angegebenen Verzeichnis beschränkt. Wenn Sie wirklich einige Befehle oder Programme ausführen möchten, finden Sie Folgendes:
safe_mode_exec_dir =
Geben Sie den Pfad des auszuführenden Programms an, z. B.:
safe_mode_exec_dir = /usr/local/php/exec

Kopieren Sie dann das Programm, das Sie verwenden möchten, in das Verzeichnis /usr/local/php/exec, damit die eingeschränkten Funktionen wie oben das Programm weiterhin im Verzeichnis ausführen können.

Ausführliche Informationen zu eingeschränkten Funktionen im abgesicherten Modus finden Sie in den Anweisungen der Haupt-PHP-Site:
[url]http://www.php.net/manual/en/features.safe- mode.php[/url]

3) deaktivieren_funktionen

Wenn Sie sich über die Schädlichkeit einiger Funktionen nicht im Klaren sind und diese nicht verwenden, deaktivieren Sie diese Funktionen einfach. Suchen Sie die folgende Zeile:
disable_functions =
Fügen Sie die zu deaktivierende Funktion nach „=" hinzu und trennen Sie mehrere Funktionen durch ",".

3. Ändern Sie httpd.conf

Wenn Sie Ihrem PHP-Skriptprogramm nur erlauben, im Webverzeichnis zu arbeiten, können Sie auch die Datei httpd.conf ändern, um den Operationspfad von PHP einzuschränken. Wenn Ihr Webverzeichnis beispielsweise /usr/local/apache/htdocs ist, fügen Sie diese Zeilen zu
httpd.conf hinzu:

php_admin_value open_basedir /usr/local/apache/htdocs Fehler zeigt an, dass es geöffnet ist

löst einen Fehler wie diesen aus:
Warnung: open_basedir-Einschränkung in Kraft. Datei befindet sich im falschen Verzeichnis in /usr/local/apache/htdocs/open.php in Zeile 4 und so weiter.

4. Kompilieren Sie den PHP-Code

Zend hat einen großen Beitrag zu PHP geleistet. Die PHP4-Engine verwendet Zend und hat auch viele PHP-Erweiterungskomponenten wie ZendOptimizer und ZendEncode entwickelt. Der Optimierer ZendOptimizer muss nur unter [url]http://www.zend.com[/url] registriert werden, um kostenlos zu sein?... Die gerade 鸲 gemischte Bartkante ist im Süden immer niedrig?/a> [1] .1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1[1]. 1.0-PHP_4 .0.5-Windows-i386.zip


Die Installation des Optimierers ist sehr bequem und im Paket finden Sie detaillierte Anweisungen. Überprüfen Sie am Beispiel der UNIX-Version das Betriebssystem genau und extrahieren Sie die Datei ZendOptimizer.so im Paket in ein Verzeichnis, vorausgesetzt, es ist /usr/local/lib
, und fügen Sie zwei Sätze in php.ini hinzu:
zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so"

Das ist es. Verwenden Sie phpinfo(), um den folgenden Text auf der linken Seite des Zend-Symbols anzuzeigen:
mit Zend Optimizer v1.1.0, Copyright (c) 1998-2000, von Zend Technologies

Dann hat der Optimierer erfolgreich angehängt.
Aber der Compiler ZendEncode ist nicht kostenlos. Hier ist ein [url]http://www.PHPease.com[/url] Design von Ma Yong. ... Mi Jiantaos Kangmo胗?/a> [url]http://www.zend.com[/url] Kontakt, um die Lizenzvereinbarung zu erhalten.

Nachdem das PHP-Skript kompiliert wurde, erhöht sich die Ausführungsgeschwindigkeit des Skripts erheblich. Die Skriptdatei kann nur eine Reihe verstümmelter Zeichen erkennen. Dies verhindert, dass der Angreifer das Skriptprogramm auf dem Server weiter analysiert. und der ursprüngliche Klartext im PHP-Skript Gespeicherte Passwörter werden ebenfalls vertraulich behandelt, beispielsweise MySQL-Passwörter. Allerdings ist es aufwändiger, das Skript auf der Serverseite zu ändern. Es ist besser, es lokal zu ändern und dann hochzuladen.


5. Berechtigungseinstellungen für Dateien und Verzeichnisse

Mit Ausnahme des Upload-Verzeichnisses dürfen die Berechtigungen für andere Verzeichnisse und Dateien im Webverzeichnis dem Benutzer „nobody“ nicht das Schreiben erlauben Berechtigungen. Andernfalls kann der Angreifer die Homepage-Datei ändern, daher müssen die Berechtigungen des Webverzeichnisses richtig festgelegt werden. Außerdem darf der Besitzer des PHP-Skripts kein Root sein, da Dateien im Safe_mode gelesen werden. Die Funktion ist eingeschränkt, sodass der Eigentümer der gelesenen Datei mit dem Eigentümer des aktuell ausgeführten Skripts identisch sein muss, um gelesen zu werden. Andernfalls wird bei eingeschalteter Fehleranzeige ein Fehler wie der folgende angezeigt:

Warnung: SAFE MODE-Einschränkung in Kraft. Das Skript mit der UID 500 ist Der Zugriff auf /etc/passwd im Besitz von UID 0 ist nicht gestattet /usr/local/apache/htdocs/open.php in Zeile 3
Auf diese Weise können wir verhindern, dass viele Systemdateien gelesen werden, wie zum Beispiel: /etc/passwd usw.

Auch die Besitzer des Upload-Verzeichnisses und des Upload-Skripts müssen gleich eingestellt sein, sonst kommt es zu Fehlern im Safe_mode.

6. Mysql-Startberechtigungseinstellungen


Mysql sollte nicht mit Root gestartet werden. Am besten erstellen Sie einen anderen Mysqladm-Benutzer. Sie können dem Systemstartskript einen Satz hinzufügen, z. B. /etc/rc.local:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"

Danach Wenn das System neu startet, wird der MySQL-Prozess auch automatisch als Mysqladmin-Benutzer gestartet.

7. Durchsicht und Durchsicht von Protokolldateien und Upload-Verzeichnissen

Das Auffinden von Angriffsspuren aus einer so großen Protokolldatei ist wie das Finden einer Nadel in einer Heuhaufen, und es ist möglicherweise nicht möglich. Die im Internet hochgeladenen Dateien sollten ebenfalls regelmäßig überprüft werden. Möglicherweise liegt ein Problem mit dem Programm vor und der Benutzer hat einige illegale Dateien hochgeladen, z. B. beim Ausführen von Skripten.

8. Patches des Betriebssystems selbst

Das Patchen bekannter Schwachstellen im System ist die grundlegendste Verantwortung des Systemadministrators und stellt auch die letzte Verteidigungslinie dar.


Nach der obigen Konfiguration kann man zwar nicht sagen, dass sie uneinnehmbar ist, aber sie hat dem Angreifer in gewissem Maße auch große Probleme bereitet, selbst wenn das PHP-Skript schwerwiegende Schwachstellen aufweist Durch das Programm kann der Angreifer keine praktischen Folgen für die Zerstörung haben.

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