Als Kommentarkomponente für Joomla war JComments zumindest in der Vergangenheit äußerst beliebt und es ist noch immer häufig im Einsatz. Leider ist die Verwendung von Googles relativ sicherem ReCaptcha für diese Joomla-Erweiterung nicht vorgesehen. Stattdessen verwendet JComments KCaptcha, welches nicht mehr zeitgemäß ist und Spam Tür und Tor öffnet, also quasi wirkungslos ist. Es gibt jedoch eine Lösung für Joomla 2.5.x und 3.x, um das Google-Captcha in JComments zu integrieren.
Kommentare ohne Spam in Joomla!
Mittlerweile gibt es diverse Kommentar-Erweiterungen für Joomla, welche sich eher empfehlen, als die ehemals beliebteste Komponente JComments. Die Extension verwendet KCaptcha, welches sich sehr einfach und automatisiert überwinden lässt. So landen zwangsläufig Unmengen an verseuchten Inhalten in den Kommentaren. Leider scheint es von den russischen Entwicklern auch keinerlei Unterstützung mehr zu geben, um dem Problem Herr werden zu können.
Man kann sich also nur selbst helfen, indem man etwas am Code herumbastelt und schließlich ReCaptcha von Google integriert. Nötig ist dies eigentlich nur für Joomla 2.5.x., wofür auch folgende Vorgehensweise gilt. Für Joomla 3.x steht eine fertig modifizierte Variante von JComments sogar mit ReCaptcha 2-Integration zum Download bereit.
JComments 3.0.5.1 - ReCaptcha 2 - Download
Um ReCaptcha verwenden zu können, muss natürlich ein Google-Konto eingerichtet sein. So ist es möglich, sich einen öffentlichen und privaten Schlüssel erzeugen zu lassen, welche dann in Joomla 2.5 unter Erweiterungen -> Plugins -> Captcha - ReCaptcha eingetragen werden. Natürlich muss das Plugin auch den Status "Freigegeben" haben.
Unter Site -> Konfiguration muss außerdem für den Eintrag "Standard Captcha" die Option Captcha - ReCaptcha gewählt werden.
Es empfiehlt sich auch, unter Komponenten -> Kontakte, das Icon für die Optionen anzuklicken und dort im Tab "Formular" ebenfalls ReCaptcha zu aktivieren. Damit ist dann auch das Kontaktformular abgesichert.
Um nun ReCaptcha auch für JComments aktivieren zu können, müssen leider erst drei Dateien modifiziert werden.
Hier empfiehlt sich ein Programm wie Filezilla und eventuell Notepad ++. Beide sind kostenlos. Damit hat man also eine Software, um zu den Dateien auf dem Server navigieren und sie bearbeiten zu können.
Nun geht es nach /administrator/components/com_jcomments/
Dort ist dann die Datei admin.jcomments.php zu finden, welche nun bearbeitet wird. In der Zeile 1066 beginnt ein Array, welches folgendermaßen aussieht:
$captcha = array(); $captcha[] =
JCommentsHTML::makeOption('kcaptcha', 'KCAPTCHA');
Unterhalb dieser beiden Zeilen wird nun folgendes eingefügt und die Datei dann gespeichert und geschlossen:
$captcha[] =
JCommentsHTML::makeOption('recaptcha', 'recaptcha');
Dann geht es nach /components/com_jcomments/
Dort wird die Datei jcomments.ajax.php modifiziert. Ab Zeile 275 beginnt der Codeblock, welcher hier gleich mit den Kommentarzeichen Slash und Stern oben und unten entwertet wird.
/*
if ($acl->check('enable_captcha') == 1) {
$captchaEngine = $config->get('captcha_engine', 'kcaptcha');
if ($captchaEngine == 'kcaptcha') {
require_once( JCOMMENTS_BASE.DS.'jcomments.captcha.php' );
if (!JCommentsCaptcha::check($values['captcha_refid'])) {
self::showErrorMessage(JText::_('ERROR_CAPTCHA'), 'captcha');
JCommentsCaptcha::destroy();
$response->addScript("jcomments.clear('captcha');");
return $response;
}
} else {
$result = JCommentsEvent::trigger('onJCommentsCaptchaVerify',
array($values['captcha_refid'], &$response));
// if all plugins returns false
if (!in_array(true, $result, true)) {
self::showErrorMessage(JText::_('ERROR_CAPTCHA'));
return $response;
}
}
}
*/
So behält man den alten Code für den unwahrscheinlichen Fall, dass man ihn nochmal benötigt. Eigentlich könnte man diesen Block auch gleich löschen. Nun wird dieser gesamte Bereich ersetzt, bzw. mit folgendem Code unterhalb des Kommentarzeichens ergänzt.
if ($acl->check('enable_captcha') == 1)
{
$captchaEngine = $config->get('captcha_engine', 'kcaptcha');
if ($captchaEngine == "recaptcha")
{
$post = JRequest::get('post');
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$resp = $dispatcher->trigger('onCheckAnswer',
$post['recaptcha_response_field']);
if(!$resp[0]){
self::showErrorMessage(JText::_('ERROR_CAPTCHA'), 'captcha');
$response->addScript("Recaptcha.reload()");
return $response;
}
else
{
$response->addScript("Recaptcha.reload()");
}
}elseif ($captchaEngine == 'kcaptcha')
{
require_once( JCOMMENTS_BASE.DS.'jcomments.captcha.php' );
if (!JCommentsCaptcha::check($values['captcha_refid']))
{
self::showErrorMessage(JText::_('ERROR_CAPTCHA'), 'captcha');
JCommentsCaptcha::destroy();
$response->addScript("jcomments.clear('captcha');");
return $response;
}
} else
{
$result = JCommentsEvent::trigger('onJCommentsCaptchaVerify',
array($values['captcha_refid'], &$response));
if (!in_array(true, $result, true))
{
self::showErrorMessage(JText::_('ERROR_CAPTCHA'));
return $response;
}
}
}
Die Datei wird ebenfalls gespeichert und es geht nach /components/com_jcomments/tpl/default/
Dort findet sich die Datei tpl_form.php und ab Zeile 114 folgender und hier bereits wieder mit Kommentarzeichen versehener Codeblock:
/*
if ($this->getVar('comments-form-captcha', 0) == 1) {
$html = $this->getVar('comments-form-captcha-html');
if ($html != '') {
echo $html;
} else {
$link = JCommentsFactory::getLink('captcha');
?>
<p>
<span>
<img class="captcha" onclick="jcomments.clear('captcha');"
id="comments-form-captcha-image" src="/
<?php echo $link; ?>" width="121" height="60" alt="
<?php echo JText::_('FORM_CAPTCHA'); ?>" /><br />
<span class="captcha" onclick="jcomments.clear('captcha');">
<?php echo JText::_('FORM_CAPTCHA_REFRESH'); ?></span><br />
<input class="captcha" id="comments-form-captcha"
type="text" name="captcha_refid" value=""
size="5" tabindex="6" /><br />
</span>
</p>
<?php
}
}
*/
Dafür wird dann folgendes eingetragen:
if ($this->getVar('comments-form-captcha', 0) == 1) {
$html =
$this->getVar('comments-form-captcha-html','kcaptcha'); if ($html == 'kcaptcha') {
$link = JCommentsFactory::getLink('captcha');
?>
<p>
<span>
<img class="captcha" onclick="jcomments.clear('captcha');"
id="comments-form-captcha-image"
src="/<?php echo $link; ?>" width="121" height="60" alt="
<?php echo JText::_('FORM_CAPTCHA'); ?>" /><br />
<span class="captcha" onclick="jcomments.clear('captcha');">
<?php echo JText::_('FORM_CAPTCHA_REFRESH'); ?></span><br />
<input class="captcha" id="comments-form-captcha"
type="text" name="captcha_refid" value=""
size="5" tabindex="6" /><br />
</span>
</p>
<?php
} else {
$link = JCommentsFactory::getLink('captcha');
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$dispatcher->trigger('onInit','dynamic_recaptcha_1');
?>
<p>
<span>
<div id="dynamic_recaptcha_1"></div>
</span>
</p>
<?php
}
}
Nachdem auch diese Datei abgespeichert ist, muss jetzt nur noch im Joomla-Backend unter Komponenten -> JComments in den Einstellungen im Tab "Aufbau" ganz unten die Option "recaptcha" gewählt und gespeichert werden.
Klappt es nicht gleich, liegt es eventuell am Browser-Cache. Dieser wird gelöscht und die Spam-Probleme dürften gelöst sein. So lässt sich JComments auch weiterhin noch nutzen.
Es soll aber nicht verschwiegen werden, dass ReCaptcha von Google mittlerweile auch nicht mehr sicher ist. Man sollte auf ReCaptcha 2 setzen, welches erst ab Joomla 3.x zur Verfügung steht. Ein Upgrade auf die aktuelle Joomla-Version wäre also die beste Wahl.