Il taccuino di Armando Leotta Rotating Header Image

Soluzione antispam open per Joomla (e non solo)

Joomla è un CMS open che non ha bisogno di presentazioni. Attualmente è stata appena rilasciata la versione 1.5.20 e continua a presentare una limitazione by design: le registrazioni al portale possono essere abilitate o disabilitate, abilitate con spedizione di link di attivazione o senza necessità di conferma. Nativamente però non offre la possibilità di un controllo sulla bontà della mail specificata nel modulo di registrazione né di consentire agli amministratori di sistema di moderare le nuove iscrizioni.

Oltre ad installare suite molto avanzate come jomsocial o Community Builder, poter contare su un workflow che consentisse queste verifiche non è cosa banale.

Dopo l’ultimo attacco di spambot (si sono registrati in centinaia, hanno confermato l’iscrizione e persino pubblicato il loro messaggio di spam sul forum) ho deciso di approfondire.

Tra le estensioni di Joomla ho trovato due plugin molto interessanti: Registration Validator e JoomlaXi Registration Approval by Admin.

Registration Validator

Esiste in due versioni, la prima v1.x Non-Commercial, liberamente scaricabile dal loro sito previa registrazione gratuita.

La seconda, V2.x commerciale e scaricabile previa sottoscrizione a titolo oneroso di un loro piano di licencing. Ha alcuni accorgimenti in più: aggiornamenti garantiti, multilingua, possibilità di whitelist per username o per altri singoli campi. Interessante ma per la mia freelosophy ci vuole ben altro per convincermi a pagare qualcosa per la quale un buon 80% posso averlo utilizzando la versione free adattandomi/la un po’.

Ovviamente ho scaricato la versione 1.(3.1) rilasciata sotto licenza GPL V3.

E’ un plugin, si installa come tutte le estensioni per joomla 1.5.x e, per mia esperienza, non ha dato alcun tipo di problema.

(NOTA: scoprirò alla fine che è opportuno usare php mail function come mailer e non smtp server o sendmail.)

Le feature della versione 1.3.1 le trovate qui ma in ogni caso le riassumo brevemente.

  • MX record validation
  • blocco a livello di dominio
    • è una lista che è possibile variare dal pannello di configurazione del plugin stesso. Se voglio evitare registrazioni da parte di domini svizzeri, ad esempio, aggiungo “.ch” alla lista (importante il punto iniziale).
  • blocco a livello di username
  • blocco a livello di IP
(Sono da intendersi solamente blacklist. Per la whitelist serve la versione 2.x);

E inoltre si integra con i servizi:

che sono dei servizi costantemente aggiornati su spambot, botnet e domini usati per effettuare spam.

Adesso una parte delle mia problematiche è risolta.

Ho delle liste centralizzate costantemente aggiornate che controllo ogni volta che elaboro i dati contenuti nel modulo di registrazione: se è nelle mie blacklist (mail, user o IP) oppure viene rilevato come spammer dai servizi antispam non viene effettuata la registrazione (nulla viene scritto sul DB).

Tra le feature del plugin vi è la possibilità di monitorare tramite un file di log.

(NOTA: nel file cedit_blockdisposable.php c’è una riga da eliminare/commentare – la 97 -per evitare la scrittura di una sorta di stringa di checkpoint “Registration Validator Start” che riempirebbe il file di log).

Ma la moderazione? Io non voglio che nuovi utenti possano registrarsi e scrivere potenzialmente dei contenuti sul mio CMS senza che gli amministratori abbiano formalmente accettato la nuova iscrizione.

Ecco la soluzione, sempre open, of course:)

JoomlaXi Registration Approval by Admin

Anche in questo caso è possibile scaricare il plugin dal loro sito previa registrazione.

L’istallazione, analoga alla precedente, è banale e indolore. Un’accortezza: configurate questo plugin in modo da eseguirlo subito dopo il precedente Registration Validator: solo quando si passerà il controllo antispam questo nuovo plugin entrerà in merito all’approvazione della registrazione (basta variare l’ordine dei system plugin).

Questa soluzione non è stata sviluppata multilingua e, per mia comodità, ho modificato il codice php e ho creato il file per la lingua italiana (e corretto alcuni typos in quello inglese): il tutto è scaricabile (file di lingua en-GB.plg_xi_adminapproval.ini, it-IT.plg_xi_adminapproval.ini e php modificato xi_adminapproval.php per gestire la doppia lingua).

(Nota: i file, a cui va rimossa l’estensione “_.txt”,  vanno inseriti nell’ordine nelle seguenti directory: administrator/language/en-GB, administrator/language/it-IT e infine il php in plugins/system)

Questo plugin gestisce egregiamente il workflow e si interfaccia nativamente con svariati sistemi di registrazione (vedi sito ufficiale).

Nello scenario nativo Joomla con richiesta di attivazione nuova registrazione (nota: obbligatorio per usare questo plugin) ecco quello che avviene:

  • l’utente compila il form di registrazione
  • se le informazioni immesse superano le verifiche del primo plugin (blacklist e servizi antispam online) si avvia il processo di registrazione dell’utente:
    • si invia una mail agli amministratori (notifica del nuovo tentativo di iscrizione) e una all’utente contenente il link di attivazione;

Registrazione nuovo utente. Inizio processo

    • l’utente conferma l’iscrizione seguendo il link contenuto nella mail

    • l’utente riceve questo tipo di informazione (tramite il plugin JoomlaXi):

    • a questo punto, sempre  il plugin joomlaXi Admin Approval invia una mail agli amministratori di sistema contenente il link per l’approvazione della registrazione di quell’utente:

    • una volta approvata la nuova utenza viene generata una mail di conferma registrazione e il nuovo utente viene notificato.

Utente notificato. Processo concluso

Pertanto, fino ad una esplicita approvazione anche le utenze NON in blacklist o riconosciute come spambot (primo plugin) vengono trattenute in standby dal secondo plugin.

Ovviamente sono utilizzabili anche separatamente ma, nel mio caso, preferisco farli lavorare insieme.

Be Sociable, Share!
  • Antonio

    Ciao, perchè mi da questo errore su Registration Validator?
    Fatal error: Call to undefined function curl_init() in /home/mhd-01/www.————-.com/htdocs/plugins/system/cedit_blockdisposable.php on line 377

    Utilizzo anche Security Images e JoomlaXi Registration Approval by Admin

    • Vedo che utilizzi un host basato su windows e non ho verificato se dava problemi (ma ne dubito). Dovresti poter utilizzare curl senza problemi (accertati che sia abilitato). Nel dubbio prova a disabilitare security images e riprovare con i settaggi descritti nel post. Fammi sapere se vuoi 🙂

      • Antonio

        No è Linux!, curl non era abilitato e l’ho abilitato ma dal pannello TopHost ritorna su off appena imposto. Ho provato a disabilitare security images e anche a disinstallarlo ma l’errore è il medesimo. Utilizzo l’override del template per far funzionare security images su VirtueMart….inoltre non vorrei che c’entri qualcosa poichè questi plugin mi pare che vadano utilizzati senza CAPTCHA.

        • Ah chissà perchè ero convinto fossi sotto windows. In ogni caso, senti quelli di tophost: se curl non è disponibile quell’errore è normale:|

          • Ciao, ho dovuto prima passare a php 4, impostare curl su ON salvando e successivamente tornare a php 5. Quindi funziona anche con il CAPTCHA di cui ero dubbioso.
            Il problema più ostico l’ho riscontrato nei 3 file da inserire/sovrascrivere poichè qualcosa non quadra, seppur tradotto il tutto non ricevo la mail completa con descrizione link di attivazione lato admin ma solo questo: PLG_EMAIL_EMAIL_TO_ADMIN_FOR_APPROVAL.
            Dunque a forza di smanettare per farlo funzionare ho eliminato il file it-IT.plg_xi_adminapproval.ini, ripristinato l’originale  xi_adminapproval.php e modificato il file en-GB.plg_xi_adminapproval.ini con voci dei messaggi in italiano senza cambiare nomi delle istruzioni e del file stesso. In questo modo tutto funziona tranne il solo messaggio visualizzato sul sito a seguito dell’attivazione da parte dell’utente da mail.
            Per ovviare a questa mancanza ho modificato il file it-IT.user.php aggiungendo un informativa lato mail e sito appena l’utente si registra e quindi prima che intervenga il plugin adminaproval.
            Inoltre vorrei chiederti gentilmente, anche se non c’entra direttamente con il plugin adminaproval: in uno dei siti che ho eseguito le prove è installato VirtueMart 1.1.8 su Joomla 1.5.23 con template ja_purity e qui quando l’utente si registra appare un messaggio diverso da quello di registrazione Joomla e cioè (Info: Registrazione Completata!Il tuo account è stato creato e il link di attivazione è stato inviato all’indirizzo e-mail da te inserito. Nota che devi attivare l’account cliccando sul link di attivazione contenuto nell’e-mail prima di poter accedere.), bene non sono riuscito a trovarla nei file lingua e php di joomla compreso le cartelle di VirtueMart
            Non so se sono riuscito a spiegarmi bene.
            Grazie

          • Bene, sono contento che tu sia riuscito a risolvere (e che abbia condiviso con noi, ovviamente). Per la tua domanda, non avendo un’installazione JA_purity sotto mano provo a spiegarti come farei io. Innanzitutto metti controlla se quel template prevede anche un componente alternativo di registrazione (come CB, ad esempio) o semplicemente un modulo di login. Se riesci ad identificarlo vai a vedere nel file di lingua relativo a quella estensione. Se hai difficoltà, fai una ricerca per quella stringa (grep brutale se puoi o da un backup, localmente).

          • Ho controllato: quella stringa è quella specificata su vm. Cerca meglio da un backup ma deve essere lì

          • sotto administrator/components/com_virtuemart/languages/common/italian.php , la var è REG_COMPLETE_ACTIVATE. Fammi sapere

          • Antonio

            Ok, grazie mille! trovato e modificato,

          • Bene 😉