it-swarm.com.de

PHP: So deaktivieren Sie gefährliche Funktionen

Wie kann ich die gefährliche eval Funktion deaktivieren? Kann das mit der Funktion ini_set durchgeführt werden?

Wie kann ich die folgenden Funktionen deaktivieren? Können wir sie mit der Funktion ini_set deaktivieren?

allow_url_fopen  
allow_url_include
exec
Shell_exec
system
passthru
popen
stream_select

eval ist eine der gefährlichsten Funktionen, mit denen Bösewichte die Dinge ausnutzen können. Es sollte einen Mechanismus geben, um das zu deaktivieren, ohne auf php.ini file zurückzugreifen; sollte aber programmatisch erfolgen.

Nun, Leute, ich suche nach Antworten, die auf die Deaktivierung dieser gefährlichen, liebenswerten Kerle hindeuten, ohne zur php.ini file zu gehen; Ich meine, wie man sie zur Laufzeit oder programmgesteuert deaktiviert?

Danke im Voraus....

Update

Hat jemand von PHP Shell Offender Script gehört? Es hat hauptsächlich die Eval-Funktion für den Exploit verwendet. Hacker können ihren PHP-Code auf Ihrer Website ausführen.

Meine Frage war, dass ich die Eval-Funktion in der php.ini-Datei nicht vollständig deaktivieren möchte. Ich habe zum Beispiel mein eigenes MVC-Framework entwickelt. Nun können die Benutzer des Frameworks in der Konfigurationsdatei des Frameworks angeben, ob die Funktion eval (und andere) deaktiviert werden soll oder nicht. Dies bleibt also der Wahl der Framework-Benutzer überlassen. Sobald sie angeben, um es zu deaktivieren; Ich sollte in der Lage sein, die Eval-Funktion programmatisch zu deaktivieren.

Das ist also das Szenario. Auf der Suche nach hilfreichen Antworten/Lösungen.

Danke noch einmal.

16
Sarfraz

Um Funktionen hauptsächlich aus Sicherheitsgründen zu deaktivieren, können Sie die Direktive disable_functions in Ihrer php.ini-Konfigurationsdatei verwenden.

Aber wie in der Dokumentation heißt es:

Diese Direktive muss in php.ini Festgelegt werden. Sie können dies beispielsweise nicht in Httpd.conf festlegen.

Ich nehme an, das ist zu "intern", um irgendwo anders als in PHP konfigurierbar zu sein ... Und da es sicherheitsbezogen ist, ist es Sache des Systemadministrators, es zu konfigurieren.


Dennoch ist es die beste Sicherheitsmaßnahme, sauberen/sicheren Code zu schreiben, alle Eingaben zu filtern, alle Ausgaben zu entgehen ... Und lassen Sie niemanden ihren eigenen Code auf Ihrem Server ausführen!

11
Pascal MARTIN

Sie haben Angst davor, php.ini zu verwenden, um die meisten davon zu deaktivieren. Es wird jedoch schlimmer. eval() ist technisch keine Funktion, es ist ein Sprachkonstrukt und kann NICHT mit disable_functions deaktiviert werden. Dazu müssen Sie etwas wie Suhosin installieren und von dort aus deaktivieren.

Ein guter Webmaster sollte eine Sicherheitsüberprüfung als wesentlichen Bestandteil der Website-Einrichtung betrachten. Versuchen Sie nicht, dies völlig abzuschwächen, die Sicherheit der Menschen ist schon faul genug. Wenn Sie Tools (wie einen Webhost) verwenden, sollten Sie die Initiative ergreifen, um zumindest ein flüchtiges Wissen über den verantwortungsvollen Umgang mit einem Tool zu haben.

Allerdings gibt es noch einige andere Möglichkeiten, um die meisten Hack-Versuche schwer zu verkrüppeln. Dazu gehören:

- Deaktivieren Sie base64_decode() mit disable_functions. Nun, es gibt Wege, um dies zu umgehen, jedoch ist die überwiegende Mehrheit der Hack-Skripts generischer Natur, und dies wird etwa 95% von ihnen brechen, da sie beide Funktionen haben, um ordnungsgemäß funktionieren zu können. Dies bedeutet nicht, dass Ihr Server nicht gehackt werden kann, aber in den meisten Fällen würde es den Aufwand verursachen, Ihren Server manuell nach Schwachstellen zu durchsuchen, und die meisten Hacker spielen die Zahlen und haben dafür keine Zeit (HINWEIS: Einige Hacker haben dies.) Zeit dafür, dies ist keine magische Kugel an sich).

Filtern Sie alle Eingaben für allgemeine Exploit-String-Muster wie <?php, die häufig verwendet werden, um bei einem öffnenden PHP-Tag unbemerkt zu quietschen. Es gibt mehrere solcher Muster. Es empfiehlt sich, bestimmte Zeichen auf die Whitelist zu setzen und alle anderen für jede Eingabe abzulehnen. Zumindest filtern Sie die oben genannten Nullterminatoren und mögliche SQL-Injection-Strings wie '; -- (nehmen Sie nicht an, dass durch die Verwendung von pdo oder mysqli ALLE Injektionsversuche gefiltert werden richtig vorbereitete Anweisungen verwenden).

Bei allen Verzeichnissen, die nur Medien bedienen, sollte der Skriptzugriff deaktiviert sein, und alle Uploads und Medien sollten nur in einem solchen Verzeichnis abgelegt werden. Es ist besser, nur die akzeptablen Medien als Blacklist-Skripte auf die Whitelist zu setzen, da es verschiedene Möglichkeiten gibt, eine Skriptdatei auszuführen (z. B. php, php5, phtml usw.), die einzeln in einer bestimmten Serverumgebung verfügbar sein können . Sie können dies mit einem einfachen .htaccess tun, der ähnlich wie das Medienverzeichnis abgelegt wird:

php_flag engine off
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .aspx .htm .html .shtml .sh .cgi
Options -Indexes -ExecCGI

<Files "\.(jpe?g|png|gif|bmp|tiff|swf|flv|mov|avi|mp4)$">
  order deny,allow
  deny from all
</Files>

Dieser Teil kann dynamisch von PHP geschrieben werden, so dass Ihre Anwendung in der Lage ist, sensible Verzeichnisse auf ähnliche Weise zu sichern, was eine Reihe von Hacker-Problemen abmildern kann, da dies normalerweise übersehen wird. Ich füge fast jeder Wordpress-Site, an der ich arbeite, im Upload-Verzeichnis normalerweise einen ähnlichen .htaccess hinzu, und habe mich oft gefragt, warum dies nicht sofort möglich ist, da es viele Hack-Versuche blockiert und die Anwendung nicht stört auf irgendeine Weise, die ich bemerkt habe.

Wenn Sie sich nicht auf einem Apache-Server befinden, müssen Sie leider eine andere Lösung finden (unter IIS gibt es höchstwahrscheinlich eine Entsprechung, aber mir ist nicht bewusst, was es persönlich wäre).

-Sie sollten auch .htaccess (oder web.config/etc) konfigurieren, um alle Zugriffsmethoden zu deaktivieren, die für Ihre spezifische Anwendung nicht erforderlich sind. Wenn Sie keine REST-fähigen Webdienste ausführen, gibt es wirklich keinen Grund, PUT oder DELETE zuzulassen. Sie sollten TRACE höchstwahrscheinlich auch deaktivieren, und wahrscheinlich haben Sie auch keinen Grund, OPTIONS oder HEAD aktiviert zu lassen. Es sollte auch erwähnt werden, dass alle nicht anerkannten Verbindungsmethoden standardmäßig in GET aufgelöst werden, was bedeutet, dass ich von der Befehlszeile aus so etwas tun kann:

curl -X BOOGITY -d arg=badstuff -d arg2=morebadstuff yoursite.com

In diesem Beispiel ist BOOGITY ohne Bedeutung. Ihr Server interpretiert dies jedoch als:

curl -X GET -d arg=badstuff -d arg2=morebadstuff yoursite.com

Ihre Anwendung wird dies jedoch wahrscheinlich nicht tun. Um dies zu verhindern, sollten Sie Ihren Server so konfigurieren, dass nur GET als GET akzeptiert wird und nicht, dass dies der Standard ist.

In den meisten Fällen ist es nicht primär wichtig, die Ausführung bestimmter PHP-Muster in Ihrer Umgebung zu erschweren. Es geht darum, die Aufnahme von Rogue-Code (entweder lokal oder extern) zu verhindern, so dass dies nicht zum Problem wird. Wenn Sie die Installation von Modulen oder ähnlichem in Ihrem CMS zulassen, werden schlampige Programmierer schließlich auch Exploits erstellen, bei denen Sie nicht wirklich viel tun können, abgesehen von der Erzwingung ziemlich strenger API-Parameter, die es sehr schwierig machen, dies nur schlecht zu tun. Dies kann jedoch niemals der Fall sein unmöglich gemacht Unterschätzen Sie niemals die Kapazität eines Offshore-Hack-Shops oder selbsternannter "php ninja", um fleißig mit Ihrem System auf die unsicherste oder nicht konforme Weise zu arbeiten, massive Schwachstellen zu schaffen und eine beliebige Anzahl von Kreisverkehr-Hacks zu erfinden, um dies zu tun eigentlich schwieriger als nur auf die richtige Weise zu tun.

/ Sicherheitslärm.

21
mopsyd

Kurz gesagt: Das geht nicht. 

Aber ich glaube, Sie verstehen nicht wirklich, wie eval und diese Funktionen ausgenutzt werden. Das Problem tritt auf, wenn Programmierer die an sie übergebenen ARGUMENTE nicht ordnungsgemäß bereinigen.

Das von Ihnen erwähnte Php-Shell-Angriffsskript ist nur ein einfaches PHP-Skript, das diesen Funktionen Argumente übergibt. Die Angreifer hatten jedoch bereits eine Möglichkeit, das schädliche Skript einzuspeisen/hochzuladen. Wenn Sie diese Funktionen nicht verwenden und keine Argumente von Benutzereingaben übergeben, können Angreifer mithilfe von eval () oder Verwandten keinen willkürlichen Code auf Ihrem Server ausführen.

Hosten Sie dieses Framework für Ihre Benutzer? Wenn Sie Benutzern das Hochladen und Ausführen von Code ermöglichen, liegt ein größeres Problem in Ihren Händen.

Lesen Sie hier mehr über die Remote-Code-Ausführung und das Einschließen von Remote-/lokalen Dateien, um mehr über Angriffe zu erfahren, die damit in Zusammenhang stehen: Häufige PHP-Schwachstellen

11
pcp

Die Direktive disable_functions ist nur in der Konfigurationsdatei php.ini verfügbar. 

Das Deaktivieren von Funktionen zur Laufzeit wäre nicht sinnvoll, da Sie die deaktivierte Funktionsliste zur Laufzeit ändern können, um Funktionen ebenfalls wieder zu aktivieren.

6
Kenaniah

Sie können eval deaktivieren durch https://github.com/mk-j/PHP_diseval_extension umgehen und das Problem umgehen, dass Suhosin nicht php7-kompatibel/stabil ist.

1
velcrow