Pular para o conteúdo
PHP

PHP — Alternativa para o Recaptcha

Capa do artigo: PHP — Alternativa para o Recaptcha

Olá Gente!


O Recaptcha já foi muito bom, mas cada vez mais ele se torna mais caro para uso de empresas.

Porem, temos um substituto a altura, o “Turnstile” da CloudFlare.


1. Criando Cadastro na Turnstile


Acesse o Painel da CloudFlare, clique em “Turnstile” e em seguida em “Adicionar Site”:


Preencha os campos conforme a indicação abaixo:

- Nome do Site: Um nome para identificar o código da Turnstile
- Domínio: Os domínios onde o Turnstile será utilizado
- Modo de widget: Mantenha a opção “Gerenciado” selecionada
- Gostaria de optar pela pré-liberação deste site: Mantenha a opção “Não” selecionada


A janela deve ficar similar a janela abaixo:


Em seguida, clique em “Criar”:


Serão exibidas as chaves de configuração (“Chave do site” e “Chave secreta”), copie estes dados:


2. Configurado no Site


Em seu formulário, insira a Tag abaixo substituindo a variável “data-sitekey” pela “Chave do site” que copiamos ao Criar a Tag:

<div class=”cf-turnstile” data-sitekey=”0x4AAAAAAAQ3MHs_6NTMebTS” data-theme=”light”></div>


Insira o Carregamento do Arquivo Js:

<script src=”https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>


Será exibido o desafio no site:


Observe que a Turnstile cria um campo oculto “cf-turnstile-response” que será utilizado para validar o Captcha.


Segue exemplo:

<form action="Teste_Turnstile.php?Acao=Executar" method="POST">
    
    <div class="cf-turnstile" data-sitekey="0x4AAAAAAAQ3MHs_6NTMebTS" data-theme="light"></div>

    <br>
    <br>

    <button type="submit" value="Submit">Testar</button>

</form>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>


3. Validando o Captcha


Após o Formulário ser enviado, iremos pegar a resposta do captcha na variável “cf-turnstile-response”.


Agora iremos enviar um POST para:

https://challenges.cloudflare.com/turnstile/v0/siteverify


Neste Post, iremos enviar os campos abaixo:

- secret: Aqui preencha a “Chave secreta” que copiamos do painel da CloudFlare
- response: Preencha o valor recebido na variavel “cf-turnstile-response”


Segue exemplo do Post:


A resposta deste Post, será um Json onde temos o campo “success” indicando que a requisição é válida ou não:


Segue exemplo verificando via Curl:

<?
$curl 		= curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL 				=> "https://challenges.cloudflare.com/turnstile/v0/siteverify",
CURLOPT_RETURNTRANSFER 		=> true,
CURLOPT_MAXREDIRS 			=> 10,
CURLOPT_TIMEOUT 			=> 30,
CURLOPT_SSL_VERIFYHOST 		=> false,
CURLOPT_SSL_VERIFYPEER 		=> false,
CURLOPT_CUSTOMREQUEST		=> "POST",
CURLOPT_POSTFIELDS 			=> http_build_query(array("secret" => "0x4AAAAAAAQ3MHhIkbtKPApWXCfDtDLmI6c", "response" => $_REQUEST["cf-turnstile-response"])),
));

$response 	= curl_exec($curl);
$response2  = json_decode($response, true);

curl_close($curl);

if( $response2["success"] == false )
{

    echo "Requisição Inválida";

}else{

    echo "Requisição Válida";

}


Por hoje é isto, queridos desenvolvedores! 👩‍💼
Até logo! 👋

PHP

Leia também