• disable_function – “Gefährliche” Methoden verbieten

    von am 2. Februar 2009

    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.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    5 Kommentare »


    • unset
      am 2. Februar 2009 um 08:51 Uhr

      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.


    • Johannes
      am 3. Februar 2009 um 14:03 Uhr

      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.


    • Nils Langner
      am 3. Februar 2009 um 16:58 Uhr

      Ups, dann werde ich den Artikel besser am Wochenende überarbeiten. Danke an euch beiden.


    • unset
      am 3. Februar 2009 um 17:02 Uhr

      Ich hatte aber auch in Erinnerung, dass eval über die disable_function Direktive verboten werden kann.


    • Blar
      am 23. Februar 2009 um 15:00 Uhr

      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.

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.