Um QR Code não tem cara de link. Ninguém passa o mouse por cima para ver para onde ele vai, e o filtro de e-mail enxerga só uma imagem em preto e branco. Foi por essa brecha que o quishing, o phishing por QR Code, cresceu 146% no primeiro trimestre de 2026: foram de 7,6 milhões de ataques em janeiro para 18,7 milhões em março, segundo o relatório trimestral de ameaças por e-mail da Microsoft. Foi o vetor que mais cresceu no período.
A ironia é que o recurso preferido dos golpistas, o QR Code dinâmico, é também a melhor defesa de quem imprime QR em embalagem, cardápio, boleto ou cartaz. Abaixo está como o ataque funciona e o que dá para fazer, com código.
O que é quishing e por que ele passa pelos filtros?
No phishing comum, o link está no texto. Filtros de e-mail e navegadores leem esse texto, comparam com listas de domínios perigosos e bloqueiam. No quishing, a URL está codificada nos módulos de uma imagem. Boa parte das ferramentas de segurança não decodifica a imagem, então a mensagem passa limpa.
O segundo efeito é a troca de aparelho. Quem recebe o e-mail no notebook aponta a câmera do celular para a tela. O ataque sai de um computador com antivírus, proxy corporativo e extensão de segurança e cai num navegador móvel, com a barra de endereço encurtada e pressa para resolver.
Como o golpista usa QR Code dinâmico
Um QR estático guarda a URL final dentro da imagem. Um QR dinâmico guarda um link curto, e o servidor decide para onde redirecionar a cada scan. O golpista aproveita essa separação: no momento do envio, o QR aponta para uma página inofensiva. Se um filtro mais esperto decodificar a imagem e seguir o link, encontra algo limpo e libera a mensagem. Horas depois, o destino é trocado para a página falsa.
A Unit 42, da Palo Alto Networks, documentou essa tática: encurtadores de QR transformam a imagem estática em um endpoint dinâmico, e o atacante troca o redirecionamento quando quiser. Num dos casos analisados, o código passava por um CAPTCHA antes de cair numa página falsa do Outlook. A análise no momento da entrega não basta, porque o destino de amanhã ainda não existe.
Para o usuário final, a regra prática é simples: se um parquímetro, uma transportadora ou um banco pede uma ação por QR, ignore o código e abra o aplicativo oficial que você já tem, ou digite o endereço à mão. Para quem publica QR, a lição é outra: o seu cliente vai desconfiar cada vez mais, e o QR precisa dar motivo para confiar.

O risco para quem imprime QR Code
Se a sua empresa coloca QR em produto ou material físico, o problema não é só o cliente cair num golpe. É o cliente cair num golpe que parecia ser seu. Três cenários aparecem com frequência:
- Adesivo por cima: alguém cola um QR falso sobre o seu em uma mesa, totem ou parquímetro. Visualmente, nada muda.
- Destino que apodreceu: o domínio da campanha expirou, foi comprado por terceiros e o QR impresso em mil embalagens agora leva para outro lugar.
- QR estático com erro: a URL tinha um problema ou a página saiu do ar, e não há como corrigir sem reimprimir.
Os três têm a mesma causa: o QR impresso fica fora do seu controle depois que sai da gráfica. O QR dinâmico devolve esse controle.
Defesa 1: verificar a URL antes de publicar
O primeiro passo é barato: antes de qualquer URL virar QR, pergunte se ela é segura. Isso vale para links que o seu time digita e, principalmente, para links que vêm de usuários, parceiros ou integrações. A API de Verificação de URL responde em uma chamada:
curl -sS 'https://api.respawntech.dev/v1/tools/safety/check?url=https://loja.example.com/promo' \
-H "X-API-Token: $RESPAWN_API_TOKEN"
# { "is_safe": true }async function isSafe(url) {
const res = await fetch(
`https://api.respawntech.dev/v1/tools/safety/check?url=${encodeURIComponent(url)}`,
{ headers: { "X-API-Token": process.env.RESPAWN_API_TOKEN } }
);
const { is_safe } = await res.json();
return is_safe;
}
if (!(await isSafe(targetUrl))) {
throw new Error("Destino bloqueado: URL marcada como insegura");
}No QR Code Dinâmico essa checagem já vem embutida: URLs maliciosas são recusadas na criação com o erro dynamic_qr.malicious_url, e um destino que se torne inseguro depois leva o visitante para a página de QR indisponível com reason=safety_risk, em vez de redirecioná-lo.
Defesa 2: trocar o destino sem reimprimir
Descobriu que a página de destino foi comprometida, ou que a campanha acabou? Com QR dinâmico, a imagem impressa continua a mesma e só o destino muda. É um PATCH, e editar destino não custa crédito:
curl -sS -X PATCH "https://api.respawntech.dev/v1/tools/image/qr-code/dynamic/$QR_ID" \
-H "X-API-Token: $RESPAWN_API_TOKEN" \
-H 'Content-Type: application/json' \
-d '{ "target_url": "https://loja.example.com/aviso-de-seguranca" }'await fetch(`https://api.respawntech.dev/v1/tools/image/qr-code/dynamic/${qrId}`, {
method: "PATCH",
headers: {
"X-API-Token": process.env.RESPAWN_API_TOKEN,
"Content-Type": "application/json",
},
body: JSON.stringify({ target_url: "https://loja.example.com/aviso-de-seguranca" }),
});Em incidente, vale mais apontar para uma página de aviso do que desativar o QR. Quem escanear entende o que houve, em vez de achar que o código quebrou.
Defesa 3: controles que limitam o estrago
Nem todo QR precisa funcionar para sempre, nem para qualquer pessoa. Quanto menor a janela de uso, menor o valor dele para quem quer abusar. Os campos abaixo entram tanto na criação quanto num PATCH:
| Campo | O que faz | Quando usar |
|---|---|---|
| expires_at | Desliga o QR numa data | Promoções, eventos, ingressos |
| scan_limit | Desliga após N scans | Cupom de uso limitado, brindes |
| password | Exige senha antes do redirect | Material interno, documentos restritos |
| expired_url / limit_reached_url | Leva para uma página sua quando o QR expira ou esgota | Evitar beco sem saída depois do fim da campanha |
| custom_domain_id | Usa o seu domínio no link curto | Reforçar a marca e treinar o cliente a reconhecer o seu endereço |
O domínio próprio merece destaque. Quando todo QR da sua empresa abre em qr.suaempresa.com, fica fácil orientar o cliente: se o endereço for outro, desconfie. É a mesma lógica de ensinar a conferir o cadeado do navegador, só que aplicada ao scan.
Checklist para equipes que usam QR Code
- Verifique toda URL antes de virar QR, inclusive as que vêm de parceiros e usuários.
- Prefira QR dinâmico em qualquer material impresso que dure mais de uma semana.
- Use domínio próprio no link curto e comunique isso aos clientes.
- Defina expiração ou limite de scans em campanhas com data para acabar.
- Acompanhe os scans: um pico fora do horário ou de uma região inesperada pode indicar QR copiado.
- Nunca leve o cliente direto de um scan para login ou pagamento sem contexto. Se for inevitável, deixe claro o domínio.
- Inspecione fisicamente QRs em locais públicos: adesivo sobreposto é o golpe mais barato que existe.
Perguntas frequentes
QR Code pode ter vírus?
O QR em si é só texto codificado, geralmente uma URL. O perigo está no destino: uma página que imita um login, pede dados de cartão ou baixa um aplicativo malicioso.
Como saber se um QR Code é seguro?
Antes de abrir, confira o endereço que a câmera mostra. Desconfie de domínios estranhos, encurtadores genéricos e páginas que pedem senha ou pagamento logo de cara. Em sistemas, verifique a URL por API antes de exibi-la ou redirecionar.
QR Code dinâmico é mais perigoso que o estático?
Depende de quem controla. Nas mãos de um golpista, o destino trocável ajuda a enganar filtros. Nas mãos da empresa que imprime, é o que permite corrigir um destino comprometido sem recolher material.
O que fazer se um QR da minha empresa for adulterado?
Se ele for dinâmico, aponte o destino para uma página de aviso na hora e investigue. Se for estático, retire o material e substitua por um QR dinâmico com domínio próprio.
Comece pelos QRs que já estão na rua
Quishing cresce porque explora o ponto que ninguém olha. Para quem imprime QR, a defesa é tratar cada código como um link que você precisa continuar controlando depois da gráfica: verificar o destino, poder trocá-lo e limitar a janela de uso.
O QR Code Dinâmico já recusa destinos maliciosos e permite trocar o link sem reimprimir. A Verificação de URL leva a mesma checagem para o resto do seu sistema. Os detalhes de cada campo estão na documentação.
Sobre o autor
Rychard
Equipe Respawn Tech Dev
Quem constrói e mantém as APIs da Respawn Tech Dev.