Vom: 04.05.2012

Google Recaptcha, Zend Forms, SSL und der Internet Explorer

In Pimcore lassen sich mit dem Form Builder Plugin relativ leicht Formulare erzeugen und mit Captchas ausstatten. Unter den Auswahlmöglichkeiten der verfügbaren Captchas steht auch das Google Recaptcha auf der Liste. Sobald man das Formular SSL gesichert überträgt bekommt man mit dem Internet Explorer ein Problem: je nach Sicherheitseinstellungen lässt der IE das Nachladen von ungesichertem Content nur mit Nachfrage zu - gegebenenfalls bekommt der User das Captcha also nicht einmal zu Gesicht und kann das Formular nicht korrekt ausfüllen. Der IE7 meldet beispielsweise "Diese Seite enthält sowohl sichere als auch nicht sichere Objekte", der IE9 zeigt die Fehlermeldung "Nur sicherer Inhalt wird angezeigt"; auf der Debug-Konsole ist zu lesen "SEC7111: HTTPS-Sicherheit beeinträchtigt durch http://www.google.com/recaptcha". Zu lösen ist das Problem offensichtlich dadurch, dass der Recaptcha ebenfalls über SSL geladen werden muss. Dies geschieht durch Setzen eines Parameters im Zend_Service_ReCaptcha Objekt des Formelements: $service->setParam("ssl", true). Will man dies allgemeingültig lösen, sollte HTTPS nur dann aktiviert werden, wenn die aufgerufene Seite ebenfalls mit HTTPS übertragen wurde. Diese Information erfährt man durch Aufruf der getScheme Methode des Request-Objekts, das der Controller bereithält: $scheme = $this->getRequest()->getScheme();. Gesamt lässt sich das mit wenigen Zeilen lösen:

$formbuilder = new Formbuilder_Frontend();
$form = $formbuilder->getForm("ein_beispiel");
$captcha = $form->getElement("captcha");
$captcha->getCaptcha()->getService()->setParam("ssl", $this->getRequest()->getScheme() == "https");