Implementando segurança no MVC 3 com ReCaptcha

o reCaptcha é serviço de segurança FREE disponibilizada pelo Google, por meio deste serviço o seu sistema tem como saber se quem está do outro lado é uma pessoa ou um outro computador tentando utilizar o seu sistema.

A função do reCaptcha é de, por meio de chave Privada/Pública gerar textos distorcidos, dificultando até certo ponto a leitura de palavras ou frases geradas pelo serviço do reCaptcha, com a finalidade de somente pessoas possam saber o que ali está escrito e possa reproduzir o que está escrito dentro da caixa de texto da ferramenta do reCaptcha, confirmando que de fato é uma pesoa que está do outro lado do monitor.

Para que este serviço passe a funcionar, você precisa estar de posse de uma chave privada. Para que você tome posse da chave privada, é preciso acessar o link: https://www.google.com/recaptcha e realizar um pequeno cadastro informando uma URL válida. Desta forma, será gerada uma chave privada e uma outra chave publica, com as quais você poderá programar o seu sistema.

E como eu vou implementar o componente reCaptcha dentro do meu sistema ASP.NET MVC ?

O ASP.NET MVC 3 com seus vários Helpers disponibiliza um helper que nos ajuda a fazer uso do reCaptcha de maneira bem transparente e fácil – Vou assumir que você já tenha instalado o package microsoft-web-helpers, o código abaixo mostra como podemos utilizar este helper:

@using Microsoft.Web.Helpers;

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ReCaptcha.PublicKey = "6LfG-b4SAAAAANiEOMBivTeVWvXyxfBUjVaDcSIY"
}

Primeiramente precisamos configurar nosso helper ReCaptcha com a sua chave pública gerada no momento do seu cadastro no site do ReCaptcha. Essa configuração está sendo realizada dentro do arquivo _ViewStart.cshtml, pois este arquivo é o primeiro a ser inicializado.

@{
    ViewBag.Title = "Home Page"; 
}

<h2>@ViewBag.Message</h2>  
<p>To learn more about ASP.NET MVC visit  
<a href="https://asp.net/mvc" title="ASP.NET MVC Website">https://asp.net/mvc</a>.  
</p>

<form method="post" action="/Home/ValidarRC">  
   <input type="submit" value="Submit Data" />
   @ReCaptcha.GetHtml(theme: "red")
</form>  

No código acima, você percebe que colocamos o ReCaptcha dentro de um form HTML! Porquê? Bem, precisamos realizar um métodos POST e enviar essa ação ao nosso Controller e fazemos isso utilizando o form HTML com o método POST. Além disso, precisamos informar qual é a ação do *Controller *que precisa ser chamada, no caso: ValidarRC.

Agora podemos testar nosso helper? Ainda não! Para que o helper tenha realmente uma funcionalidade na sua aplicação, você precisa fazer uma comparação do texto embaralhado + chave pública + chave privada. E como faço isso? Observe o código abaixo:

[HttpPost]
public ActionResult ValidarRC()  
{
    if (ReCaptcha.Validate(privateKey:"6LfG-b4SAAAAAKIS6hih0TbmCNo5UXR9i6bXdt0u"))
    {
        ViewBag.Message = "Código de Segurança OK !"
    }

    return RedirectToAction("Index", "Home");
}

O Código acima mostra uma Action ou seja, um método público, que está implementado dentro do HomeController. Essa action está decorada com o atributo HttpPost que informa para o Framework ASP.NET MVC que esta action só será chamada quando um método POST for executado, que é o nosso caso.

A validação que precisamos fazer: Texto Informado + Chave Pública + Chave Privada é feito neste simples método Validate, agora fazendo uso de nossa Chave Privada, que também é gerada no momento do nosso cadastro no site do ReCaptcha.

Apenas uma observação para o código acima, quanto ao uso do método RedirectToAction, pois se faz necessário porque não temos nenhuma View para a action ValidarRC.

Pronto! Agora podemos testar nosso Helper.

image

Após clicar no botão Submit Data:

image

Código Fonte

Até a próxima!

Comments