spezielle allow_url_fopen Installation
spezielle allow_url_fopen Installation
am 26.11.2006 12:11:05 von Ulf Kadner
Moin!
Ich hab hier nen Kundenssystem das ich so einrichten soll, das die
PHP-Konfigurationsdirektive allow_url_fopen nur mit fopen aktiviert sein
soll. Für file, file_put_contents und file_get_contents sollen keine
URLs erlaubt sein.
Bevor jetzt jemand auf die Frage nach dem Sinn dahinter kommt.
Es handelt sich um ein System (Yokotuma-OS = CNC Betriebssystem) das
native PHP nutzt. (Wird dort nicht als PHP selbst genutzt sondern
händich in eine Art Sandboxsystem einkompiliert und ist dann sozusagen
bestandteil des OS) Alles in allem sehr kompliziert.
Jetzt hab ich mitlerweile PHP so umgebaut das der OS-Eigene Kompiler
dieses korrekt kompiliert.
Per default bietet PHP ja nicht diese Möglichkeit. Hat da schon mal
jemand am Source rumgefriemelt und gefunden wo man dazu ansetzen könnte?
Oder gibts da bereits was existierendes? Dieses "Hard PHP" oder wies
gleich hieß kann derartiges ja auch nicht. :-(
Ideen?
MfG, Ulf
Re: spezielle allow_url_fopen Installation
am 26.11.2006 12:20:23 von Ulf Kadner
Ulf Kadner schrieb:
> Bevor jetzt jemand auf die Frage nach dem Sinn dahinter kommt.
> Es handelt sich um ein System (Yokotuma-OS = CNC Betriebssystem) das
> native PHP nutzt. (Wird dort nicht als PHP selbst genutzt sondern
> händich in eine Art Sandboxsystem einkompiliert und ist dann sozusagen
> bestandteil des OS) Alles in allem sehr kompliziert.
Ich vergaß. Ich kann nur PHP dort nutzen weil das OS bereits PHP kennt.
Wenn ich z.B. file() mit URL aufrufe ists kein Problem das erst mal an
PHP weiter zu geben, aber das OS merkt sich die aufgerufene
Funktion/Methode und entscheide danach, ob es einen URL-Request in
diesem zusammenhang erlaubt. Dieses Verhalten ist im OS definiert und
kann (leider) auch nicht geändert werden. Wär wohl auch wenig Sinnvoll
so tiefgehende Veränderungen an etwas vorzunehmen, was mehr kostet als
nen Einfaumilienhaus. :~*
MfG, Ulf
Re: spezielle allow_url_fopen Installation
am 27.11.2006 10:49:07 von thorny
Ulf Kadner schrieb:
> Ich hab hier nen Kundenssystem das ich so einrichten soll, das die
> PHP-Konfigurationsdirektive allow_url_fopen nur mit fopen aktiviert sein
> soll. Für file, file_put_contents und file_get_contents sollen keine
> URLs erlaubt sein.
>
> Bevor jetzt jemand auf die Frage nach dem Sinn dahinter kommt.
> Es handelt sich um ein System (Yokotuma-OS = CNC Betriebssystem) das
> native PHP nutzt. (Wird dort nicht als PHP selbst genutzt sondern
> händich in eine Art Sandboxsystem einkompiliert und ist dann sozusagen
> bestandteil des OS) Alles in allem sehr kompliziert.
>
> Jetzt hab ich mitlerweile PHP so umgebaut das der OS-Eigene Kompiler
> dieses korrekt kompiliert.
>
> Per default bietet PHP ja nicht diese Möglichkeit. Hat da schon mal
> jemand am Source rumgefriemelt und gefunden wo man dazu ansetzen könnte?
Nachdem ich gerade ein Weilchen im PHP-Source "gesurft" bin, würde ich
behaupten, dass sich das nicht so einfach umsetzen lassen würde.
Was vielleicht sinnvoll sein könnte, wäre eine Entfernung der
Sicherheitsabfrage auf URLs bei file_put_contents und file_get_contents.
Was das für Nebenwirkungen hat, weiß ich allerdings nichts.
Definiert sind die Funktionen file_* in "ext/standard/file.c".
Mehr habe ich auf die schnelle aus diesem mistigen Code nicht
rausbekommen. Hoffe es hilft ein wenig.
Gruß,
Torsten
Re: spezielle allow_url_fopen Installation
am 27.11.2006 14:31:41 von Ulf Kadner
Torsten Zuehlsdorff schrieb:
> Nachdem ich gerade ein Weilchen im PHP-Source "gesurft" bin, würde ich
> behaupten, dass sich das nicht so einfach umsetzen lassen würde.
> Was vielleicht sinnvoll sein könnte, wäre eine Entfernung der
> Sicherheitsabfrage auf URLs bei file_put_contents und file_get_contents.
> Was das für Nebenwirkungen hat, weiß ich allerdings nichts.
Hallo Thorsten!
^ ;-)
Erst mal Danke das Du Dir Zeit genommen hast. Da die Nebenwirkungen auf
keinen Beipackzettel stehen und mein Arzt/Apotheker mich da doof
anschauen würde muss ich wohl selbst ins kühle Nass springen und testen.
Ich habe jetz mal auf ner alten Kiste bei mir ein Unix installiert und
werd mal sehen was da im Endeffekt passiert. Ist zwar nicht das selbe
wie das OS auf dems eingesetzt wird, aber der Support hat mir nen
Emulator geschickt der die wichtigsten Dinge beharrscht. Der Anhaltpunkt
ist schon garnicht mal so schlecht und bringt mich der Problemlösung
offensichtlich nen Stück näher. Momentan passieren aber noch
unvorhergesehene Dinge (100% Systemlast für ca. 5sec wenn eine dieser
funktionen aufgerufen wird)
Da muss ich erst noch mal mit den Japanern (Hersteller des OS) wegen
Ihren Debugger telefonieren. Die Dokumentation ist in Japanisch. :-(
Wenns zu aufwendig wird kann ich immernoch die Funktionen so umbauen das
bei Aufruf mit URL diese einfach mißachtet wird und FALSE zurueck gibt.
Evtl auch ne Exception.
> Definiert sind die Funktionen file_* in "ext/standard/file.c".
Wenn ichs irgendwie hinbekomme und jemand interesse hat kann ich die
Änderungen im Source auch gern veröffentlichen.
> Mehr habe ich auf die schnelle aus diesem mistigen Code nicht
> rausbekommen. Hoffe es hilft ein wenig.
Sehr! Danke
Ich tu mich auch schwer in dem Code! Sehr unübersichlich.
MfG, Ulf
Re: spezielle allow_url_fopen Installation
am 27.11.2006 14:59:10 von thorny
Ulf Kadner schrieb:
> Hallo Thorsten!
> ^ ;-)
Ich vermute mal, dass so auch die 'h's in die Rechnungen kommen, die man
mir so schickt :P
> Wenns zu aufwendig wird kann ich immernoch die Funktionen so umbauen das
> bei Aufruf mit URL diese einfach mißachtet wird und FALSE zurueck gibt.
> Evtl auch ne Exception.
Nachdem ich mir noch mal die "http_fopen_wrapper.c" angeschaut habe,
folgender Vorschlag:
Mache es genau wie in "php_stream_url_wrap_http_ex" und überprüfe in den
file_* Funktionen stringbasiert, ob ein "http" bzw. "https" vorkommt.
Falls dem so ist: False oder Exception.
Das sollte den Aufwand auf wenige vertretbare Zeilen minimieren und
denoch in diesem speziellen Fall funktionieren.
>> Definiert sind die Funktionen file_* in "ext/standard/file.c".
>
> Wenn ichs irgendwie hinbekomme und jemand interesse hat kann ich die
> Änderungen im Source auch gern veröffentlichen.
Immer her damit. :)
>> Mehr habe ich auf die schnelle aus diesem mistigen Code nicht
>> rausbekommen. Hoffe es hilft ein wenig.
>
> Sehr! Danke
> Ich tu mich auch schwer in dem Code! Sehr unübersichlich.
Ich weiß nicht, ob dieser Code noch unter "generiert" fällt, wie es bei
weiten Teilen sein soll. Aber leider kenne ich kaum besseren C-Code.
Gruß,
Torsten
Re: spezielle allow_url_fopen Installation
am 27.11.2006 15:06:07 von thorny
Torsten Zuehlsdorff schrieb:
>>Wenns zu aufwendig wird kann ich immernoch die Funktionen so umbauen das
>>bei Aufruf mit URL diese einfach mißachtet wird und FALSE zurueck gibt.
>>Evtl auch ne Exception.
>
> Nachdem ich mir noch mal die "http_fopen_wrapper.c" angeschaut habe,
> folgender Vorschlag:
> Mache es genau wie in "php_stream_url_wrap_http_ex" und überprüfe in den
> file_* Funktionen stringbasiert, ob ein "http" bzw. "https" vorkommt.
> Falls dem so ist: False oder Exception.
> Das sollte den Aufwand auf wenige vertretbare Zeilen minimieren und
> denoch in diesem speziellen Fall funktionieren.
Was allerdings besser wäre, als mein Vorschlag: Eine Whitelist. Eine
überprüfung auf "file://", "../", "/" und "buchstabe:\" sollte
umfangreich genug sein. Hoffentlich. Das weißt du am besten ;)
Gruß,
Torsten