Política HTTP e limites do host
Configurar cabeçalhos, CSP, origens e publicação sem confundi-los com as permissões do runtime.
Veja versões, mudanças e requisitos em Framework 4.0 e CLI 1.2.
Dois controles com responsabilidades diferentes
security em wu.config.json define a política HTTP que o WU serve e que o build exporta para outros hosts. Os grants de cada app fazem parte da autoridade que o host entrega ao runtime. Um cabeçalho CSP não substitui o contrato de capacidades, e um grant não autoriza, por si só, o navegador a carregar uma origem bloqueada pela CSP.
Configuração
{
"security": {
"enabled": true,
"csp": "",
"frame_options": "DENY",
"referrer_policy": "strict-origin-when-cross-origin",
"nosniff": true,
"app_origins": ["https://apps.example.com"],
"connect_origins": ["https://api.example.com"],
"wasm": false
}
}
Os domínios do exemplo são marcadores de posição. A política deve descrever as origens que a aplicação realmente usa.
| Campo | Efeito |
|---|---|
enabled |
Ativa ou desativa o conjunto de cabeçalhos |
csp |
Política gerada, literal, report-only ou off |
frame_options |
X-Frame-Options; padrão DENY |
referrer_policy |
Política de referência |
permissions_policy |
Capacidades do navegador por Permissions-Policy |
hsts |
Strict-Transport-Security; útil ao servir por TLS |
nosniff |
X-Content-Type-Options: nosniff |
corsOrigin ou cors |
Origem CORS; cors também aceita um objeto com origin |
app_origins |
Origens de bundles: script e conexões |
connect_origins |
Origens de API: conexões |
wasm |
Permite a compilação WASM na CSP gerada |
O parser também contempla grafias camelCase para vários campos, como appOrigins, connectOrigins, frameOptions e wasmUnsafeEval. Para CORS, há uma exceção importante: cors_origin é o nome interno da estrutura, mas o JSON aceita corsOrigin ou cors, não essa grafia snake_case.
Convenções de valores
Para os campos de cabeçalho de texto, uma string vazia deixa a decisão para o WU e off suprime esse cabeçalho. csp: "report-only" gera uma política equivalente no cabeçalho de relatório; o navegador informa violações sem bloqueá-las por essa política. Uma string CSP literal é usada como está.
A geração analisa os scripts inline do documento final e calcula hashes. Ela precisa ser executada após qualquer inserção de catálogo ou import map. Introduzir um handler HTML como onclick tem um tratamento diferente de um script com hash; os diagnósticos apontam incompatibilidades. Manter eventos em módulos e estilos em folhas evita depender de exceções do HTML.
Na 1.2.0, hashes CSP são calculados por página e normalizam quebras CRLF. security.upgradeInsecureRequests controla a promoção para HTTPS. O build preserva o _headers do shell, aplica cache imutável a arquivos com hash e valida valores contra injeção de cabeçalhos. Verifique a política realmente enviada pelo hosting com wu doctor --url.
CORS
Access-Control-Allow-Origin não é emitido por padrão. Para servir microapps da mesma origem, não é necessário habilitar *. Quando a topologia exige uma origem diferente, configure o valor concreto e revise também a CSP, as credenciais e a política do destino.
A opção cors de uma regra de proxy pertence a essa regra. Não é idêntica a security.corsOrigin, que governa as respostas do servidor de produção.
Arquivos publicáveis
A segurança de rotas decodifica escapes antes de verificar segmentos e rejeita traversal, controles, barras invertidas e caminhos absolutos. O filtro de arquivos bloqueia dotfiles e extensões ou nomes considerados sensíveis. .well-known é uma exceção deliberada porque contém documentos públicos de protocolo.
O build e doctor revisam áreas publicáveis, mas o lugar correto de uma credencial continua sendo o backend ou seu ambiente. Se uma aplicação precisar de um token privado, não deve incorporá-lo às fontes ou a public/, mesmo que um nome específico não apareça na lista de bloqueios.
O servidor de desenvolvimento aplica sua própria política de Host, CORS, HMR e acesso a arquivos, incluindo sourcemaps, módulos e imports com query. Configure túneis em dev.allowedHosts; apenas VITE_* e WU_* de .env chegam ao navegador. Consulte desenvolvimento para migrar esses comportamentos.
Sentinel
A instância do sentinel está desativada em wu dev e é instanciada com seus valores padrão em wu serve. Há código para classificar solicitações e publicar rotas de protocolo ACP. A existência desses módulos não comprova proteção universal contra automação nem substitui o controle de acesso do produto.
CLI 1.2.0 aceita manifest: "define" em cada app e security.frameOrigins para iframes remotos. As origens de frames entram apenas em frame-src; não habilitam scripts ou conexões do host. O filtro de navegação de catálogos não bloqueia leitura por fetch. Veja apps remotas e build.
Referência de implementação
wu-cli/src/config/config.zigwu-cli/src/runtime/security.zigwu-cli/src/runtime/project_fs.zigwu-cli/src/runtime/allowed_hosts.zigwu-cli/src/runtime/dev/env.zigwu-cli/tests/dev-security.test.cjswu-cli/tests/doctor-policy.test.cjs