Logo da CarameloSec - Plataforma de análise de segurança automatizada

CSP Script-Src Value

Checker ID: #12

v2.0.0-alpha

CSP Script-Src Value

Descrição

Controla quem pode executar Scripts (JavaScript) no navegador do usuário. É a principal defesa contra XSS (injeção de código malicioso).

Importância

Aqui validamos a qualidade da sua lista de convidados. Usar 'nonce-...' (uma senha única criptográfica) ou hash é muito mais seguro do que usar whitelists de domínios, pois domínios confiáveis podem ser comprometidos. Prefira sempre nonces.

Requisitos de Sucesso
  • • O parâmetro script-src deve estar presente, ou deve existir um default-src seguro ('none' ou 'self') que sirva de fallback.

  • • Valores aceitos: 'self', 'none', URLs HTTPS específicas (ex.: https://analytics.google.com), 'nonce-...' (nível elite — senha criptográfica única por requisição), 'sha256-...', 'sha384-...', 'sha512-...' (hashes de scripts conhecidos).

  • • Valores proibidos: 'unsafe-inline', 'unsafe-eval', *, http:, https: (genérico), data:, blob:, curingas de domínio (*.example.com).

Cenários de Teste
Cenário Aprovado: Uso de Nonce (Nível Elite — cada script no HTML precisa do atributo nonce correspondente):
HTTP/1.1 200 OK
Content-Security-Policy: script-src 'nonce-rAnd0mString';
Content-Type: text/html; charset=UTF-8
Cenário Aprovado: Uso de Whitelist Específica:
HTTP/1.1 200 OK
Content-Security-Policy: script-src 'self' https://analytics.google.com;
Content-Type: text/html; charset=UTF-8
Cenário Aprovado: Fallback via default-src seguro (sem script-src explícito, o default-src é obedecido):
HTTP/1.1 200 OK
Content-Security-Policy: default-src 'self';
Content-Type: text/html; charset=UTF-8
Cenário Reprovado: Uso de 'unsafe-inline' (Permite qualquer script solto no HTML — anula a proteção contra XSS):
HTTP/1.1 200 OK
Content-Security-Policy: script-src 'self' 'unsafe-inline';
Content-Type: text/html; charset=UTF-8
Cenário Reprovado: Uso de https genérico (Permite qualquer site com HTTPS, inclusive os de atacantes):
HTTP/1.1 200 OK
Content-Security-Policy: script-src https:;
Content-Type: text/html; charset=UTF-8
v1.0.0-alpha

CSP Script-Src Value

Descrição

Essa é a regra mais importante aplicada pelo “segurança da balada” (Content Security Policy – CSP), pois controla quem pode “subir ao palco” e executar código dentro do navegador do usuário. Na prática, ela define de quais sites o sistema pode carregar scripts JavaScript.

Importância

É aqui que você evita o XSS, bloqueando códigos de origem desconhecida e maliciosa que poderiam roubar dados, alterar páginas ou assumir sessões de usuários. Você deve listar explicitamente os domínios confiáveis (ex: seu site, Google Analytics).

Requisitos de Sucesso
  • • O cabeçalho Content-Security-Policy deve conter o parâmetro script-src, ou ter um default-src seguro ('none' ou 'self') que sirva de fallback.

  • • Valores aceitos: 'self', 'none', URLs HTTPS específicas (ex.: https://trusted.example), 'nonce-...' (valor criptográfico único por requisição — método mais seguro), 'sha256-...', 'sha384-...', 'sha512-...' (hashes de scripts conhecidos).

  • • Valores proibidos (equivalem a deixar a chave embaixo do tapete): 'unsafe-inline' (executa qualquer script embutido no HTML); 'unsafe-eval' (transforma texto em código executável); * (qualquer origem, sem restrição); curingas de domínio como *.example.com; data:; http:; https: (genérico, permite qualquer site); blob:.

Cenários de Teste
Cenário Aprovado: Whitelist explícita de domínios confiáveis:
Content-Security-Policy: script-src 'self' https://trusted.example;
Cenário Aprovado: Uso de nonce (mais seguro — cada script precisa ter o token correspondente no HTML):
Content-Security-Policy: script-src 'nonce-rAnd0mString';
Cenário Aprovado: Fallback via default-src seguro (sem script-src explícito, o default-src é obedecido):
Content-Security-Policy: default-src 'self';
Cenário Reprovado: Uso de 'unsafe-inline' — qualquer script embutido no HTML será executado, anulando a proteção contra XSS:
Content-Security-Policy: script-src 'self' *.trusted.example https://trusted.example 'unsafe-inline';
Cenário Reprovado: Uso de https: genérico — permite scripts de qualquer site com HTTPS, inclusive domínios controlados por atacantes:
Content-Security-Policy: script-src https:;