rob: phpinfo(): Environment-Variablen anzeigen/verstecken?

Salvete!

Nach Aufruf von phpinfo() bei einem Provider, wo ich gerade mit einer Site hinziehen wollte, mußte ich erschreckt feststellen, was ich dort für Infos erhalte.
Nicht nur, daß auf der SuSE-Kiste dort X installiert ist, nein auch KDE und Gnome laufen drauf... Scheinbar auch 'ne komplette TeX-Distribution.
Ich weiß nicht, was das auf einem Webserver zu suchen hat... Aber da dort ohnehin absolut alles unter root läuft, muß ich mir deswegen wohl auch keine Sorgen mehr machen ;o)
Vielleicht sollte ich da besser mal anrufen und das ansprechen, bevor ich Files auf den Server lade... :o)

Nun denn, wie auch immer...

Unter dem Punkt "Environment" der phpinfo()-Ausgabe erhalte ich eine verdammt lange Liste und frage mich, wo die überhaupt herkommt.
Mit welcher Konfigurationseinstellung kann ich darauf Einfluß nehmen?
Ich sehe dort Variablen wie TERM, PAGER, LESSOPEN, NNTPSERVER, INFOPATH, HISTSIZE, und viele viele andere. Viele davon sind auf meinem System natürlich auch gesetzt. Nur in meiner php.ini erscheint unter dem Punkt "Environment" so gut wie gar nichts.
Wie kommt es, daß ich hier bei meinem Provider so viele Infos bekomme? Kann man irgendwie festlegen, welche Werte dort gezeigt werden dürfen? Wenn ja, wie?
Ist es möglich, die Ausgabe von phpinfo() zu faken? Kann man falsche Werte anzeigen lassen? Kann man Werte aus der Anzeige entfernen? Könnte man z.B. als SERVER_SOFTWARE anzeigen lassen, daß dort ein IIS werkelt, obwohl es sich um einen Apachen handelt?
Ich glaube zwar nicht an "Security by Obscurity", aber es würde mich halt mal interessieren, ob diese Möglichkeit besteht...
Bietet PHP irgendwelche Möglichkeiten zu sowas (außer expose_php)?

Schöner Gruß, rob

  1. hi,

    Unter dem Punkt "Environment" der phpinfo()-Ausgabe erhalte ich eine verdammt lange Liste und frage mich, wo die überhaupt herkommt.

    http://www.php.net/manual/de/reserved.variables.php#reserved.variables.environment

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. echo $begrüßung;

    Ich gehe mal davon aus, dass es sich um ein Linux-System handelt.

    Unter dem Punkt "Environment" der phpinfo()-Ausgabe erhalte ich eine verdammt lange Liste und frage mich, wo die überhaupt herkommt.

    Das sind Umgebungsvariablen, die das System und die Shell und ein Script/Programm definieren kann. Die für die aktuelle Shell vorhandenen kann man sich (meist) mit set anzeigen lassen.

    Ist es möglich, die Ausgabe von phpinfo() zu faken? [...] Kann man Werte aus der Anzeige entfernen?

    Weise $_ENV vor Aufruf von phpinfo() ein leeres Array zu.

    Kann man irgendwie festlegen, welche Werte dort gezeigt werden dürfen? Wenn ja, wie?

    Wenn du sie dauerhaft weghaben willst und PHP als Apache-Modul läuft, setze direkt vor Start (in die selbe Zeile) des Apache-Prozesses ein env -i
    Für die CGI-Version könnte es ähnlich funktionieren, da habe ich aber keine Erfahrung.

    echo "$verabschiedung $name";

    1. hi,

      Ist es möglich, die Ausgabe von phpinfo() zu faken? [...] Kann man Werte aus der Anzeige entfernen?

      Weise $_ENV vor Aufruf von phpinfo() ein leeres Array zu.

      Das hilft für die Stellen, wo phpinfo() explizit die Inhalte von $_ENV anzeigt, bei $_SERVER analog.

      Werte wie bspw. die eingangs angesprochene SERVER_SOFTWARE werden aber noch mal zusätzlich aufgeführt, und daran ändert sich dadurch nichts.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Salvete!

    Wie meinen?
    egal: Moin!

    Nach Aufruf von phpinfo() bei einem Provider, wo ich gerade mit einer Site hinziehen wollte, mußte ich erschreckt feststellen, was ich dort für Infos erhalte.
    Nicht nur, daß auf der SuSE-Kiste dort X installiert ist, nein auch KDE und Gnome laufen drauf... Scheinbar auch 'ne komplette TeX-Distribution.
    Ich weiß nicht, was das auf einem Webserver zu suchen hat... Aber da dort ohnehin absolut alles unter root läuft, muß ich mir deswegen wohl auch keine Sorgen mehr machen ;o)
    Vielleicht sollte ich da besser mal anrufen und das ansprechen, bevor ich Files auf den Server lade... :o)

    Nun denn, wie auch immer...

    Dabei würde ich es nicht belassen, sondern mich doch eines Fuchttriebes bedienen, der mich schnellstmöglich vom Provider entfernt...

    Unter dem Punkt "Environment" der phpinfo()-Ausgabe erhalte ich eine verdammt lange Liste und frage mich, wo die überhaupt herkommt.
    Mit welcher Konfigurationseinstellung kann ich darauf Einfluß nehmen?

    Was Scripte angeht, hast Du die Möglichkeit über variables_order die Variable $_ENV/$_SERVER beim Abarbeiten eines Scriptes erst gar nicht befüllen zu lassen. Das nimmt aber keinerlei Einfluß auf die Ausgabe von phpinfo().

    Wie kommt es, daß ich hier bei meinem Provider so viele Infos bekomme? Kann man irgendwie festlegen, welche Werte dort gezeigt werden dürfen? Wenn ja, wie?

    Der Provider administriert über eine grafische Oberfläche. Diese benötigt zum funktionieren generell mehr Umgebungsvariablen. Das Traurige ist dabei, daß die Fülle an Variablen leider auch die Geschwindigeit der Scripte mindert. In einfachen Schleifen (durchlaufen eines Datenfeldes) sind dies auf einer SuSe mit Standard-ENV ca. 20% Geschwindigkeitsverlust.

    Einige Werte, die Du in PHP siehst und nicht vom Server selbst herrühren, werden von der Shell über den Server an PHP "durchgereicht". Eine Beschränkung nach -erlaubt- -nicht erlaubt- ist dabei irrelevant. Die Frage ist eher: Werden sie von PHP benötigt. (Ein mögliches Beispiel hierfür wäre das Aufrufen von Programmen aus PHP heraus.) Für den grafischen Schnickschnack und DIR_COLORS wird man dies wohl eher verneinen können.

    Ist es möglich, die Ausgabe von phpinfo() zu faken? Kann man falsche Werte anzeigen lassen? Kann man Werte aus der Anzeige entfernen?

    Ja.
    Erstes verlangt Eingriff in den Quellcode des Interpreters.
    Zweites setzt PHP als Modul voraus. Dann lassen sich Werte mittels apache_setenv() setzen.
    Drittes beträfe nur die ENV-Variablen der Shell. Diese können per Serveraufruf über env -i ./apachectl -k start komplett abgestellt werden.

    Könnte man z.B. als SERVER_SOFTWARE anzeigen lassen, daß dort ein IIS werkelt, obwohl es sich um einen Apachen handelt?

    Siehe apache_setenv(). Sinn macht Dies nicht, da ich bspw. auf unbekannten Systemen mir immer die HTTP-Response-Header auslese. Diese kannst Du, was den Header "Server: ~" angeht, durch PHP nicht verfälschen.

    Ich glaube zwar nicht an "Security by Obscurity", aber es würde mich halt mal interessieren, ob diese Möglichkeit besteht...
    Bietet PHP irgendwelche Möglichkeiten zu sowas (außer expose_php)?

    PHP ist und bleibt versklavter Handlanger seiner übergeordneten Serversoftware. Wenn etwas verborgen werden soll, dann muß in dessen Quellcode eingegriffen werden.

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
    1. hi,

      Ich glaube zwar nicht an "Security by Obscurity", aber es würde mich halt mal interessieren, ob diese Möglichkeit besteht...
      Bietet PHP irgendwelche Möglichkeiten zu sowas (außer expose_php)?

      PHP ist und bleibt versklavter Handlanger seiner übergeordneten Serversoftware. Wenn etwas verborgen werden soll, dann muß in dessen Quellcode eingegriffen werden.

      expose_php in der php.ini dürfte zumindest Einfluss darauf haben, ob PHP selbst noch Ergänzungen zum Server-Header hinzufügt.

      Und in den Quellcode des Webservers einzugreifen dürfte vermutlich auch nicht nötig sein, wenn man an dessen Inhalt für diesen Header was verändern will - _konfigurieren_ lassen sollten sich gängige Webserver doch wohl auch in dieser Hinsicht.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hi,

        Ich glaube zwar nicht an "Security by Obscurity", aber es würde mich halt mal interessieren, ob diese Möglichkeit besteht...
        Bietet PHP irgendwelche Möglichkeiten zu sowas (außer expose_php)?

        PHP ist und bleibt versklavter Handlanger seiner übergeordneten Serversoftware. Wenn etwas verborgen werden soll, dann muß in dessen Quellcode eingegriffen werden.

        expose_php in der php.ini dürfte zumindest Einfluss darauf haben, ob PHP selbst noch Ergänzungen zum Server-Header hinzufügt.

        Darüber hinaus wird der Header "X-Powered-By: PHP/{VERSION}" ein- oder ausgeschaltet und einkompilierte Grafiken werden angezeigt, oder nicht.

        Und in den Quellcode des Webservers einzugreifen dürfte vermutlich auch nicht nötig sein, wenn man an dessen Inhalt für diesen Header was verändern will - _konfigurieren_ lassen sollten sich gängige Webserver doch wohl auch in dieser Hinsicht.

        Leider, leider nur eingeschränkt über ServerToken. Selbst mod_header kann diesen Header nicht abschalten. Das ist insbesondere deswegen ärgerlich, weil der Apache hervoragend mit PHP zusammenarbeitet, was sich auch als Finlter einspannen läßt, um mit Modufikationen auch andere Protokolle zu bedienen.

        Hinsichtlich dem Verbergen von Variablen hat man derzeit keine anderen Möglichkeiten, als in den Quellcode einzugreifen.

        Gruß aus Berlin!
        eddi

        --
        Wer Rechtschreibfehler findet, darf sie behalten.