Skip to content

Contrato de importação e execução ​

O fluxo profissional usa o mesmo ThemeStorage, validador e metadados de revisões. O ZIP deve conter os arquivos diretamente na raiz, sem pasta envolvente. Aceita ZIP clássico sem criptografia, com entradas armazenadas ou Deflate; não aceita ZIP64, arquivos divididos, links, caminhos duplicados, absolutos ou traversal. Limites: 30 MiB de ZIP, 60 MiB descompactados, 12 MiB por arquivo e 500 entradas, incluindo diretórios. CRC, cabeçalhos e limites de expansão são verificados em memória antes de qualquer gravação; nenhum arquivo é extraído no filesystem.

A API de importação recebe application/zip, com expectedThemeRevision e baseThemeRevision na query. A identidade da loja vem exclusivamente da autenticação. JSON, Liquid, referências e fontes comerciais passam pelas mesmas validações do sistema. Templates e components ainda não utilizados também são validados e preservados na leitura, exportação e publicação.

Nesta etapa, o JavaScript do pacote importado deve ser idêntico ao da revisão-base. O layout pode manter a chamada canônica <script src="{{ theme.assets.js }}" defer></script>. CSS, templates, sections, components, imagens e estrutura Liquid podem ser editados externamente. Essa é uma restrição de execução, sem opções visuais ou schemas de layout.

A política de execução tem três camadas compartilhadas:

  • A importação inspeciona HTML/SVG com o parser de sanitize-html, incluindo entidades em URLs e namespaces SVG. SVG exige UTF-8 válido, sem bytes nulos. Também avalia expressões Liquid constantes em todos os ramos, inclusive echo, com limites de tempo/memória. Não aceita scripts, atributos de eventos, documentos embutidos, URLs executáveis, XML com entidades/folhas externas ou animação SVG que possa alterar atributos executáveis.
  • O ThemeEngine inspeciona o documento completo depois de resolver Liquid, componentes, concatenações e dados. Uma condição dependente de produto ou página não é considerada segura por não ter sido visitada na importação: cada renderização real passa pela verificação, tanto em preview quanto na loja publicada. Conteúdo executável causa erro antes de enviar HTML; não é removido silenciosamente. HTML legítimo via raw, SVG estático, classes, estilos e hooks permanecem disponíveis.
  • O navegador recebe CSP com nonce aleatório por documento, script-src-attr 'none', object-src 'none' e base-uri 'none', sem unsafe-inline/unsafe-eval. A política HTTP preserva frame-ancestors da preview; uma meta anterior a todo o conteúdo do tema protege também consumidores do HTML fora dessas rotas. O nonce não integra o contexto Liquid. Somente a plataforma o aplica ao entrypoint original do tema, ao runtime e à ponte da preview. strict-dynamic permite scripts carregados pelo runtime confiável, como o SDK de pagamento; scripts declarados pelo tema não herdam essa autorização. HTML usa private, no-store.

A verificação estática não procura prever todos os valores comerciais possíveis. Uma expressão dependente de dados pode ser aceita no rascunho e recusada quando produzir conteúdo executável. Essa recusa nunca ativa a revisão nem retorna o HTML inseguro. Pacotes e rascunhos seguem a publicação manual existente.

O contrato do navegador segue a especificação CSP. A homologação de integrações e navegadores deve conferir essa política; não se deve relaxá-la com unsafe-inline ou autorizar automaticamente scripts encontrados no HTML.

Temas V3 · Liquid estrutura, CSS desenha, JSON compõe.