suchen
HeimBackend-EntwicklungPHP-TutorialMögliche Angriffe und Lösungen bei der Installation von PHP im CGI-Modus

Wenn Sie PHP nicht in serverseitige Software (wie Apache) einbetten und als Modul installieren möchten, können Sie es im CGI-Modus installieren. Oder verwenden Sie PHP mit verschiedenen CGI-Wrappern, um sichere Chroot- und Setuid-Umgebungen für Ihren Code zu erstellen. Diese Installationsmethode installiert normalerweise die ausführbare PHP-Datei im cgi-bin-Verzeichnis des Webservers. Obwohl PHP als eigenständiger Interpreter verwendet werden kann, ist es aufgrund seines Designs resistent gegen die folgenden Arten von Angriffen:

Zugriff auf Systemdateien: http://my.host/cgi-bin/php?/etc/ passwd Die Informationen nach dem Fragezeichen (?) in der URL-Anfrage werden als Parameter der benannten Zeile an die CGI-Schnittstelle übergeben. Andere Interpreter öffnen die durch das erste Argument in der Befehlszeile angegebene Datei und führen sie aus. Beim Aufruf des im CGI-Modus installierten PHP-Interpreters verweigert dieser jedoch die Interpretation dieser Parameter.

Greifen Sie auf ein beliebiges Verzeichnis auf dem Server zu: http://my.host/cgi-bin/php/secret/doc.html Im obigen Fall befinden sich die URL-Informationen hinter dem Verzeichnis, in dem sich der PHP-Interpreter befindet /secret/ doc.html wird routinemäßig an das CGI-Programm übergeben und interpretiert. Normalerweise leitet ein Webserver es auf eine Seite wie http://my.host/secret/script.php um. Wenn dies der Fall ist, prüfen einige Server die Berechtigung des Benutzers, auf das Verzeichnis /secret zuzugreifen, bevor sie eine Weiterleitung zur Seite unter http://my.host/cgi-bin/php/secret/script.php erstellen. Leider überprüfen viele Server nicht die Berechtigung des Benutzers, auf /secret/script.php zuzugreifen, sondern nur die Berechtigung von /cgi-bin/php, sodass jeder Benutzer, der auf /cgi-bin/php zugreifen kann, auf das Webverzeichnis zugreifen kann einer beliebigen Datei. In PHP können die Konfigurationsoption --enable-force-cgi-redirect zur Kompilierungszeit und die Laufzeitkonfigurationsanweisungen doc_root und user_dir Einschränkungen für Dateien und Verzeichnisse auf dem Server hinzufügen, um solche Angriffe zu verhindern. Die Einstellungen der einzelnen Optionen werden im Folgenden ausführlich erläutert.

Fall 1: Nur öffentliche Dateien ausführen

Wenn alle Inhalte auf dem Webserver durch Passwort oder IP-Adresse eingeschränkt sind, müssen diese Optionen nicht festgelegt werden. Wenn der Webserver keine Umleitung unterstützt oder der Webserver nicht mit PHP kommunizieren kann, um Zugriffsanfragen sicherer zu machen, können Sie die Option --enable-force-cgi-redirect im Konfigurationsskript angeben. Darüber hinaus muss auch bestätigt werden, dass das PHP-Programm nicht auf andere Aufrufmethoden angewiesen ist, wie z. B. den direkten Zugriff auf http://my.host/cgi-bin/php/dir/script.php oder den Zugriff über Umleitung zu http://mein .host/dir/script.php.

In Apache können Umleitungen mithilfe von AddHandler- und Action-Anweisungen eingerichtet werden.

Fall 2: Verwenden Sie die Option --enable-force-cgi-redirect

Diese Kompilierungsoption verhindert, dass jemand auf http://my.host/cgi-bin/php/secretdir A zugreift Eine URL wie /script.php ruft PHP direkt auf. PHP analysiert in diesem Modus nur URLs, die die Umleitungsregeln des Webservers bestanden haben.

Normalerweise können Umleitungseinstellungen in Apache mit dem folgenden Befehl abgeschlossen werden:

Action php-script /cgi-bin/php
AddHandler php-script .php

Diese Option wurde nur unter Apache getestet und hängt davon ab, was Apache im Umleitungsvorgang festlegt. Standard-CGI-Umgebungsvariable REDIRECT_STATUS. Wenn der Webserver keine Möglichkeit unterstützt, festzustellen, ob eine Anfrage direkt oder umgeleitet ist, kann diese Option nicht verwendet werden und es sollten andere Methoden verwendet werden.

Szenario 3: Festlegen von doc_root oder user_dir

Das Einfügen dynamischer Inhalte wie Skripts und ausführbarer Programme in das Hauptdokumentverzeichnis eines Webservers wird manchmal als unsichere Vorgehensweise angesehen. Wenn das Skript aufgrund eines Konfigurationsfehlers nicht ausgeführt werden kann und als normales HTML-Dokument angezeigt wird, kann dies zum Verlust von geistigem Eigentum oder Passwortinformationen führen. Daher richten viele Systemadministratoren speziell ein Verzeichnis ein, auf das nur über PHP CGI zugegriffen werden kann, sodass der Inhalt des Verzeichnisses nur analysiert und nicht so angezeigt wird, wie er ist.

Für die oben genannte Situation, in der es unmöglich ist, zu bestimmen, ob eine Umleitung erfolgen soll, ist es notwendig, ein doc_root-Verzeichnis für Skripte außerhalb des Hauptdokumentverzeichnisses zu erstellen.

Sie können das Home-Verzeichnis des PHP-Skripts über doc_root in der Konfigurationsdatei oder durch Festlegen der Umgebungsvariablen PHP_DOCUMENT_ROOT definieren. Wenn diese Option gesetzt ist, interpretiert PHP nur Dateien im Verzeichnis doc_root und stellt sicher, dass Skripte außerhalb des Verzeichnisses nicht vom PHP-Interpreter ausgeführt werden (mit Ausnahme des unten erwähnten Benutzerverzeichnisses).

Eine weitere verfügbare Option ist user_dir. Wenn user_dir nicht festgelegt ist, ist doc_root die einzige Option, die steuert, wo die Datei geöffnet wird. Beim Zugriff auf eine URL wie http://my.host/~user/doc.php wird die Datei im Home-Verzeichnis des Benutzers nicht geöffnet, sondern nur ~user/doc.php im Verzeichnis doc_root ausgeführt (dies Unterverzeichnis beginnt mit [ ~] als Anfang).

Wenn user_dir festgelegt ist, z. B. public_php, führt eine Anfrage wie http://my.host/~user/doc.php die Datei doc.php im Unterverzeichnis public_php im Home-Verzeichnis des Benutzers aus. Unter der Annahme, dass der absolute Pfad des Home-Verzeichnisses des Benutzers /home/user ist, lautet die ausgeführte Datei /home/user/public_php/doc.php.

user_dir 的设置与 doc_root 无关,所以可以分别控制 PHP 脚本的主目录和用户目录。

情形四:PHP 解释器放在 web 目录以外

一个非常安全的做法就是把 PHP 解释器放在 web 目录外的地方,比如说 /usr/local/bin。这样做唯一不便的地方就是必须在每一个包含 PHP 代码的文件的第一行加入如下语句:

#!/usr/local/bin/php

还要将这些文件的属性改成可执行。也就是说,要像处理用 Perl 或 sh 或其它任何脚本语言写的 CGI 脚本一样,使用以 #! 开头的 shell-escape 机制来启动它们。

在这种情况下,要使 PHP 能正确处理 PATH_INFO 和 PATH_TRANSLATED 等变量的话,在编译 PHP 解释器时必须加入 --enable-discard-path 参数。


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
PHP und Python: Verschiedene Paradigmen erklärtPHP und Python: Verschiedene Paradigmen erklärtApr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP und Python: Ein tiefes Eintauchen in ihre GeschichtePHP und Python: Ein tiefes Eintauchen in ihre GeschichteApr 18, 2025 am 12:25 AM

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Wählen Sie zwischen PHP und Python: Ein LeitfadenWählen Sie zwischen PHP und Python: Ein LeitfadenApr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP und Frameworks: Modernisierung der SprachePHP und Frameworks: Modernisierung der SpracheApr 18, 2025 am 12:14 AM

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

Auswirkungen von PHP: Webentwicklung und darüber hinausAuswirkungen von PHP: Webentwicklung und darüber hinausApr 18, 2025 am 12:10 AM

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Apr 17, 2025 am 12:25 AM

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Apr 17, 2025 am 12:24 AM

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP vs. Python: Anwendungsfälle und AnwendungenPHP vs. Python: Anwendungsfälle und AnwendungenApr 17, 2025 am 12:23 AM

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.