Die Option (egal wo eingestellt), zählt für alle, die auf diese php.ini zugreifen. Wenn das also 5 Hosts sind, die alle das gleiche PHP mit der gleichen .ini nutzen, dann zählt es auch für die 5. Wenn Du die Möglichkeit hast, einzelne .ini pro vhost zu haben, dann ist es auch nur einzeln.
Was passieren kann: Eigentlich so gut wie alles, wenn die Scripte unsicher sind oder der Server kompromittiert wird. Wie oben schon mal kurz geschrieben kannst Du ja per file_get_contents() Inhalte aus einer anderen Datei einlesen und weiterverarbeiten. Wenn nun allow_url_fopen aus ist, dann funktionieren da nur lokale Dateipfade. Ist allow_url_fopen aber an, dann funktionieren da auch externe Pfade, URLs eben. Oder eben auch bei fopen und einige andere Funktionen, die intern Dateisystemoperationen durchführen können.
Wenn Du so was also nutzt und eventuell ungeprüfte Usereingaben verarbeitest, dann kann der unter Umständen eben jede x-beliebige URL aufrufen und Dein Server verarbeitet die Daten dann.
Hauptproblem war früher da vor allem, dass das auch für include() und require() funktionierte. Man konnte also direkt externen PHP-Code einschleusen (wenn das Script fehlerhaft ist)! Dem ist nun aber nicht mehr so. Wird allow_url_fopen aktiviert, dann ist allow_url_include noch immer aus - das muss man nun extra aktivieren.
Auch schön hier nachzulesen:
*** Link veraltet ***
Im Grund bietet das allow_url_fopen also nur einen vorgetäuschten Schutz. Es kann zum einen nicht alle "Angriffe" unterbinden, erschwert aber gleichzeitig die Nutzung des eigenen Systems, wenn man auf externe Daten zugreifen muss. Es ist und bleibt eben eine Sache vom Scriptentwickler, die Scripte sicher zu machen und vom Hoster, den Server sicher zu halten. Aber eben nicht von PHP. Genau aus dem Grund ist die Option bei PHP auch per default aktiviert.
Das steht z.B. auf einer Webseite:
Zitat
Setzen Sie diesen Wert nur auf on, wenn Sie diese Funktionalität unbedingt benötigen. Denn schon ein include($_GET["filename"]) stellt ein erstklassiges Sicherheitsrisiko dar. Hier sind allerdings auch die PHP-Programmierer gefragt. Denn solche Konstruktionen sind leichtsinnig.
*** Link veraltet ***
Das zählt aber eben nicht für PHP 5.2.x, denn da ist der Include() von http nicht möglich. Und grundsätzlich, da es damals ja funktionierte. Ein Programmierer, der so etwas macht, der sollte ganz schnell seinen Beruf wechseln. Es ist schließlich nicht die Aufgabe einer Scriptsprache, die Dummheit eines Programmierers zu beseitigen.
Ansonsten sah man das ja durchaus öfter. Das waren dann so Seiten, wo in der URL ein ?modul=blablub.php stand. Da könnte man dann natürlich jede andere URL eintragen und das eigene Script würde das ausführen. Aber eben auch nur, wenn das Script nicht prüft.
So, soviel dazu. Aber Alex muss ich soweit recht geben, dass cURL besser ist. Zum einen unterliegt es nicht den Speicher- und Laufzeitbeschänkungen von PHP, zum anderen kann es simultan nebenbei laufen. Aber gerade für sowas wie getimagesize() ist es ungeeignet. Um das zu lösen müsste man also mit cURL erst mal das ganze File laden um dann lokal getimagesize() zu verwenden.