Drupal: HTTPS Workaround für ImageCache und Advertisement

Um sensitive Daten nicht unverschlüsselt durch das Netz zu senden greift man auf Websites zur SSL-Verschlüsselung aller oder spezifischer Unterseiten. Dies macht etwa für Formulare zur Benutzer-Registrierung, zum Login oder der Angabe von Kunden-/Zahlungsdaten in Shopsystemen Sinn. Zum gezielten Umschalten bestimmter URLs auf eine abgesicherte HTTPS-Verbindung wird in Drupal das Modul Secure Pages eingesetzt.

Nun hatten wir in einer Drupal 6 Installation aber die Situation, dass auf abgesicherten Seiten die Pfade von Bildern und Promotion-Flächen vom System im HTML-Code fälschlicherweise auf eine ungesicherte HTTP-Verbindung gesetzt wurden. Das Mischen von abgesicherten und ungesicherten Ressourcen quittiert aber gerade der Internet Explorer mit einem sehr unschönen und den Benutzer nervenden Sicherheits-Hinweis. Verantwortlich war in diesem Fall die Module ImageCache und Advertisement. In der Issue Queue von ImageCache fand sich dann aber auch die Lösung.

Trägt man den folgenden Code in die settings.php der Drupal Site ein, sorgt das System auf per SSL geschützten Pfaden dafür, dass Links auf Ressourcen im HTML-Code korrekt auf HTTPS gesetzt werden:

if (!empty($_SERVER['HTTPS'])) {
 $base_url = 'https://' . $_SERVER['HTTP_HOST'];
}

Im Zusammenhang mit Views 2 (Views 3 wurd ein dem Zusammenhang nicht getestet) kann es aber auch mit diesem Workaround zu Problemen kommen. Befinden sich auf den abgesicherten Seiten View Displays mit aktiviertem HTML-Cache, kann es dazu kommen, dass hier „ungesicherter Code“ ausgegeben wird, da die Ausgabe des Views nur global einmal gecachet wird. Wird das View Display auch auf ungesicherten Seiten angezeigt und wird der Aufbau des Cache-Eintrags durch den Aufruf einer ungesicherten Seite angestoßen, wird auch nur Code mit nicht abgesicherten URLs erzeugt und im Cache abgelegt. Hier gilt es das Caching der Ausgabe des Displays ggf. zu deaktivieren.