Jak zabránit spamování registračního formuláře v Joomla!
Máte webové stránky nebo eshop v redakčním systému Joomla! a každý den Vás otravují nesmyslné registrace uživatelů, kteří evidentně nejsou lidé, ale BOTi? V tomto článku se dozvíte, jak upravit kód vašeho webu tak, aby se tyto registrace automaticky zakazovaly.
Jak BOTi vyplňují registrační formuláře v Joomla!
Joomla! sama o sobě nepoužívá ochranu pomocí CAPTCHA, ani jinou ochranu proti spamu, a tak láká BOTy, aby vás tímto způsobem obtěžovali.
Problém by sice šel vyřešit i tak, že byste si v nastavení registrace aktivovali "Povolení dokončení registrace přes email", ale tím byste zase obtěžovali normální slušné uživatele a klesala by konverze.
Jak vyřešit problém se spamováním registračního formuláře Joomla?
Řešení je poměrně jednoduché a spočívá v úpravě dvou souborů Joomla!. BOTy odhalíme tak, že do registračního formuláře přidáme pole s nějakým lákavým názvem, jako je např. web, url, email atd., u kterého máme jistotu, že jej vždy vyplní. Toto pole ale skryjeme do divu, který má nastavený atribut visibility:hidden - tak jej skryjeme před očima běžného uživatele. Bot, který prochází zdrojový kód jej ale uvidí, vyplní, a tím ho dostanete do pasti. Když totiž vyplní neviditelné pole, vyskočí mu stránka 403 s titulkem "Vyplnil jsi neviditelné pole, jsi BOT" a registrace se zruší.
Návod na úpravu zdrojového kódu webu v Joomla!
1. Najděte soubor components/com_user/views/register/tmpl/default.php.
2. Kamkoliv mezi tagy označující formulář - form (např. na řádek 80), vložte tento kód:
<div style="visibility:hidden;height:1px">
<input type="text" name="url" value="" id="url" size="40" />
</div>
Uložte změny a upraveným souborem přepište aktuální soubor default.php.
3. Jako druhý si najděte soubor components/com_user/controller.php.
4. Otevřete jej v editoru html a najděte funkci register_save().
5. Vyberte text global $mainframe; a nahraďte jej tímto kódem:
global $mainframe;
if(isset($_POST['url'])&&$_POST['url']!=''){
JError::raiseError( 403, JText::_( 'Vyplnil jsi neviditelné pole, jsi BOT' ));
return;
}
// Check for request forgeries
JRequest::checkToken() or jexit( 'Invalid Token' );
6. Opět uložte změny a upraveným souborem přepište aktuální soubor controller.php.
Děkujeme za hodnocení. Pokud se vám článek líbil, budeme rádi, když jej budete sdílet dál!