Heim >Backend-Entwicklung >PHP-Tutorial >Zusammenfassung der PHP-Sicherheitsprobleme
(1) Aktivieren Sie den abgesicherten Modus von PHP
Der abgesicherte Modus von PHP ist ein sehr wichtiger integrierter Sicherheitsmechanismus, der einige Funktionen in PHP steuern kann, z. B. system(),
At Gleichzeitig werden die Berechtigungen vieler Dateioperationsfunktionen kontrolliert und bestimmte Schlüsseldateien wie /etc/passwd sind nicht zulässig.
Aber die Standard-php.ini öffnet den abgesicherten Modus nicht Öffne es:
safe_mode = on
(2) Benutzergruppensicherheit
Wenn Safe_mode aktiviert ist, ist Safe_mode_gid deaktiviert, dann kann das PHP-Skript auf die Datei zugreifen , und das gleiche
können auch auf die Datei zugreifen.
Es wird empfohlen, Folgendes festzulegen:
safe_mode_gid = off
Wenn wir es nicht festlegen, können wir die Dateien in unserem Verzeichnis möglicherweise nicht bearbeiten Zum Beispiel müssen wir
Bei der Bearbeitung von Dateien.
(3) Home-Verzeichnis zum Ausführen von Programmen im abgesicherten Modus
Wenn der abgesicherte Modus aktiviert ist, Sie aber bestimmte Programme ausführen möchten, können Sie das Home-Verzeichnis zum Ausführen des Programms angeben:
safe_mode_exec_dir = D:/usr/bin
Im Allgemeinen besteht keine Notwendigkeit, ein Programm auszuführen, daher wird empfohlen, das Systemprogrammverzeichnis nicht auszuführen. Sie können auf ein Verzeichnis verweisen,
und dann das Programm kopieren, das ausgeführt werden muss, zum Beispiel:
safe_mode_exec_dir = D:/tmp/cmd
Ich empfehle jedoch, kein anderes Programm als Sie auszuführen kann auf unser Webverzeichnis verweisen:
safe_mode_exec_dir = D:/usr/www
(4) Dateien im abgesicherten Modus einschließen
Wenn Sie einige öffentliche Dateien einschließen möchten Im abgesicherten Modus ändern Sie dann die Optionen:
safe_mode_include_dir = D:/usr/www/include/
Tatsächlich wurden die in PHP-Skripten enthaltenen Dateien im Allgemeinen im Programm selbst geschrieben kann je nach Bedarf eingestellt werden.
(5) Steuern Sie die Verzeichnisse, auf die PHP-Skripte zugreifen können
Verwenden Sie die Option open_basedir, um zu steuern, dass PHP-Skripte nur auf bestimmte Verzeichnisse zugreifen können, wodurch verhindert werden kann, dass PHP-Skripte auf
sollte nicht Die abgerufenen Dateien begrenzen den Schaden von phpshell bis zu einem gewissen Grad. Wir können es generell so einstellen, dass nur auf das Website-Verzeichnis zugegriffen wird:
open_basedir = D:/usr/www
(6 ) Gefährliche Funktionen ausschalten
Wenn der abgesicherte Modus aktiviert ist, ist ein Funktionsverbot nicht erforderlich, wir erwägen dies jedoch aus Sicherheitsgründen. Zum Beispiel
haben wir das Gefühl, dass wir keine PHP-Funktionen ausführen möchten, einschließlich system(), die Befehle ausführen können, oder Funktionen wie
phpinfo(), die PHP-Informationen anzeigen können, dann wir Sie können sie deaktivieren:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
Wenn Sie Datei- und Verzeichnisvorgänge deaktivieren möchten, können Sie viele Dateivorgänge deaktivieren
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
Das Obige listet nur einige der häufig verwendeten Dateiverarbeitungsfunktionen auf. Sie können die oben genannte Ausführungsbefehlsfunktion auch mit dieser Funktion kombinieren
kann den meisten PHP-Shells widerstehen.
(7) Deaktivieren Sie den Verlust von PHP-Versionsinformationen im HTTP-Header
Um zu verhindern, dass Hacker die PHP-Versionsinformationen auf dem Server erhalten, können wir den Verlust dieser Informationen deaktivieren Informationen im http-Header:
expose_php = Aus
Wenn ein Hacker beispielsweise über Telnet www.shilicn.com 80 telnet, kann er die PHP-Informationen nicht sehen.
(8) Registrierung globaler Variablen deaktivieren
Variablen, die in PHP übermittelt werden, einschließlich Variablen, die mit POST oder GET übermittelt werden, werden automatisch als globale Variablen registriert und können direkt aufgerufen werden,
Dies ist für den Server sehr unsicher, daher können wir nicht zulassen, dass es als globale Variable registriert wird. Daher deaktivieren wir die Option „Globale Variable registrieren“:
register_globals = Off
Wenn es so eingestellt ist, müssen Sie natürlich angemessene Methoden verwenden, um die entsprechenden Variablen abzurufen, z. B. das Abrufen der von GET übermittelten Variablen var.
Dann müssen Sie $_GET['var'] verwenden Um es zu erhalten, sollten PHP-Programmierer darauf achten.
(9) Aktivieren Sie magic_quotes_gpc, um SQL-Injection zu verhindern.
SQL-Injection ist ein sehr gefährliches Problem. In kleinen Fällen wird das Backend der Website angegriffen, und in schwerwiegenden Fällen bricht der gesamte Server zusammen.
Seien Sie also unbedingt vorsichtig. Es gibt eine Einstellung in php.ini:
magic_quotes_gpc = Off
Diese ist standardmäßig deaktiviert, wenn sie aktiviert ist, werden vom Benutzer übermittelte SQL-Abfragen automatisch konvertiert,
Zum Beispiel die Konvertierung von „ in „ usw. spielt eine wichtige Rolle bei der Verhinderung von SQL-Injection. Daher empfehlen wir die Einstellung auf:
magic_quotes_gpc = On
(10) Fehlermeldungssteuerung
Im Allgemeinen gibt PHP einen Fehler aus, wenn es nicht mit der Datenbank verbunden ist oder unter anderen Umständen: Die Fehlermeldung enthält das PHP-Skript
Die vorherigen Pfadinformationen oder Abfrage-SQL-Anweisungen und andere Informationen sind nicht sicher, nachdem diese Art von Informationen an Hacker weitergegeben wurden. Daher wird allgemein empfohlen, dass der Server Fehlermeldungen deaktiviert:
display_errors = Off
Wenn Sie aber Fehlerinformationen anzeigen möchten, müssen Sie die Ebene der Fehleranzeige festlegen, z. B. nur Informationen oberhalb der Warnung anzeigen:
error_reporting = E_WARNING & E_ERROR
Natürlich, Ich empfehle dennoch, die Fehlermeldung auszuschalten.
(11) Fehlerprotokoll
Es wird empfohlen, die Fehlerinformationen nach dem Ausschalten von display_errors aufzuzeichnen, um den Grund zu finden, warum der Server läuft:
log_errors = Auf
Gleichzeitig müssen Sie auch das Verzeichnis festlegen, in dem das Fehlerprotokoll gespeichert wird. Es wird empfohlen, das Root-Apache-Protokoll zusammen zu speichern:
error_log = D:/usr/. local/apache2/logs/php_error.log
Hinweis: Die Datei muss Schreibberechtigungen für den Apache-Benutzer und die Apache-Gruppe zulassen.
MySQL-Betrieb herabstufen
Erstellen Sie einen neuen Benutzer wie mysqlstart
net user mysqlstart ****microsoft /add
net localgroup users mysqlstart / del
gehört keiner Gruppe
Wenn MYSQL in d:mysql installiert ist, erteilen Sie mysqlstart Vollzugriffsberechtigungen
und legen Sie dann die Diensteigenschaften von MYSQL im System fest service , wählen Sie in den Anmeldeeigenschaften diesen Benutzer mysqlstart aus und geben Sie das Passwort ein, OK.
Starten Sie den MYSQL-Dienst neu und dann wird MYSQL mit niedrigen Berechtigungen ausgeführt.
Wenn Apache auf einer Windows-Plattform basiert, müssen wir auf eine weitere Sache achten, die standardmäßig mit Systemberechtigungen ausgeführt wird.
Das ist beängstigend und führt dazu, dass sich die Leute sehr unwohl fühlen Wir geben Apache Reduzieren Sie die Berechtigungen.
net user apache ****microsoft /add
net localgroup users apache /del
ok Wir haben einen Benutzer apche erstellt, der keiner Gruppe angehört.
Wir öffnen den Computermanager, wählen Dienste aus, klicken auf die Eigenschaften des Apache-Dienstes, wir wählen Anmelden, wählen dieses Konto aus, wir geben das oben erstellte Konto und Passwort ein,
Neustart Der Apache-Dienst, ok, Apache läuft mit niedrigen Berechtigungen.
Tatsächlich können wir auch die Berechtigungen jedes Ordners so festlegen, dass der Apache-Benutzer nur das ausführen kann, was wir von ihm möchten, und für jedes Verzeichnis einen separaten Benutzer mit Lese-/Schreibzugriff erstellen.
Dies ist auch eine beliebte Konfigurationsmethode, die von vielen virtuellen Hostanbietern verwendet wird. Diese Methode ist jedoch übertrieben, wenn sie verwendet wird, um dies zu verhindern. (http://www.65066.com.cn)