Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Invalidar o token vazado antes que alguém o use
- Descobrir o que um invasor pode ter feito com o bot
- Trocar o token na hospedagem e evitar um novo vazamento
Nesta página
- O que fazer nos primeiros minutos?
- Como redefinir o token do bot?
- O que um invasor consegue fazer com o token?
- Como saber se alguém usou o token?
- Como trocar o token sem deixar o bot fora do ar por muito tempo?
- Como limpar o repositório depois?
- Como evitar que o token vaze de novo?
- Como fazer isso na Square Cloud
- Perguntas frequentes
O token do bot é a senha dele. Quem o tem entra no Discord ou no Telegram como o seu bot, sem precisar de mais nada: nem usuário, nem código de verificação. Se ele apareceu num repositório público, num print, num log ou numa conversa, trate-o como comprometido a partir desse momento.
A correção principal leva um minuto. O que demora é descobrir o que foi feito com o token e garantir que o novo não vaze do mesmo jeito.
O que fazer nos primeiros minutos?#
Siga esta ordem. Não comece pela limpeza do repositório.
- Redefina o token. É o único passo que tira o poder do valor vazado.
- Atualize o token novo onde o bot roda e reinicie o processo.
- Audite o servidor ou o chat em busca de ações que você não fez.
- Limpe o código e o histórico do Git.
- Corrija a causa para o próximo token não vazar.
Quanto antes você fizer o passo 1, menor a janela de ataque. Robôs varrem repositórios públicos atrás de tokens, então não espere.
Como redefinir o token do bot?#
Discord#
No Portal de Desenvolvedores, abra o seu aplicativo, entre na aba Bot e clique em Reset Token, confirmando em seguida. Isso invalida todos os tokens antigos do bot, conforme o guia do discord.js. Copie o novo valor na hora e guarde-o direto na variável de ambiente.
Depois da redefinição o bot fica offline até você atualizar o token no lugar onde ele roda. Isso é esperado.
Telegram#
Abra uma conversa com o @BotFather e envie /token. A documentação do Telegram indica esse comando quando o token está comprometido ou foi perdido. Escolha o bot e o BotFather devolve um token novo. Outra opção fica em /mybots: escolha o bot, depois API Token e Revoke current token. Em qualquer caso, confirme em seguida que o token antigo foi recusado (veja abaixo).
O Discord ou o GitHub invalidam o token por mim?#
Não dependa disso. O GitHub tem um padrão de secret scanning para o token de bot do Discord (discord_bot_token), marcado como padrão de parceiro e com suporte a push protection. O token de bot do Telegram (telegram_bot_token) aparece na lista sem parceiro e sem push protection. Detalhes na lista de padrões do GitHub.
Mesmo para o Discord, a documentação não garante que o token seja redefinido automaticamente, e a detecção só vale para repositórios do GitHub. Token colado em print, em canal de suporte ou em log não passa por esse filtro.
O que um invasor consegue fazer com o token?#
Tudo o que o bot pode fazer, limitado pelas permissões que ele tem nos servidores. O guia do discord.js lista o risco típico: spam em todos os servidores do bot, DMs em massa, apagar canais, expulsar ou banir membros e fazer o bot sair dos servidores.
Por isso o dano depende das permissões. Um bot com Administrador pode tudo; um bot que só lê e responde mensagens faz bem menos. É um bom motivo para dar ao bot só o necessário.
Redefinir o token não desfaz o que já foi feito. Também não remove o que o invasor criou e que não depende do token, como webhooks: a URL de um webhook carrega o próprio token, então ele continua funcionando até ser apagado, segundo a documentação de webhooks.
Como saber se alguém usou o token?#
No Discord#
Abra as configurações do servidor e veja o Registro de auditoria. As entradas ficam guardadas por 45 dias, e a documentação do Discord diz que é preciso a permissão VIEW_AUDIT_LOG para vê-las. Procure por:
- canais, cargos ou convites criados ou apagados que você não reconhece;
- webhooks novos (apague os suspeitos);
- membros banidos ou expulsos sem motivo;
- mudanças de permissão em cargos.
Confira também a lista de servidores onde o bot está. Se houver um servidor desconhecido, tire o bot de lá.
Confirmar que o token antigo morreu#
Teste se o token vazado ainda é aceito. A API do Discord recebe o token no cabeçalho Authorization: Bot, como descreve a referência da API:
OLD_TOKEN="cole-aqui"
curl -s -o /dev/null -w "%{http_code}\n" \
-H "Authorization: Bot $OLD_TOKEN" \
https://discord.com/api/v10/users/@me200 significa que o token ainda vale e a redefinição não pegou. 401 (não autorizado) é o resultado esperado de um token invalidado. No Telegram, o teste equivalente é o método getMe da Bot API, que deve responder 401 para o token antigo:
curl -s -o /dev/null -w "%{http_code}\n" "https://api.telegram.org/bot$OLD_TOKEN/getMe"Depois do teste, limpe o histórico do terminal.
Como trocar o token sem deixar o bot fora do ar por muito tempo?#
O essencial é ter um só lugar onde o token mora. Se ele estiver espalhado por vários arquivos, você vai esquecer algum.
- Leia o token de uma variável de ambiente, nunca de uma string no código:
// index.js (discord.js v14)
import { Client, Events, GatewayIntentBits } from "discord.js";
const token = process.env.DISCORD_TOKEN;
if (!token) throw new Error("DISCORD_TOKEN não definida");
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, () => console.log(`Online como ${client.user.tag}`));
client.login(token);- Atualize o valor da variável na hospedagem e no
.envlocal. - Reinicie o bot e confira o log.
Se o bot não voltar, veja por que o bot do Discord fica offline: um token antigo esquecido em outro ambiente (teste, CI, outra máquina) é uma causa comum.
Como limpar o repositório depois?#
Só depois de redefinir. A documentação do GitHub diz que, se o dado é uma credencial, revogá-la ou trocá-la pode bastar, e reescrever o histórico nem sempre é necessário.
Primeiro descubra onde o token está no histórico:
git log --all -S"parte-do-token" --onelineSe um .env inteiro foi commitado, o GitHub documenta o git-filter-repo (versão 2.47 ou mais nova) com --sensitive-data-removal:
git-filter-repo --sensitive-data-removal --invert-paths --path .env
git push --force --mirror originIsso muda os hashes dos commits, remove assinaturas e não apaga forks nem clones de outras pessoas. O passo a passo completo, com os cuidados, está em chave de API exposta no GitHub. Como o token já foi redefinido, essa limpeza é higiene, não segurança.
Como evitar que o token vaze de novo?#
- Fora do código. Variável de ambiente, ou
.envno.gitignoredesde o primeiro commit. Veja o que são variáveis de ambiente e o que é um arquivo .env. - Um token por ambiente. Um aplicativo no Portal para desenvolver e outro para produção, como explica token do bot do Discord.
- Permissões mínimas. Evite Administrador. Peça só o que o bot usa.
- Nada de token em print, log ou ZIP. Quem ajuda você num servidor de suporte nunca precisa do token.
- Push protection ligada no GitHub e uma passada no checklist de segurança do deploy.
Como fazer isso na Square Cloud#
Na Square Cloud, os passos 2 e 3 da troca (atualizar o valor e reiniciar) acontecem no mesmo lugar, sem tocar no código. O token mora numa variável de ambiente da aplicação, como o DISCORD_TOKEN do exemplo, que você edita no painel, pela API, pela extensão do VS Code ou pela CLI, com app env set e depois app restart. A mudança vale no próximo restart, sem rebuild, e outra aplicação da mesma conta não consegue ler esse valor.
Para confirmar a volta, abra os logs em tempo real no painel, na CLI, no VS Code ou no app de celular e procure a linha Online como ... do exemplo. Se você seguiu a dica de um token por ambiente, cada aplicação (teste e produção) tem as próprias variáveis, então trocar o token de uma não derruba a outra. O painel também importa um .env e exporta o conjunto como KEY=VALUE; deixe o arquivo fora do ZIP e do repositório, para que o token só exista ali.
A redefinição em si continua sendo feita no Portal do Discord ou no BotFather, e a auditoria do servidor também é sua. Veja como funcionam as variáveis de ambiente e o que a plataforma oferece para bots.
Infraestrutura
Mitigação de DDoS L3/L4/L7 e WAF em todos os planos
Perguntas frequentes
Apagar o commit com o token resolve?
Não. O Git guarda o histórico, e o token pode ter sido copiado por forks, clones e robôs de varredura. Só redefinir o token fecha a porta.
O Discord invalida o token sozinho quando ele aparece no GitHub?
Não conte com isso. O GitHub tem um padrão para tokens de bot do Discord e avisa o parceiro, mas a documentação não promete a redefinição. Redefina você mesmo.
E se o token vazou no Telegram?
Fale com o @BotFather e use o comando /token para gerar um novo. A documentação do Telegram indica esse comando para token comprometido ou perdido.
Preciso criar um bot novo?
Normalmente não. Redefinir o token mantém o mesmo bot, nos mesmos servidores. Só atualize o valor onde o bot roda e reinicie.
Mais em Segurança
Ver todos os 10 artigos- O que é ataque de força bruta e como se protegerAtaque de força bruta é testar senhas em massa até acertar uma. Veja os tipos (spraying, credential stuffing), como funcionam e as defesas com código que roda.
- Minha aplicação foi invadida: o que fazer agoraSe a sua aplicação foi invadida, contenha o acesso, troque todos os segredos e preserve os logs antes de limpar. Veja a ordem certa, a causa e como voltar.
- Checklist de segurança para quem publica bot, site ou APIChecklist de segurança antes de publicar bot, site ou API: segredos em variáveis de ambiente, dependências, HTTPS, cabeçalhos, permissões mínimas e logs.
- Como proteger seu site ou bot contra DDoSPara se proteger de DDoS, combine mitigação na borda (CDN e WAF) com limite de requisições, timeouts e cache na aplicação. Veja o passo a passo com código.