--- title: Primeiros passos --- # Primeiros passos Este guia ajuda você a integrar o CAPTCHA da CaptchaLa em 5 minutos. ::: tip Veja funcionar em 30 segundos [demo-v1.captcha.la](https://demo-v1.captcha.la) — HTML + PHP puro, licença MIT, com view-source em todas as páginas. - [popup.html](https://demo-v1.captcha.la/popup.html) — modo popup - [float.html](https://demo-v1.captcha.la/float.html) — widget flutuante - [bind.html](https://demo-v1.captcha.la/bind.html) — vinculado a botão - [inline.html](https://demo-v1.captcha.la/inline.html) — incorporado inline - [server-token.html](https://demo-v1.captcha.la/server-token.html) — token emitido pelo servidor (anti-replay) ::: ## 1. Criar conta Crie uma conta gratuita no painel [Cadastre-se agora →](https://dash.captcha.la/register) ## 2. Criar aplicação Crie uma aplicação no painel para obter sua App Key ## 3. Instalar o SDK Escolha o método de instalação que preferir ```html ``` ```bash # or via npm npm install captchala ``` ## 4. Inicializar o CAPTCHA Inicialize o componente de CAPTCHA na sua página ```html ``` ## 5. Validação no servidor Valide o token no seu servidor ```bash POST https://apiv1.captcha.la/v1/validate X-App-Key: YOUR_APP_KEY X-App-Secret: YOUR_APP_SECRET Content-Type: application/json { "pass_token": "" } ``` ```json { "code": 0, "data": { "valid": true, "action": "login", "challenge_id": "ch_xxx", "uid": null, "risk_score": 12 } } ``` ::: warning Sempre verifique `data.valid === true` **e** que `data.action` coincide com o cenário esperado. Os pass tokens são de uso único; o mesmo `pt_xxx` não pode ser validado duas vezes. ::: ## Modo Token emitido pelo servidor (recomendado para produção) {#server-token} Para ações sensíveis (login, cadastro, pagamento) recomendamos o fluxo de Token emitido pelo servidor: seu backend solicita primeiro um server_token de curta duração, que o navegador então usa para inicializar o CAPTCHA. Isso impede abusos caso a app_key vaze. ### Quando usar - Recomendado: cadastro, login, redefinição de senha, pagamento, resgate de pontos e qualquer endpoint que um atacante consiga automatizar. - Opcional: formulários públicos casuais, caixas de pesquisa e interações de baixo valor em que a conveniência pesa mais. ### 1. O backend emite o server_token Chame /v1/server/challenge/issue a partir do seu próprio servidor, usando os headers X-App-Key e X-App-Secret. Nunca exponha esses headers ao navegador. ```bash # Server-side only — never call this from a browser curl -X POST https://apiv1.captcha.la/v1/server/challenge/issue \ -H "X-App-Key: YOUR_APP_KEY" \ -H "X-App-Secret: YOUR_APP_SECRET" \ -d "action=login&ttl=300&max_uses=1&bind_ip=1.2.3.4" # → { "code": 0, "data": { "server_token": "sct_...", "expires_in": 300 } } ``` ### 2. O frontend renderiza a CaptchaLa com o server_token Passe o token para o seu componente CaptchaLa. O SDK o encaminha à inicialização do desafio. ```js // Browser fetches the token from YOUR backend, not from CaptchaLa directly const { serverToken } = await fetch('/api/captcha/issue').then(r => r.json()); Captchala.init({ appKey: 'YOUR_APP_KEY', serverToken, // single-use, short-lived product: 'popup', action: 'login', }) .appendTo('#captcha-container') .onSuccess(res => submitForm(res.token)); ``` ### Notas de segurança - Nunca coloque a app_secret em código de frontend, aplicativos móveis ou repositórios públicos. Ela deve permanecer no servidor. - Habilite "Exigir token de desafio emitido pelo servidor" no painel para rejeitar qualquer desafio tentado sem um server_token. - Mantenha o ttl curto (300s por padrão, máx. 900s) e prefira max_uses=1 para reduzir o impacto de um vazamento de token. ## Próximos passos - [SDK Web](/pt-BR/web-sdk) - [Referência da API](/pt-BR/api-reference)