Facebook
Twitter
Google+
Kommentare
5

disable_function – „Gefährliche“ Methoden verbieten

In PHP gib es ein paar Methoden, die ich nicht so gerne verwende. Momentan gehört zum Beispiel eval dazu. Diese Methode wird dazu verwendet einen String auszuführen. Es ist nicht unbedingt der Grund, dass man so einfache Code Injection hinbekommen kann, vielmehr mag ich es nicht, wenn man über seine Methoden keine statischen Analysen laufen lassen kann. Oder habt ihr mal versucht eine Softwaremetrik, auf eine Funktion anzuwenden, die eval verwendet und man eigentlich gar keine Ahnung haben kann, was dort eigentlich genau passiert?

Ich kann mir auch vorstellen, dass einige von euch mit der Einführung von PHP 5.3 nicht so wirklich glücklich sind, wenn der goto Befehl verwendet wird.

Für all die Leute, die bestimmte Funktionen nicht mögen, haben sich die PHP Erfinder eine Besonderheit überlegt. Die disable_function Option in der php.ini. Hier kann man Komma separiert alle Methoden auflisten, die den Entwicklern nicht nativ zur Verfügung stehen sollen. Ein typischer Eintrag könnte wie folgt aussehen:

disable_functions = exec, eval, goto

Hier könnte man nicht mehr auf die drei aufgelisteten Helfer zugreifen. Ich selbst habe nichts auf meinem Server gesperrt, da ich meistens weiß, was ich mache. Trotzdem kann es hilfreich sein, dieses Setting zu kennen.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

5 Comments

  1. AFAIK lassen sich damit wirklich nur Funktionen verbieten. Methoden (wie du fälschlicherweise geschrieben hast) und Sprachkonstrukte nicht. Und goto scheint mir eins zu sein 😉

    Hab übrigens auch grade noch 10 Tipps zum absichern von (PHP-)Software zusammengetragen.

    Reply
  2. Exakt, es lassen sich nur Funktionen damit deaktivieren. eval ist auch keine Funktion, wobei ich dachte dafür hätten wir einen Hack implementiert, haben wir aber scheinbar nicht. Sagt zumindest mein einminütiger Test.

    Ein Hinweis für Entwickler die vorausschauend entwickeln wollen: exec und co sind häufig deaktiviert auf shared hosts etc. um das abzugfragen kann man Reflection nutzen: $r = new ReflectionFunction(„printf“); if ($r->isDisabled()) { … }

    Zudem gibt es noch disable_classes um Klassen zu deaktivieren, das habe ich aber noch nie, außerhalb meiner eigenen Tests, gesetzt gesehen.

    Reply
  3. Da eval() ein Sprachkonstrukt und keine Funktion ist, kann dieses nicht über disable_functions in der php.ini deaktiviert werden. Wenn man eval() trotzdem aus Sicherheitsgründen unterbunden werden soll, kann man Erweiterung Suhosin verwenden.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen