Alexander (HH): PHP copy von URL

Beitrag lesen

Moin Moin!

ich hatte auf meinem alten Webspace für meine Community eine Funktion aktiv, mit der sie ihre Avatar-Grafik von einer entfernten URL kopieren konnte. Dazu nutze ich die PHP Funktion copy() um auf die URL zuzugreifen. Nach dem Umzug zu einem anderen Hoster funktioniert das nicht mehr. Die Anfrage beim Support sagte, copy und fopen seien aus Sicherheitsgründen abgeschaltet. Ich solle meine User auffordern, die Grafiken auf ihrem PC zu speichern und dann per Form Upload zu übertragen oder mir eine sicherere Methode ausdenken.

Richtig.

Nun frage ich mich, was daran sicherer sein sollte.

PHP ist so eingestellt, nicht versehentlich Code aus bösen Quellen nachladen kann. Irgendwann in gruseliger Vorzeit hielt es jemand wohl für eine gute Idee, die viele File-I/O-Routinen so aufzubohren, dass sie auch URLs statt lokaler Dateinamen verdauen konnten. PHP-Code, der annimmt, diese Funktionen könnten nur lokale Dateinamen öffnen, und der deswegen Daten vom Benutzer mehr oder weniger direkt als Dateinamen benutzt, ist dadurch oft angreifbar, wenn der Benutzer es schafft, den Funktionen eine URL unterzuschieben. Damit kann der Benutzer unter Deinem Account im Worst Case beliebigen PHP-Code ausführen -- z.B. Deine Datenbank und alle Dateien in Deinem Webspace absammeln, Malware-Schleudern installieren, illegales Zeug bei Dir hosten, usw.

Gibt es überhaupt eine andere Möglichkeit, Dateien von einer URL direkt zu übertragen?

Natürlich. Öffne einen Socket und sprich HTTP. Oder noch einfacher: Verlinke auf die Grafik, statt sie selbst zu hosten.

Bin schon fast geneigt den Anbieter zu wechseln.

Das kannst Du natürlich versuchen. Ich halte das Abschalten dieser Sicherheitslücke in PHP für ein Zeichen für einen guten Hoster.

Oder ist das eher die Regel, dass solche Funktionen deaktiviert sind?

Es sollte die Regel sein, weil diese Funktionen extrem unsicher sind.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".