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ů. |
Pokud to nevite, zkuste kod style="visibility:hidden;height:1px;" proste smazat a mate to stejne.
Pokud chcete otestovat jesltli vas kod funguje.
Zakomentujte tuto cast:
style="visibility:hidden;height:1px"
Pote se Vam v registraci objevi nove pole. Pokud toto pole pri registraci vyplnite, mela by vyskocit chybova hlaska a novy uzivatel by se nemel ulozit.
nybrz takto:
http://www.tvorba-webu.cz/xhtml/komentare.php
//style="visibility:hidden;height:1px"
žádné nové pole pro "nachytání" robota při registraci se mi neobjevilo,..?
spravne je tedy podminka
Dobrý den, provedla jsem dle návodu úpravy, ale když natáhnu prezentační stránku a zkusím zavolat registraci,tak mi to píše tuto chybu,..? Čili se nedostanu ani k vyplnění registračního formuláře abych to mohla vyzkoušet. Díky za pomoc
Misto & amp;& amp; je nutne zapsat &&, bohuzel nevim proc ale nejde mi to zapsat pres geshibot :)
Tento kod chrani pouze pred nezadouci registraci, neresi zasilani nevyzadane posty.
Pokud chcete otestovat jesltli vas kod funguje.
Zakomentujte tuto cast:
Pote se Vam v registraci objevi nove pole. Pokud toto pole pri registraci vyplnite, mela by vyskocit chybova hlaska a novy uzivatel by se nemel ulozit. Pokud se ulozi zrejme mate chybu v kodu
dneska jsem to dal na dva weby, protože v poslední době mi spam nabíral na počtu. Ale bohužel nefunguje, spam chodí dál.
Nevíte co s tím?
Díky
function register_save()
{
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' );
atd.atd.
V kódu je (amp amp), předpokládám, že tam má být jen 2x anglické a. Jinak to hází chybu. Asi se to tam dostalo při převodu entit.