reCAPTCHA

29.06.2018 von robert@riwa4.de
/blog/artikel/recaptcha

reCAPTCHA Dokumentation

Para evitar que robôs trolling façam entradas em uma página da web, os chamados captchas existem há muito tempo para distinguir robôs de humanos. Para fazer isso, geralmente é necessário reconhecer letras ou números em um campo de texto - para o usuário isso é mais do que irritante. 

reCAPTCHAs A ideia era usar o tempo e a energia que os usuários gastam nisso para coisas significativas. Enquanto isso, a empresa foi assumida pelo Google e o foco mudou um pouco: é amplamente reconhecido automaticamente se uma pessoa está realmente clicando na página da web ou não, e apenas em casos excepcionais as tarefas precisam ser resolvidas ao digitar, como reconhecer sinais de trânsito. Eu já tentei a instalação do serviço uma vez.

Deutsch English Français Espagnol

O documentário é um pouco escasso, mas basicamente é simples. Eu inicialmente construí isso em uma página de teste interna e, assim que precisar, posso facilmente habilitá-lo. Para ajudar, há também um pacote NuGET pronto para ASP.NET Core que você pode usar. Na verdade trivial, mas ainda útil para ver como é feito:

A configuração é feita em uma seção separada, para que você não precise inserir a sitekey manualmente em todos os lugares. Para que as opções estejam disponíveis em uma página do Razor, você pode chamar a configuração em Inicialização:

services.Configure<RecaptchaSettings>(Configuration.GetSection("RecaptchaSettings"));
services.AddTransient<IRecaptchaService, RecaptchaService>();

E na página:

@inject IOptions<RecaptchaSettings> RecaptchaSettings

Então você pode inserir o captcha assim:

<div class="g-recaptcha" data-sitekey="@RecaptchaSettings.Value.SiteKey"></div>

Em seguida, você pode simplesmente usar @RecaptchaSettings.Value.SiteKey para fazer referência à sitekey. E na página Razor, você pode usar a injeção de dependência para obter a interface IRecaptchaService, que fornece a função Validar. Estes são chamados para validar a chamada.

Ficará assim:

        public async Task<IActionResult> OnPostAsync()
{
bool captchaValid = await _recaptcha.Validate(Request);
if (!captchaValid)
{
ModelState.AddModelError("reCaptcha", "Bitte das reCaptcha bestätigen.");
}
if (ModelState.IsValid)
{
return Page();
}
else
{
ViewData["Message"] = "Schiefgegangen";
return Page();
}
}