Segurança em Shopify no Brasil: app permissions, custom apps, PCI-DSS, LGPD, temas e webhooks. Checklist técnico completo para lojistas e devs.
Shopify representa 34% do GMV brasileiro em e-commerce SaaS em 2026 (dados ABComm/Statista). A plataforma resolve muita coisa — mas transfere para o lojista uma responsabilidade que quase ninguém assume: segurança da configuração e das integrações. Você não escreve o checkout, mas escreve o webhook. Você não hospeda o banco, mas dá permissão de leitura para 14 apps de marketing. É aí que mora o problema.
O modelo de responsabilidade compartilhada da Shopify
A Shopify assume:
- PCI-DSS Nível 1 do checkout (você fica fora do escopo se não tocar em cartão).
- Infra do storefront, CDN, WAF básico.
- Patch de vulnerabilidades da plataforma core.
Você assume:
- App permissions e escopo mínimo.
- Custom apps e private apps: credenciais, escopo, rotação.
- Temas: Liquid injection, XSS, dados expostos no HTML.
- Webhooks: assinatura HMAC, replay, endpoint público.
- LGPD: base legal, retenção, direitos do titular, transferência internacional.
- Dados customer-facing fora da Shopify (CRM, ERP, e-mail marketing).
Riscos por vetor
1. App permissions descontroladas
Uma loja média brasileira instala 18 apps em 6 meses. Cada app pede um leque de permissões. O padrão do lojista: aceitar tudo.
O que auditar mensalmente:
read_customers → risco alto se o app não é CRM legítimo
read_orders → ok para logística, suspeito para "reviews"
write_products → só apps de PIM/ERP
read_all_orders → escopo estendido, exige justificativa
read_customer_events → coleta comportamental (LGPD: base legal?)
Vá em Configurações → Apps → Permissões desenvolvedor e revise a lista. Apps abandonados que ainda têm token válido são um dos vetores mais comuns de vazamento em 2026 — o app foi vendido, credenciais foram para um novo dono e ninguém revisou.
2. Custom apps e Admin API
Custom apps geram um X-Shopify-Access-Token de longa duração. Se esse token vaza (por exemplo, num repositório público, num backup de env, num log do Sentry sem redação), atacante tem acesso completo à API Admin no escopo concedido.
Mitigação mínima:
- Um token por finalidade. Não reutilize entre serviços.
- Rotação semestral automática via
POST /admin/api/2025-01/access_tokens.json. - Segredos jamais em variável de ambiente do tema — Liquid renderiza no HTML público.
- Monitore chamadas de API por token. A Shopify expõe rate & IP telemetry na aba de logs; alerte em picos e origens novas.
3. Redução de escopo PCI-DSS: a armadilha do "sim, estou seguro"
Você fica fora do escopo PCI se:
- Não hospeda o campo de cartão.
- Não intermedia PAN (número do cartão) em nenhum momento.
- Não armazena PAN em backup, log ou banco próprio.
Você volta para o escopo se:
- Usa Shopify Payments com integração customizada que loga request body.
- Faz "iframe wrapping" com JavaScript que lê o input antes do submit (Magecart-style).
- Um app instalado injeta script de terceiros no checkout (Shopify Plus permite; Standard não).
A auditoria de terceiros no checkout.liquid (Plus) é obrigatória. Um script de tracking mal configurado pode reintroduzir você ao escopo PCI e fazer o custo de compliance saltar de zero para R$ 200 mil/ano.
4. Temas: o vetor esquecido
Temas Liquid renderizam server-side e produzem HTML público. Padrões perigosos:
{{ customer.email }} <!-- ok, dentro de área logada -->
{{ order.customer.email }} <!-- vazamento no order-status page -->
{{ shop.metafields.private.token }} <!-- token exposto no HTML -->
{% raw %}
<script>
var user = {{ customer | json }}; <!-- serializa tudo, inclusive campos privados -->
</script>
{% endraw %}
XSS via nome de produto ou review não sanitizado também é comum. A Shopify escapa por padrão em muitos filtros, mas | html_safe e | script_tag desligam a proteção.
5. Webhooks: HMAC e replay
Webhook não validado é o novo endpoint aberto. Toda integração séria precisa:
const crypto = require('crypto');
function verifyShopifyWebhook(req, secret) {
const hmac = req.headers['x-shopify-hmac-sha256'];
const digest = crypto
.createHmac('sha256', secret)
.update(req.rawBody, 'utf8')
.digest('base64');
return crypto.timingSafeEqual(
Buffer.from(digest),
Buffer.from(hmac)
);
}
E ainda: proteja contra replay usando X-Shopify-Webhook-Id como chave de idempotência com TTL de 24h. Sem isso, atacante que captura um webhook legítimo consegue reexecutá-lo indefinidamente.
LGPD aplicada à Shopify Brasil
Pontos que a maioria dos lojistas erra:
- Base legal para marketing: consentimento explícito, não legítimo interesse. O checkbox "quero receber ofertas" precisa vir desmarcado.
- Transferência internacional: dados de clientes ficam nos EUA/Canadá. Você precisa da cláusula contratual padrão e informar ao titular na política de privacidade.
- Direito à eliminação: a API de customer redaction da Shopify existe (
/admin/api/customers/{id}/redact). Use-a em 15 dias após pedido do titular. - Cookies e pixel: banner de consentimento é obrigatório para tracking. A Shopify Brasil habilita banner nativo desde 2024 — habilite.
Consulte o checklist LGPD de 15 pontos para o resto.
Checklist rápido de segurança Shopify BR
- [ ] Revisão trimestral de apps instalados e permissões.
- [ ] Custom apps com tokens rotacionados semestralmente.
- [ ] Nenhum segredo em tema Liquid ou metafield público.
- [ ] Webhooks com HMAC + idempotência.
- [ ] Banner de cookies ativo, marketing por opt-in.
- [ ] MFA obrigatório em todas as contas de staff.
- [ ] IP allowlist no Admin (Shopify Plus).
- [ ] Log de acessos exportado para SIEM externo.
- [ ] Testes de vulnerabilidade nos endpoints públicos (webhooks, storefront custom, headless).
- [ ] Contrato de operador com fornecedores brasileiros de app.
A Varredura testa continuamente endpoints públicos, webhooks e integrações headless de lojas Shopify contra o OWASP Top 10, JWT mal implementado e SSRF — sem tocar em código-fonte nem quebrar o tema. Rode agora.
Sua app em produção passa por essa análise?
Rode uma varredura autônoma em ~60 segundos. Sem cadastro.