lunedì 29 dicembre 2008

Protezione anti-spam con reCaptcha

Di librerie PHP per implementare una protezione anti-spam con l'uso di codici CAPTCHA ho già avuto modo di scrivere qualche tempo fa:

PHP: Proteggere un form da spam con codice captcha

Oggi voglio spendere qualche parola su reCaptcha un servizio che permette di realizzare una protezione basata su CAPTCHA in modo più semplice rispetto a quello visto nel post appena citato.

Il principale vantaggio di reCaptcha sta nel fatto che le immagini con i codici da decifrare sono generate da un server remoto, quindi il servizio può essere usato anche quando non si hanno a disposizione librerie grafiche installate sul proprio server.

Un altro aspetto interessante è che i codici captcha non sono generati casualmente, ma sono parole provenienti da libri di cui è in corso un processo di digitalizzazione: in particolare sono usate come captcha quelle parole che gli algoritmi di riconoscimento dei caratteri non sono riusciti a interpretare correttamente.

In questo modo mentre ci proteggiamo dallo spam aiutiamo (o meglio i visitatori del nostro sito che risolvono i CAPTCHA aiutano) la digitalizzazione di libri e documenti di interesse storico. Per chi fosse interessato tutti i dettagli di come questo avvenga sono sul sito (solo in inglese).

Vediamo come integrare la protezione reCaptcha su un form di un nostro sito.

Come prima cosa creiamo un account: scelto nome utente e password ci viene chiesto su quale dominio vogliamo utilizzare il servizio. In caso si voglia usarlo su molti domini conviene selezionare l'opzione per ricevere una chiave globale.

Completata la prima fase della registrazione, ci vengono comunicate una chiave pubblica e una chiave privata. Prendiamone nota.

Scarichiamo poi il pacchetto con la libreria. L'unico file che serve trasferire sul nostro server è recaptchalib.php e va messo nella stessa cartella dello script che si occupa della visualizzazione del form e dell'elaborazione dei risultati.

A questo punto si tratta di scriver il codice PHP necessario. Invece di postare un lungo blocco di codice ho creato una pagina dimostrativa ed un pacchetto scaricabile contenente sia recaptchalib.php che lo script di esempio usato nel post citato all'inizio modificato per funzionare con reCaptcha.

Nell'esempio lo stesso script (index.php) è usato per visualizzare il form e processare i risultati. Il file è commentato per cui non mi dilungo in dettagli.

Non dimenticate di modificare index.php in modo che le variabili $publickey e $privatekey contengano le chiavi pubblica e privata assegnate al vostro account e relative al vostro dominio.

Dai commenti dovrebbe risultare chiaro come usare le funzioni della libreria recaptcha_get_html() e recaptcha_check_answer() che servono rispettivamente a generare il codice HTML per il riquadro contenente il codice CAPTCHA e il campo per la risposta e a verificare la correttezza del codice inserito dall'utente.

Lo script serve solo a dimostrare il funzionamento della libreria: alla pressione del pulsante Invia se il codice è corretto vengono stampati a video i valori dei campi, altrimenti viene visualizzato un messaggio di errore.

Tutto qui. Quindi per l'uso su un sito reale dovrà ovviamente essere adattato alle vostre esigenze.

martedì 23 dicembre 2008

QContacts 1.0.5

Versione pre-natalizia del componente QContacts. Principalmente sono stati corretti alcuni bug e non ci sono grandi novità.

È ora possibile inserire la categoria del contatto e l'ID di Skype e Yahoo Messenger anche come colonne di una lista contatti e non solo nella pagina che mostra il singolo contatto.

Le liste contatti si possono ordinare in base a qualsiasi colonna mentre in precedenza si potevano ordinare solo in base a Nome e Ruolo del contatto. Per fare questo si deve impostare a il parametro ordinabile nei parametri del menu Aspetto Categoria Contatto.

Mi è stato fatto notare nel forum che era scomodo che quando si seleziona una colonna per ordinare la lista in base a quel campo, venisse allo stesso tempo invertita la direzione dell'ordinamento. Così funzionano le liste standard di Joomla, basta fare una prova su una lista articoli di una categoria. Comunque ho modificato questa parte e adesso si sceglie il campo di ordinamento con un click sull'intestazione della relativa colonna, mentre con un click sull'icona si passa da ordinamento ascendente a discendente e viceversa.

Vedere il log modifiche per ulteriori dettagli e la pagina di download per scaricare il componente, la stessa pagina contiene le istruzioni per l'aggiornamento.

Futuri sviluppi

Mi viene chiesto frequentemente di dare la possibilità di impostare una pagina dove reindirizzare l'utente una volta inviato il form. La soluzione di ricaricare la pagina del form con un messaggio di conferma mi sembra abbastanza frequente e a mio parere non così orrenda però vedrò di implementare questa funzione nella prossima versione. Credo che il vero problema sia che molti non vedono il messaggio di conferma per la ragione spiegata in questa faq.

Altre funzioni richieste spesso sono la possibilità di includere una Google Map sulla pagina del contatto e la visualizzazione dell'elenco dei contatti in un formato diverso da quello di una tabella, più "tipo blog". Anche queste richieste penso potranno essere soddisfatte dalla prossima versione.

Chi avesse altri suggerimenti può postarli come commento, ma anche nel forum.

Si avvicina la fine del supporto per Joomla 1.0

Un post di Steve Burge sul "Community Blog" del sito ufficiale di Joomla elenca tre date che porteranno alla fine del supporto per Joomla 1.0

  • 31 marzo 2009: estensioni compatibili solo con Joomla 1.0 non saranno più accettate nella directory ufficiale delle estensioni (JED)
  • 30 giugno 2009: le estensioni compatibili solo con Joomla 1.0 presenti nella directory saranno rimosse.
  • 22 luglio 2009: fine del ciclo di vita di Joomla 1.0

La terza data era stata già annunciata in precedenza, la novità riguarda quindi solo le disposizioni sulla directory delle estensioni.

Forse soluzioni meno drastiche della totale eliminazione dalla directory sarebbero state preferibili: ad esempio lasciare comunque un'opzione per includere nella ricerca le estensioni solo per Joomla 1.0.

Va anche detto che se un componente modulo o plugin non è ancora compatibile con la versione 1.5 e non lo sarà entro i prossimi sei mesi, si tratta di un prodotto probabilmente già abbandonato dallo sviluppatore e quindi avrebbe comunque poco senso continuare a presentarlo alla comunità degli utenti.

Quindi chi ha siti fatti con Joomla 1.0, a parte attaccarsi al tram, cosa fa?

1) Se li tiene così come sono. L'unico vero rischio di questa scelta è dato dalla scoperta di una grave vulnerabilità dopo il 22 luglio 2009. Senza più supporto ufficiale bisognerebbe sperare nel rilascio di una patch da parte della comunità, il che immagino potrebbe anche non essere tanto improbabile visto che qualcuno in giro che si ricorda come è fatto Joomla 1.0 ci sarà anche tra sei mesi.

Se si sceglie questa strada, oltre ovviamente ad avere un backup aggiornato, è bene fin da subito scaricare l'ultima versione dei pacchetti di tutte le estensioni che si usano sul sito nel caso si avesse bisogno in futuro di fare una reinstallazione.

2) Tenta il processo di migrazione. Io sinceramente non ho mai provato e non sono la persona adatta a cui chiedere delucidazioni. Da quello che si legge in giro la cosa è fattibile per i siti basati principalmente su contenuti standard (sezioni, categorie, articoli gestiti nativamente da Joomla), mentre appare più complicata per i siti con molti contenuti gestiti da estensioni di terze parti, riguardo ai quali bisognerà accertarsi se gli sviluppatori hanno messo a disposizione script di migrazione dei dati tra le versioni per Joomla 1.0 e Joomla 1.5 delle loro estensioni.

Considerazione finale. Visto che team di sviluppo di altri cms, per esempio Drupal per non fare nomi, sono in grado di supportare due versioni stabili del prodotto contemporaneamente, si poteva forse fare lo stesso: aspettare il rilascio di Joomla 1.6 stabile, che dubito avverrà prima di luglio prossimo, e solo a partire da quel momento mantenere Joomla 1.5 e 1.6 e "seppellire" Joomla 1.0.

Vabbè non facciamo polemiche che è troppo facile quando sono altri a spendere il tempo e a scrivere il codice necessario a far funzionare le cose, comunque credo che questa sarebbe stata una soluzione gradita a molti utenti.

venerdì 19 dicembre 2008

Guida Remository

Segnalo un articolo che ho scritto per HTML.it su come gestire un'area di download e upload di file sul proprio sito utilizzando il componente Remository. L'articolo tratta di tutte le funzioni del componente tranne quelle di utilizzo del tutto immediato ed intuitivo.

Remository è un buon componente open source, forse meno conosciuto di altri della sua categoria, come ad esempio Docman, rispetto al quale presenta però il vantaggio di poter funzionare in Joomla 1.5 senza legacy mode.

Qualche aspetto come ad esempio la gestione delle categorie potrebbe essere migliorato, ed è possibile che lo sia nelle prossime versioni visto che lo sviluppo del prodotto è abbastanza costante.

Spero che l'articolo sia utile, ecco il link: Gestire un'area download in Joomla