Segurança de QR Code: riscos dos QR dinâmicos e armadilhas de URLs encurtados
Resumo (TL;DR)
Algumas semanas atrás, escaneei o QR do cardápio de uma cafeteria e ele resolveu para um encurtador desconhecido ql.st. Quando olhei de perto, havia um adesivo limpo sobre o QR original. O dono me disse que estava ali havia semanas e ninguém tinha notado. Há pouquíssima literatura sobre “hackear” o formato QR em si, e por bom motivo — os ataques reais são desse tipo tão prosaico. Alguém imprime um novo adesivo. Seu cliente segue o link. O resto deste texto tenta respeitar essa realidade: a maior parte da segurança de QR é papel, fita e a URL que você escolheu há dois anos.
Um QR code não é uma primitiva de segurança. Ele é uma codificação visual de uma string — normalmente uma URL — e sua segurança depende quase inteiramente da URL de destino e da forma como o código foi produzido. QR codes estáticos carregam a URL final diretamente e não podem ser alterados após a impressão. QR codes dinâmicos carregam uma URL curta de redirecionamento que pode ser reapontada à vontade, o que é conveniente, mas cria risco de longo prazo: se o serviço redirecionador fechar, mudar de dono ou for comprometido, todo código escaneado segue o novo destino. Encurtadores de URL têm a mesma classe de problemas (expiração, sequestro, rastreamento), o que os torna escolhas ruins para materiais impressos públicos que devem funcionar por anos. Um bom padrão é codificar uma URL canônica do seu próprio domínio diretamente em um QR estático, reservando QR dinâmico ou links encurtados para campanhas de marketing de curta duração em que você planeja explicitamente o fim de vida do redirecionador.
Contexto e conceitos
QR codes são definidos pela ISO/IEC 18004. As versões vão de 1 a 40; versões mais altas têm mais módulos (células do grid) e podem carregar mais dados. Todo QR code também armazena dados de correção de erros Reed-Solomon em um de quatro níveis:
- L: aproximadamente 7% recuperável
- M: aproximadamente 15% recuperável
- Q: aproximadamente 25% recuperável
- H: aproximadamente 30% recuperável
Níveis de correção mais altos permitem que sujeira, dobras ou um logo sobreposto obscureçam parte do código sem quebrá-lo, mas aumentam a densidade de módulos, o que torna códigos impressos muito pequenos mais difíceis de escanear. Cartões de visita e pôsteres normalmente ficam em M, com Q ou H sendo escolhidos quando é preciso colocar um logo no centro.
QR codes estáticos embutem a URL final diretamente nos módulos, então o resultado do scan é permanente. QR codes dinâmicos embutem uma URL curta de redirecionamento e dependem de um provedor que pode reapontar o destino. Essa flexibilidade é o recurso — e também o risco de longo prazo — dos códigos dinâmicos.
Há também um aspecto de capacidade. Um QR code Versão 1 (21x21 módulos) cabe cerca de 25 caracteres alfanuméricos em correção M; um código Versão 10 (57x57 módulos) cabe mais de 300 caracteres. URLs longas te empurram para versões mais altas, que são mais densas e mais difíceis de escanear em tamanhos pequenos. A URL curta do redirecionador de um QR dinâmico é genuinamente menor no papel, mas essa compacidade se paga em dependência de longo prazo. Se o destino que você realmente se importa puder ser encurtado dentro do seu próprio domínio (por exemplo, example.com/p/123), você ganha a maior parte do benefício de tamanho sem terceirizar o redirecionamento.
Um conceito relacionado é a zona de silêncio (quiet zone). Scanners de QR dependem de uma borda em branco — normalmente de quatro módulos — em torno do código. Se seu layout comprimir a zona de silêncio para economizar espaço, o scan fica inconfiável mesmo que o código em si esteja intacto. Quando designers de impressão dizem “o QR não escaneia”, a zona de silêncio é a primeira coisa a inspecionar.
Comparação e dados
| Critério | QR estático | QR dinâmico |
|---|---|---|
| URL codificada | A URL de destino final | Uma URL curta de redirecionamento |
| Rastreamento / analytics do scan | Indisponível por padrão | Recurso padrão |
| Risco de expiração | Nenhum enquanto seu domínio for mantido | Depende do plano, contrato e ciclo de vida do provedor |
| Dependência de terceiros | Nenhuma | Serviço redirecionador |
| Superfície de phishing | Basta avaliar a URL de destino | Sequestro ou transferência do redirecionador pode mudar o destino silenciosamente |
| Editabilidade após impressão | Não é possível, precisa reimprimir | Possível |
Uma URL curta pode parecer mais limpa impressa, mas os usuários não conseguem verificar visualmente para onde ela leva. É a mesma propriedade que atacantes exploram — você troca um pouco de estética por uma categoria grande de risco.
Cenários reais
Cenário 1 — Cartões de visita e pôsteres. Recentemente peguei um cartão de visita de um contato de 2019 e escaneei o QR por curiosidade. O alvo bit.ly retornou um 404 — presumo que o plano do encurtador do dono expirou quando a empresa se reorganizou. Codifique uma URL canônica do seu próprio domínio em um QR estático. Materiais impressos costumam circular por anos, e dependências de redirecionadores raramente sobrevivem a ciclos de hype ou reorganizações corporativas. Para códigos impressos pequenos, reduza o nível de correção e minimize o tamanho da URL para manter a contagem de módulos baixa e a confiabilidade do scan alta.
Cenário 2 — Medir uma campanha de marketing. Uma startup que conheço usou um serviço popular de QR dinâmico em uma feira; três meses depois, o tier gratuito encerrou discretamente o recurso do qual eles dependiam, e cada impresso físico começou a redirecionar para uma página de “plano expirado”. Quando rastreamento é o ponto principal, considere QR dinâmico com um provedor de boa reputação ou QR estático apontando para uma URL com parâmetros UTM. Hoje eu defaulto para um caminho de encurtador auto-hospedado como yourdomain.com/go/summer-2026: enquanto você mantém o domínio, não há relógio de expiração. Se ainda assim escolher QR dinâmico de terceiros, documente um plano de encerramento: para onde o redirect vai quando a campanha terminar, e quem é dono dessa decisão.
Cenário 3 — Integridade e verificação de documento. Em vez de apenas uma URL, codifique um hash de documento ou um parâmetro de URL assinado (por exemplo, ?d=abc123&sig=...) para que um scanner possa confirmar que o documento bate com o original. Em um projeto de emissão de certificados em que trabalhei, colocamos os primeiros 16 caracteres hex de um SHA-256 mais uma assinatura HMAC dentro do QR; isso nos empurrou para códigos Versão 10+, e tivemos que reequilibrar o tamanho de impressão com a confiabilidade do scan. É útil para contratos, certificados e etiquetas de produto em que detecção de adulteração importa.
Cenário 4 — Cardápios de restaurantes e quiosques públicos. A explosão de QR de cardápio pós-2020 tornou locais públicos um alvo fértil para phishing baseado em adesivos: um atacante imprime um QR parecido, cola em cima do original, e o cliente desavisado é redirecionado para uma página que captura credenciais. As defesas são prosaicas, mas eficazes: lamine o código sobre uma superfície fixa, inspecione diariamente e use uma URL canônica no domínio do seu restaurante, para que clientes que olham o preview reconheçam.
Equívocos comuns
“QR codes podem ser hackeados.” O formato em si normalmente não é o elo fraco. Os riscos reais são URLs maliciosas codificadas dentro do QR e adulteração física — alguém colando um novo adesivo de QR em cima do seu em um local público. Inspecionar visualmente códigos afixados em busca de adesivos adicionados é um hábito básico de segurança física.
“URLs curtas são mais limpas, então são melhores.” São mais limpas visualmente, mas os usuários não conseguem verificá-las, o serviço por trás pode fechar ou ser comprometido, e o próprio QR vira uma dependência de longa duração com um terceiro. Para material impresso de longa vida, uma URL longa canônica é mais segura.
“Correção de erro mais alta é sempre melhor.” Correção nível H é útil se você quer cobrir o centro com um logo, mas ela aumenta a densidade de módulos e reduz a confiabilidade do scan em tamanhos pequenos de impressão. M é um padrão seguro típico.
“Dá para saber para onde um QR leva.” O app de câmera embutido do iOS 17 e 18 mostra um banner com a URL antes de abrir, mas alguns apps de câmera OEM do Android e scanners de terceiros pulam direto para o navegador em um único toque. QRs de phishing de login de Wi-Fi público miram especificamente esse comportamento de abertura automática. Desative a abertura automática onde for possível e torne hábito verificar o domínio antes de tocar.
“Um QR que eu mesmo gerei é automaticamente seguro.” Não se você o gerou por um serviço web de terceiros que loga cada entrada. Alguns geradores gratuitos de QR salvam as URLs enviadas e revendem o analytics, ou silenciosamente embrulham sua URL no próprio redirecionador para rastrear scans. Leia a política de privacidade ou gere o código em uma ferramenta que roda inteiramente no seu navegador.
“Codificação é criptografia.” QR é uma codificação, não um esquema de criptografia. Qualquer um com um scanner pode ler os dados codificados, e o mesmo vale para códigos de barras em geral. Se você precisa de sigilo, criptografe o payload antes de codificar — por exemplo, codifique um JWT assinado em vez de um parâmetro legível.
Checklist
- Por quanto tempo este QR precisa funcionar?
- Anos: prefira QR estático + URL do seu próprio domínio.
- Campanha curta: QR dinâmico ou parâmetros UTM são razoáveis.
- Você realmente precisa de rastreamento?
- Não: QR estático é suficiente.
- Sim: escolha um provedor de QR dinâmico de boa reputação e planeje o redirecionamento de fim de vida.
- Qual o tamanho de impressão?
- Muito pequeno: URL mais curta e correção nível M.
- Normal ou grande: você pode usar Q ou H se quiser logo sobreposto.
- O código fica em local público? Inspecione periodicamente em busca de adulteração ou adesivos sobrepostos.
- A URL de destino é segura? Confirme HTTPS, posse do domínio e validade atual.
- Onde o QR é gerado? Prefira geração offline ou no navegador para que a URL codificada nunca saia do seu dispositivo como entrada de log em um site de terceiros.
- O que acontece se o QR falhar? Projete um fallback: uma URL curta impressa ao lado do código, ou uma dica legível, para que o material continue útil mesmo quando um scanner erra a leitura ou o destino cai temporariamente.
Ferramenta relacionada
O gerador de QR code da Patrache Studio constrói códigos no navegador, então a URL que você insere não é enviada para um servidor externo. Se o QR resultante for incorporado em uma imagem para a web, combine-o com as orientações de formato do Guia de compressão de imagens. Se o QR acabar em um pacote de documentos que você pretende distribuir, o fluxo em PDF Merge & Split no navegador mantém todo o pipeline — do ativo ao PDF final — dentro de uma fronteira de privacidade consistente.
Referências
- ISO/IEC 18004:2015, “QR Code bar code symbology specification” — título oficial; o padrão não é distribuído livremente.
- UK NCSC, “QR codes — what’s the real risk?” — https://www.ncsc.gov.uk/guidance/qr-codes
- Anti-Phishing Working Group, exemplos de phishing — https://www.phishing.org/phishing-examples
- MDN, estrutura e validação de URL — https://developer.mozilla.org/en-US/docs/Web/API/URL