Heim  >  Artikel  >  php教程  >  Wie man häufige Schwachstellen in PHP-Programmen angreift

Wie man häufige Schwachstellen in PHP-Programmen angreift

黄舟
黄舟Original
2016-12-14 11:41:001202Durchsuche

[Globale Variablen]
Variablen in PHP müssen nicht im Voraus deklariert werden. Sie werden automatisch erstellt, wenn sie zum ersten Mal verwendet werden. Ihre Typen müssen nicht automatisch bestimmt werden den Kontext. Aus der Sicht eines Programmierers ist dies zweifellos eine äußerst praktische Methode. Offensichtlich ist dies auch eine sehr nützliche Funktion von Rapid-Development-Sprachen. Sobald eine Variable erstellt wurde, kann sie überall im Programm verwendet werden. Eine Folge dieser Funktion ist, dass Programmierer Variablen selten initialisieren, da sie bei ihrer ersten Erstellung leer sind.

Natürlich akzeptiert die Hauptfunktion einer PHP-basierten Anwendung im Allgemeinen Benutzereingaben (hauptsächlich Formularvariablen, hochgeladene Dateien, Cookies usw.), verarbeitet dann die Eingabedaten und gibt die Ergebnisse dann an den Client zurück. Browser beenden. Um es PHP-Code so einfach wie möglich zu machen, auf Benutzereingaben zuzugreifen, behandelt PHP diese Eingabedaten tatsächlich als globale Variablen.

Zum Beispiel:




Natürlich werden hierdurch ein Textfeld und eine Schaltfläche zum Senden angezeigt. Wenn der Benutzer auf die Schaltfläche „Senden“ klickt, verarbeitet „test.php“ die Eingaben des Benutzers. Wenn „test.php“ ausgeführt wird, enthält „$hello“ die vom Benutzer in das Textfeld eingegebenen Daten. Von hier aus sollten wir erkennen, dass der Angreifer nach seinen Wünschen beliebige globale Variablen erstellen kann. Wenn der Angreifer „test.php“ nicht über die Formulareingabe aufruft, sondern direkt http://server/test.php?hello=hi&setup=no in die Adressleiste des Browsers eingibt, wird nicht nur „$hello“ erstellt. „$setup“ wird ebenfalls erstellt.

Anmerkung des Übersetzers: Diese beiden Methoden werden normalerweise als „POST“- und „GET“-Methoden bezeichnet.
Der folgende Benutzerauthentifizierungscode deckt Sicherheitsprobleme auf, die durch die globalen Variablen von PHP verursacht werden:

if ($pass == "hello")
$auth = 1 ; >...
if ($auth == 1)
echo „some important information“
?>

Der obige Code prüft zunächst, ob das Passwort des Benutzers „Hallo“ ist. Bei Übereinstimmung wird „$auth“ auf „1“ gesetzt, d. h. die Authentifizierung wird bestanden. Wenn „$suth“ anschließend „1“ ist, werden einige wichtige Informationen angezeigt.

Oberflächlich betrachtet sieht es richtig aus, und einige von uns tun es, aber dieser Code macht den Fehler, anzunehmen, dass „$auth“ leer ist, wenn kein Wert festgelegt ist, aber das hat man nicht erwartet Durch die Verwendung einer Methode wie „http://server/test.php?auth=1“ können wir diesen Code vollständig täuschen und ihn glauben machen, dass wir authentifiziert wurden.

Um die Sicherheit von PHP-Programmen zu verbessern, können wir daher keinen Variablen vertrauen, die nicht klar definiert sind. Dies kann eine sehr schwierige Aufgabe sein, wenn das Programm viele Variablen enthält.

Eine gängige Schutzmethode besteht darin, die Variablen im Array HTTP_GET[] oder POST_VARS[] zu überprüfen, was von unserer Übermittlungsmethode (GET oder POST) abhängt. Wenn PHP so konfiguriert ist, dass die Option „track_vars“ aktiviert ist (was die Standardeinstellung ist), sind vom Benutzer übermittelte Variablen in globalen Variablen und dem oben genannten Array verfügbar.

Aber es ist erwähnenswert, dass PHP über vier verschiedene Array-Variablen verfügt, die zur Verarbeitung von Benutzereingaben verwendet werden. Das HTTP_GET_VARS-Array wird zum Verarbeiten von im GET-Modus übermittelten Variablen verwendet, das HTTP_POST_VARS-Array wird zum Verarbeiten von im POST-Modus übermittelten Variablen verwendet, das HTTP_COOKIE_VARS-Array wird zum Verarbeiten von als Cookie-Header übermittelten Variablen verwendet und für das HTTP_POST_FILES-Array (bereitgestellt von relativ neuem PHP). ), ist es eine völlig optionale Möglichkeit für Benutzer, Variablen zu übermitteln. Eine Benutzeranfrage kann problemlos Variablen in diesen vier Arrays speichern, daher sollte ein sicheres PHP-Programm diese vier Arrays überprüfen.

[Remote File]
PHP ist eine Sprache mit umfangreichen Funktionen und bietet eine große Anzahl von Funktionen, die es Programmierern leicht machen, eine bestimmte Funktion zu implementieren. Aber aus Sicherheitsgründen ist es umso schwieriger, die Sicherheit zu gewährleisten. Remote-Dateien sind ein gutes Beispiel für dieses Problem:

if ( !($fd = fopen("$filename", "r"))
echo("Konnte Datei nicht öffnen: $filename
");

Oben Das Skript versucht zu öffnen die Datei „$filename“ und zeigt eine Fehlermeldung an, wenn dies fehlschlägt. Wenn wir „$filename“ angeben können, können wir natürlich jede Datei auf dem System durchsuchen Ein offensichtliches Merkmal ist, dass es Dateien von jeder anderen WEB- oder FTP-Site lesen kann. Tatsächlich sind die meisten Dateiverarbeitungsfunktionen für Remote-Dateien transparent.

Beispiel:
Wenn Sie „$filename“ angeben „http://target/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir“
Der obige Code nutzt tatsächlich die Unicode-Schwachstelle des Host-Ziels auf dem Computer aus und führt die aus dir-Befehl
.
Dies macht die Unterstützung von include(), require(), include_once() und require_once() für Remote-Dateien im Kontext interessanter. Die Hauptfunktion dieser Funktionen besteht darin, den Inhalt bestimmter Dateien einzubinden und sie entsprechend dem PHP-Code zu interpretieren. Sie werden hauptsächlich für Bibliotheksdateien verwendet.

Zum Beispiel:
include($libdir . "/sprachen.php");
?> Beispiel oben Im Allgemeinen handelt es sich um einen Pfad, der vor der Ausführung des Codes festgelegt wurde. Wenn es dem Angreifer gelingt, „$libdir“ nicht festzulegen, kann er diesen Pfad ändern. Der Angreifer kann jedoch nichts tun, da er nur über den von ihm angegebenen Pfad auf die Datei language.php zugreifen kann (der „Poison null byte“-Angriff in Perl hat keine Auswirkungen auf PHP). Aber mit der Unterstützung für Remote-Dateien können Angreifer alles tun. Beispielsweise kann ein Angreifer eine Datei language.php auf einem Server platzieren, die den folgenden Inhalt enthält:

passthru("/bin/ls /etc"
? >

Dann setzen Sie „$libdir“ auf „http:///“, damit wir den oben genannten Angriffscode auf dem Zielhost ausführen können, und der Inhalt von „/etc“ Das Verzeichnis wird als verwendet. Die Ergebnisse werden an den Browser des Kunden zurückgegeben.

Es ist zu beachten, dass der angreifende Server (d. h. evilhost) nicht in der Lage sein sollte, PHP-Code auszuführen, da sonst der angreifende Code auf dem angreifenden Server und nicht auf dem Zielserver ausgeführt wird Spezifische technische Details finden Sie unter: http://www.securereality.com.au/sradv00006.txt

[Datei-Upload]
PHP unterstützt automatisch das Hochladen von Dateien basierend auf RFC 1867, schauen wir uns das an folgendes Beispiel:

;INPUT TYPE="HIDDEN" NAME= "MAX_FILE_SIZE" VALUE="10240">
Der Benutzer kann eine Datei vom lokalen Computer auswählen. Sobald Sie auf „Senden“ klicken, wird die Datei auf den Server hochgeladen. Dies ist offensichtlich eine nützliche Funktion, aber die Art und Weise, wie PHP reagiert, macht sie unsicher. Wenn PHP zum ersten Mal eine solche Anfrage erhält, akzeptiert es zunächst die Datei vom Remote-Benutzer, noch bevor es mit dem Parsen des aufgerufenen PHP-Codes beginnt, und prüft, ob die Länge der Datei den durch die Variable „$MAX_FILE_SIZE“ definierten Wert überschreitet Besteht diese Zu Testzwecken wird die Datei in einem lokalen temporären Verzeichnis gespeichert.

Daher kann ein Angreifer beliebige Dateien an den Host senden, auf dem PHP ausgeführt wird. Bevor das PHP-Programm entscheidet, ob der Datei-Upload akzeptiert wird, wurde die Datei bereits auf dem Server gespeichert.

Hier werde ich nicht auf die Möglichkeit eingehen, Datei-Uploads zu nutzen, um DOS-Angriffe auf den Server durchzuführen.

Betrachten wir ein PHP-Programm, das Datei-Uploads verarbeitet. Wie oben erwähnt, wird die Datei auf dem Server empfangen und gespeichert (der Speicherort wird in der Konfigurationsdatei angegeben, normalerweise /tmp), und die Erweiterung lautet normalerweise Zufällig, ähnlich der Form „phpxXuoXG“. Das PHP-Programm muss die Informationen der Datei hochladen, um sie zu verarbeiten. Dies kann auf zwei Arten erfolgen: eine, die bereits in PHP 3 verwendet wurde, und die andere, die eingeführt wurde, nachdem wir einen Sicherheitshinweis zur vorherigen Methode erstellt hatten.

Wir können jedoch mit Sicherheit sagen, dass das Problem immer noch besteht und die meisten PHP-Programme immer noch die alte Methode zum Umgang mit hochgeladenen Dateien verwenden. PHP legt vier globale Variablen fest, um hochgeladene Dateien zu beschreiben, wie im obigen Beispiel:

$hello = Dateiname auf dem lokalen Computer (z. B. „/tmp/phpxXuoXG“)
$hello_size = Größe der Datei in Bytes ( z. B. 1024)
$hello_name = Der ursprüngliche Name der Datei auf dem Remote-System (z. B. „c: emphello.txt“)
$hello_type = MIME-Typ der hochgeladenen Datei (z. B. „text/plain“)

Dann beginnt das PHP-Programm mit der Verarbeitung der gemäß „$hello“ angegebenen Datei. Das Problem besteht darin, dass „$hello“ nicht unbedingt eine von PHP festgelegte Variable ist und jeder Remote-Benutzer sie angeben kann. Wenn wir die folgende Methode verwenden:

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

ergibt das folgende PHP globale Variablen (natürlich ist auch die POST-Methode möglich (sogar Cookie)):

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"

Die obigen Formulardaten erfüllen gerade die vom PHP-Programm erwarteten Variablen, aber zu diesem Zeitpunkt verarbeitet das PHP-Programm nicht mehr die hochgeladene Datei, sondern „/etc/“ passwd“ (was häufig zur Offenlegung von Inhalten führt). Dieser Angriff kann verwendet werden, um den Inhalt jeder sensiblen Datei offenzulegen.

Wie ich bereits sagte, verwendet die neue Version von PHP HTTP_POST_FILES[], um die hochgeladene Datei zu ermitteln, und bietet außerdem viele Funktionen zur Lösung dieses Problems. Beispielsweise gibt es eine Funktion, mit der festgestellt werden kann, ob eine bestimmte Datei tatsächlich eine hochgeladene Datei ist. Diese Funktionen lösen dieses Problem sehr gut, aber tatsächlich muss es viele PHP-Programme geben, die noch die alte Methode verwenden und für diesen Angriff anfällig sind.

Als Variante der Datei-Upload-Angriffsmethode schauen wir uns den folgenden Code an:

if (file_exists($theme)) // Überprüft, ob die Datei auf dem lokalen System vorhanden ist (keine Remote-Dateien)
include("$theme");

Wenn der Angreifer „$theme“ kontrollieren kann, ist das offensichtlich Es kann „$theme“ ausnutzen, um jede Datei auf dem Remote-System zu lesen. Das ultimative Ziel des Angreifers besteht darin, beliebige Anweisungen auf dem Remote-Server auszuführen. Da er die Remote-Datei jedoch nicht verwenden kann, muss er eine PHP-Datei auf dem Remote-Server erstellen. Dies mag auf den ersten Blick unmöglich erscheinen, aber das Hochladen von Dateien erledigt dies für uns, wenn der Angreifer zunächst eine Datei mit PHP-Code auf dem lokalen Computer erstellt und dann ein Formular mit einem Dateifeld namens „theme“ erstellt und dieses Formular schließlich dazu verwendet Übermitteln Sie die erstellte Datei mit dem PHP-Code per Datei-Upload. PHP speichert die vom Angreifer übermittelte Datei und setzt den Wert von „$theme“ auf die vom Angreifer übermittelte Datei besteht die Prüfung und der Code des Angreifers wird ausgeführt.

Nachdem der Angreifer die Möglichkeit erlangt hat, beliebige Anweisungen auszuführen, möchte er offensichtlich seine Privilegien ausweiten oder die Ergebnisse erweitern, was einige Toolsets erfordert, die auf dem Server nicht verfügbar sind, und das Hochladen von Dateien hat uns erneut geholfen. Ein Angreifer kann die Funktion zum Hochladen von Dateien verwenden, um Tools hochzuladen, sie auf dem Server zu speichern und dann ihre Fähigkeit zum Ausführen von Befehlen zu nutzen, mit chmod() die Berechtigungen der Datei zu ändern und sie dann auszuführen. Ein Angreifer kann beispielsweise die Firewall oder das IDS umgehen, um ein lokales Root-Angriffsprogramm hochzuladen und es dann auszuführen, wodurch er Root-Rechte erlangt.

Wie wir bereits besprochen haben, dienen include() und require() hauptsächlich der Unterstützung der Codebasis, da wir normalerweise einige häufig verwendete Funktionen in einer separaten Datei ablegen. Diese separate Datei ist die Codebibliothek, wenn wir sie benötigen Um die darin enthaltenen Funktionen zu verwenden, müssen wir nur diese Codebibliothek in die aktuelle Datei einbinden.

Anfangs, als Leute PHP-Programme entwickelten und veröffentlichten, legten sie normalerweise die Erweiterung „.inc“ für die Codebasisdatei fest, um die Codebasis vom Hauptprogrammcode zu unterscheiden, aber sie stellten bald fest, dass dies der Fall war war ein Fehler, da eine solche Datei vom PHP-Interpreter nicht korrekt in PHP-Code geparst werden kann. Wenn wir eine solche Datei direkt auf dem Server anfordern, erhalten wir den Quellcode der Datei. Dies liegt daran, dass der PHP-Interpreter anhand der Dateierweiterung bestimmt, ob er in PHP analysiert wird Code. Die Erweiterung wird vom Site-Administrator festgelegt, normalerweise „.php“, „.php3“ und „.php4“. Wenn in einer PHP-Datei wichtige Konfigurationsdaten ohne entsprechende Erweiterung enthalten sind, ist es für einen Remote-Angreifer leicht, an diese Informationen zu gelangen.

Die einfachste Lösung besteht darin, für jede Datei eine PHP-Dateierweiterung anzugeben. Dies kann den Verlust von Quellcode zwar verhindern, aber durch die Anforderung dieser Datei könnte ein Angreifer Code verursachen, der ausgeführt werden sollte im Kontext unabhängig laufen, was zu allen zuvor besprochenen Angriffen führen könnte.

Das Folgende ist ein offensichtliches Beispiel:

In main.php:
$libDir = "/libdir";
$langDir = " $ libdir/Sprachen";

...

include("$libdir/loadsprache.php":
?>

In libdir/loadSprache.php:
...

include("$langDir/$userLang");
?> ist ziemlich sicher, wenn es von „main.php“ aufgerufen wird, aber da „libdir/load language“ die Erweiterung „.php“ hat, kann ein entfernter Angreifer diese Datei direkt anfordern und willkürlich die Werte „$langDir“ und „$userLang“ angeben 🎜>[Sitzungsdatei]
PHP 4 oder neuere Versionen bieten Unterstützung für Sitzungen. Seine Hauptfunktion besteht darin, die Statusinformationen zwischen Seiten im PHP-Programm zu speichern Er hat sich angemeldet und wer sich auf der Website angemeldet hat, wird in der Sitzung gespeichert, und der gesamte PHP-Code kann diese Statusinformationen abrufen, wenn er auf der Website surftTatsächlich wird beim Starten einer Sitzung (tatsächlich ist in der Konfigurationsdatei festgelegt, dass sie bei der ersten Anfrage automatisch gestartet wird) eine zufällige „Sitzungs-ID“ generiert, die, wenn der Remote-Browser beim Senden der Anfrage immer übermittelt, diese „Sitzungs-ID“ verwendet wird, wird die Sitzung immer beibehalten. Dies lässt sich leicht über Cookies oder durch die Übermittlung einer Formularvariablen (die die „Sitzungs-ID“ enthält) auf jeder Seite erreichen. PHP-Programme können Session verwenden, um eine spezielle Variable zu registrieren. Ihr Wert wird nach dem Ende jedes PHP-Skripts in der Sitzungsdatei gespeichert und vor dem Start jedes PHP-Skripts in die Variable geladen. Hier ist ein einfaches Beispiel:

session_destroy(); // Alle aktuell in der Sitzung befindlichen Daten löschen
$session_auth = "shaun"; ); // $session_auth als Sitzungsvariable registrieren

Neue Versionen von PHP setzen den Wert von „$session_auth“ automatisch auf „shaun“. Skripte werden den geänderten Wert automatisch akzeptieren. Dies ist zwar ein sehr gutes Tool für das zustandslose Web, aber wir sollten auch vorsichtig sein.

Ein offensichtliches Problem besteht darin, sicherzustellen, dass die Variable tatsächlich aus der Sitzung stammt. Wenn das nachfolgende Skript beispielsweise wie folgt lautet:

if ( !empty($session_auth))
// Gewähren Sie hier Zugriff auf die Site
?>

Der obige Code geht davon aus, dass „$session_auth“ aus der Sitzung stammt, nicht aus der Sitzung. Das Bit wird durch Benutzereingaben gesetzt. Wenn ein Angreifer das Bit durch Formulareingaben setzt, kann er sich Zugriff auf die Site verschaffen. Beachten Sie, dass der Angreifer die Variable in der Sitzung registrieren muss, bevor er diese Angriffsmethode verwenden kann. Sobald die Variable in die Sitzung eingefügt wird, überschreibt sie alle Formulareingaben.

Sitzungsdaten werden im Allgemeinen in einer Datei gespeichert (der Speicherort ist konfigurierbar, normalerweise „/tmp“). Der Dateiname hat im Allgemeinen die Form „sess_“. Variablentyp, Variablenwert und einige andere Daten. Da die Datei in einem Multi-Host-System als Benutzer gespeichert wird, der den Webserver betreibt (normalerweise niemand), kann ein böswilliger Websitebesitzer eine Sitzungsdatei erstellen, um Zugriff auf andere Websites zu erhalten und sogar die Sitzungsdatei zu überprüfen .

Der Sitzungsmechanismus bietet Angreifern auch einen weiteren praktischen Ort, um ihre Eingaben in Dateien auf dem Remote-System zu speichern. Für das obige Beispiel muss der Angreifer eine Datei mit PHP-Code auf dem Remote-System ablegen Dies ist nicht durch Hochladen einer Datei möglich. Normalerweise verwendet er die Sitzung, um einer Variablen nach seinen Wünschen einen Wert zuzuweisen, errät dann den Speicherort der Sitzungsdatei und weiß, dass der Dateiname „php“ lautet. ", also muss er nur das Verzeichnis erraten, das normalerweise "/tmp" ist.

Darüber hinaus kann der Angreifer willkürlich die „Sitzungs-ID“ (z. B. „Hallo“) angeben und diese „Sitzungs-ID“ dann verwenden, um eine Sitzungsdatei (z. B. „/tmp/sess_hello“) zu erstellen. , aber die „Sitzungs-ID“ kann nur eine Kombination aus Buchstaben und Zahlen sein.

[Datentyp]
PHP verfügt über lose Datentypen und die Typen der Variablen hängen vom Kontext ab, in dem sie sich befinden. Beispiel: „$hello“ beginnt als String-Variable mit dem Wert „“, wird aber bei der Auswertung zu einer Ganzzahlvariablen „0“, was manchmal zu unerwarteten Ergebnissen führen kann. Wenn der Wert von „$hello“ zwischen „000“ und „0“ liegt, ist das von empty() zurückgegebene Ergebnis nicht wahr.

Arrays in PHP sind assoziative Arrays, das heißt, der Index des Arrays ist vom Typ String. Das bedeutet, dass auch „$hello[“000“]“ und „$hello[0]“ unterschiedlich sind.

Die oben genannten Punkte sollten bei der Entwicklung eines Programms sorgfältig berücksichtigt werden. Beispielsweise sollten wir nicht testen, ob eine Variable an einer Stelle „0“ ist, und leer() verwenden, um sie an einer anderen Stelle zu überprüfen.

[Fehleranfällige Funktionen]
Wenn wir Schwachstellen in PHP-Programmen analysieren und den Quellcode erhalten können, ist eine Liste fehleranfälliger Funktionen das, was wir dringend benötigen. Wenn wir die Parameter dieser Funktionen aus der Ferne ändern können, werden wir wahrscheinlich Schwachstellen finden. Im Folgenden finden Sie eine detailliertere Liste fehleranfälliger Funktionen:

require(): Lesen Sie den Inhalt der angegebenen Datei und interpretieren Sie ihn als PHP-Code
include( ) : Wie oben
eval(): Führe die angegebene Zeichenfolge als PHP-Code aus
preg_replace(): Bei Verwendung mit dem Schalter „/e“ wird die Ersetzungszeichenfolge als PHP-Code interpretiert


exec(): Führt den angegebenen Befehl aus und gibt die letzte Zeile des Ausführungsergebnisses zurück
passthru(): Führt den angegebenen Befehl aus und gibt alle Ergebnisse an den Client-Browser zurück
`` : Führen Sie den angegebenen Befehl aus und geben Sie alle Ergebnisse an ein Array zurück
system(): Identisch mit passhru(), verarbeitet jedoch keine Binärdaten
popen(): Führen Sie den angegebenen Befehl aus und verbinden Sie die Eingabe oder Ausgabe mit dem PHP-Dateideskriptor


fopen(): Öffnen Sie die Datei und entsprechen Sie einem PHP-Dateideskriptor
readfile(): Liest den Inhalt der Datei und gibt ihn dann an den Client-Browser aus
file(): Liest den gesamten Dateiinhalt in ein Array

Anmerkung des Übersetzers: Tatsächlich ist diese Liste nicht sehr long Vollständig, Befehle wie „mail()“ können auch Befehle ausführen, daher müssen Sie sie selbst hinzufügen.
[So erhöhen Sie die Sicherheit von PHP]
Alle oben vorgestellten Angriffe können gut für die Standardinstallation von PHP 4 implementiert werden, ich habe sie jedoch viele Male wiederholt und die Konfiguration von PHP ist sehr flexibel. Durch die Konfiguration einiger PHP-Optionen können wir möglicherweise einigen dieser Angriffe widerstehen. Nachfolgend habe ich einige Konfigurationen nach dem Schwierigkeitsgrad der Implementierung klassifiziert:

*Geringer Schwierigkeitsgrad
**Mittel-niedriger Schwierigkeitsgrad
***Mittel-hoher Schwierigkeitsgrad
****Hoher Schwierigkeitsgrad

Die obige Klassifizierung ist nur eine persönliche Meinung, aber ich kann garantieren, dass Ihr PHP sehr sicher ist, wenn Sie alle von PHP bereitgestellten Optionen nutzen, auch wenn es sich um Code von Drittanbietern handelt, denn es gibt solche viele Funktionen Es ist nicht mehr verfügbar.

**** Setzen Sie „register_globals“ auf „off“
Diese Option verhindert, dass PHP globale Variablen für Benutzereingaben erstellt, d. h. wenn der Benutzer die Formularvariable „Hallo“ übermittelt, wird PHP dies tun nicht „$hello“ erstellen, während nur „HTTP_GET/POST_VARS['hello']“ erstellt wird. Dies ist eine äußerst wichtige Option in PHP. Das Ausschalten dieser Option wird große Unannehmlichkeiten bei der Programmierung mit sich bringen.

*** Setzen Sie „safe_mode“ auf „on“
Aktivieren Sie diese Option. Die folgenden Einschränkungen werden hinzugefügt:
1. Begrenzen Sie, welche Befehle ausgeführt werden können
2. Beschränken Sie die nutzbaren Funktionen
3. Dateizugriffsbeschränkungen basierend auf dem Skripteigentum und dem Zieldateieigentum
4. Datei-Uploads deaktivieren
Dies ist eine großartige Option für ISPs und kann auch die PHP-Sicherheit erheblich verbessern.

** „open_basedir“ festlegen
Diese Option kann Dateioperationen außerhalb des angegebenen Verzeichnisses verhindern und so Angriffe von include() auf lokale Dateien oder Remote-Dateien effektiv verhindern, Sie müssen jedoch weiterhin auf Datei-Uploads achten und Sitzungsdateiangriffe.

** Setzen Sie „display_errors“ auf „off“ und „log_errors“ auf „on“
Diese Option deaktiviert die Anzeige der Fehlermeldung auf der Webseite, zeichnet sie jedoch in der Protokolldatei auf. Dies kann wirksam sein, um der Erkennung von Funktionen im Zielskript durch den Angreifer zu widerstehen.

* Setzen Sie „allow_url_fopen“ auf „off“
Diese Option kann die Remote-Dateifunktion deaktivieren, sehr zu empfehlen!

Vielen Dank fürs Lesen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

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
Vorheriger Artikel:Cursor und dynamisches SQLNächster Artikel:Cursor und dynamisches SQL