Um Header-Injection Angriffen vorzubeugen wurde in PHP Versionen 4.4.2 und 5.1.2 der Funktion zum Senden der Header überarbeitet. Seit diesen Versionen ist es nicht mehr möglich, mehrere Header gleichzeitig zu senden.
Das kann schnell zu Problemen führen - wenn z.B. Binärdaten wie Bilder über HTTP gesendet werden sollen. Sollen konkret in diesem Fall mehrere Header gleichzeitig übertragen werden, wie Dateigröße und Cache-Header, kommen auf einmal wichtige Informationen nicht mehr beim Client-Browser an. Und PHP wirft folgende Warnung:
Warning: Header may not contain more than a single header, new line detected
Als fatal hat sich das Fehlen der Dateigröße herausgestellt. Browser warten vor Beendigung des Ladevorgangs eine Weile ab, ob noch Daten vom Server an den Client gesendet werden. Erst nach diesem Delay wird das Bild angezeigt. Diese Anzeigeverzögerung ist nicht unerheblich und erweckt den Eindruck, dass der Webserver sehr langsam antwortet.
Interessanterweise kompensiert die IE 6 das Problem besser als IE 7 oder Firefox. Beim IE 7 und Firefox war der Anzeigedelay ungefähr bei 1-2 Sekunden pro Bild; das bedeutet bei einer Bildergallerie von 20 Bildern pro Seite eine Gesamtladezeit von etwa 40 Sekunden.
Vorher:
header("Content-Length: 216\\nContent-Type: image/jpeg");
Nacher:
header("Content-Length: 216");
header("Content-Type: image/jpeg");
Ähnliche Artikel:





