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 Fehler, und selbst die berühmten Programme phpnuke, phpMyAdmin und andere hatten ernsthafte Probleme, ganz zu schweigen von Skripten, die von Gangstern wie mir geschrieben wurden. Wir gehen also davon aus, dass schwerwiegende Probleme bei PHP-Skripten aufgetreten sind. Beispielsweise hatte PHPNUKE vor einiger Zeit ein großes Problem beim Hochladen von PHP-Skripten. Wie können wir den Server so konfigurieren, dass das Skript nicht durchbricht, wenn solche Probleme auftreten?
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 ändern es in:
display_errors = Off
Nach dem Ausschalten der Fehleranzeige wird die PHP-Funktion aktiviert wird falsch ausgeführt. 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 gewisse 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 andere Ausführungsfunktionen wie: exec(), system(), passhru(), popen() werden darauf beschränkt, nur Dateien im angegebenen Verzeichnis auszuführen durch das Programm „safe_mode_exec_dir“. 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.
Detaillierte Informationen zu eingeschränkten Funktionen im abgesicherten Modus finden Sie in den Anweisungen auf der PHP-Hauptseite:
[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:
Wenn das Skript andere Dateien als /usr/local/Apache/htdocs lesen möchte, ist dies nicht zulässig. Wenn die Fehleranzeige aktiviert ist,
wird einen solchen Fehler auslösen:
Warnung: open_basedir-Einschränkung in Kraft, 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 kann kostenlos genutzt werden, indem man sich einfach unter [url]http://www.zend.com[/url] -1[1].1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz registriert
ZendOptimizer-1[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 einfach und das Paket enthält 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:
Dann hat der Optimierer erfolgreich angehängt.
Aber der Compiler ZendEncode ist nicht kostenlos. Hier ist ein von Ma Yong entworfenes [URL]http://www.PHPease.com[/url]... Mi Jiantaos Kang-Modell胗? ]http://www.zend.com[/url] Kontaktieren Sie uns, 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, wie zum Beispiel 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“ keine Schreibrechte gewähren . Andernfalls kann der Angreifer die Homepage-Datei ändern, daher müssen die Berechtigungen des Webverzeichnisses richtig festgelegt werden. Außerdem darf der Eigentümer des PHP-Skripts kein Root sein, da die Funktion zum Lesen von Dateien im Safe_mode darauf beschränkt ist, dass der Eigentümer der gelesenen Datei mit dem Eigentümer des aktuell ausgeführten Skripts identisch sein muss, bevor sie gelesen werden kann. andernfalls werden Fehler wie die folgenden angezeigt, wenn eine Fehlermeldung angezeigt wird:
Warnung: Sicherheitsmodus-Einschränkung in Kraft Das Skript, dessen UID 500 ist, darf nicht auf /etc/passwd zugreifen, dessen Eigentümer UID 0 ist in /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.