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! 👋
Leia também
API Mágica: notificações Web Push no navegador com PHP
Web Push com a API Mágica em PHP puro: o navegador se inscreve, o seu site envia a notificação e a API conta o clique. Sem Composer e sem biblioteca.
IndexNow: avisando o Bing e o Yandex mais rápido
Como criar a chave do IndexNow e avisar Bing e Yandex das suas páginas novas com Node.js e PHP: as requisições, os erros reais e as armadilhas.
llms.txt: por que importa e como gerar em PHP
Por que o llms.txt importa para quem quer ser citado pela IA, e como gerar o seu em PHP puro lendo o sitemap.xml que voce ja tem.