JoomlaDev.eu - Vše o vývoji CMS Joomla
Redakční systém WordPress - Nejlepší redakční systém zdarma - WordPress
Ochrana registrace uživatelů před SPAMem Joomla |
|
|
|
| Středa, 28 Říjen 2009 12:42 |
Nedávno na tomto serveru znepokojivě vzrostla registrace uživatelů s podivnými jmény, ruskými emaily apod. Tyto registrace provádí tzv. BOTi, kteří automaticky vaší stránku projedou a vyplní všechny možné formuláře. Bohužel Joomla při registraci nového uživatele nepoužívá Captchu ani jiné antispamové ochrany tohoto formuláře. Jediná možnost jak tomuto zabránit je aktivovat v globálním nastavení "Povolení dokončení registrace přes email". To jsem však nechtěl aktivovat kvůli běžným uživatelům a tak jsem přišel s vlastním osvědčeným řešením.
Řešení spočívá v tom, že do formuláře vložíme další input s nějakým, pro bota, lákavým názvem jako např. "url, website, web, name" apod. u kterého máme jistotu že ho vždy vyplní. Tento input ale skryjeme do divu, kterému nastavíme atribut visibility:hidden. Tím tento input skryjeme. Normální uživatel ho neuvidí takže ho nemůže vyplnit. Bot však prochází zdrojový kód takže ho uvidí, vyplní a tím se chytí do pasti :) Úprava zdrojových souborůNejprve si tedy upravíme šablonu formuláře. Jedná se o komponentu com_user. Najdeme si tedy soubor components/com_user/views/register/tmpl/default.php a kamkoliv do mezi tag form vepíšeme tento kód:
Jáosobně jsem ho vložil před potvrzovací tlačítko button (řádek 80)
Nyní si najdeme soubor components/com_user/controller.php otevřeme ho a najdeme si funkci register_save() a hned první dva řádky upravíme takto:
Tím zajistíme, že pokud někdo vyplní neviditelné pole, vyskočí mu stránka 403 s titulkem "Vyplnil jsi neviditelné pole, jsi BOT" tím se registrace zruší a my můžeme v klidu spát a nemusíme každý den mazat desítky fiktivních uživatelů. |