Magazine Tecnologia

Proteggere invio dati con reCAPTCHA

Creato il 12 dicembre 2011 da Mareika @mareikagiacobbi

 Proteggere i nostri form per invio di email o commenti è vitale soprattuto se il signor Google ha la nostro sito nella sua SERP in una posizione rilevante, questo non tanto perchè i nostri utenti fanno spam ma per proteggerci da quello che oggi è diventato un lavoro: lo spammer.

Esiste un fantastico servizio gratuito reCAPTCHA che ci mette a disposizione un sistema di protezione per i nostri form, consiste nella visualizzazione di una Captha (dei semplici caratteri da digitare che verificano se l'utente è umano o meno).

Vediamo come configurare la nostra captcha con ruby on rails.

Prima di tutto dobbiamo creare un account su recaptcha.net e inserire il nome del nostro dominio in modo che ci venga generate una chiave pubblica e una privata usate per criptare i dati che verranno inviati a recaptcha.net.

Secondo, installiamo un plugin per integrare il servizio offerto con la nostra applicazione rails.

$ ./script/plugin install git://github.com/ambethia/recaptcha.git

Terzo, dobbiamo piazzare in un posto sicuro le chiavi pubbliche e private, io le ho inserite alla fine del file development.rb, quando spostate l'applicazione nel vostro ambiente di produzione fatte la stessa cosa in prodution.rb.

ENV['RECAPTCHA_PUBLIC_KEY'] = 'MY_PUBLIC_KEY'
ENV['RECAPTCHA_PRIVATE_KEY'] = 'MY_PRIVATE_KEY'

sostitite MY_PUBLIC_KEY e MY_PRIVATE_KEY con le chiavi fornite dal servizio.

Ora non ci resta che mostrare nella view il box reCAPTCHA. Aggiungete qualcosa di simile:

<p>
	<b>Verifico che tu sia umano</b> (campo obbligatorio)
	<%= recaptcha_tags %>
</p>

Ogni pagina con il codice sopra riportato andrà ad interrogare le reCAPTCHA API e genererà una nuova captcha

Ci resta da verificare che la captcha inserita corrisponda a quella digitata dall'utente. Nei vostri controller basterà chiamare il metodo verify_recaptcha()

def send_mail
	@address = params[:email][:address]
	@isAddress = @address.match(EmailAddress).nil?

	if(!@isAddress & [email protected]? & verify_recaptcha()) 
		Emailer.deliver_contact_email(params[:email])
	end
end

Il metodo verify_recaptcha() legge i parametri dalla richiesta POST, chiama recaptcha.net a poi ritorna true o false a secondo dei caratteri inseriti nella captcha dall'utente.

Ringrazio vivamente chi ha sviluppato il plugin, ho impiegato più tempo a scrivere il post che a installarlo e farlo funzionare :)


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :