Usando Content Security Policy (CSP) para proteger aplicações PHP

Métodos para implementar Content Security Policy (CSP) no PHP, evitando ataques de injeção de scripts maliciosos e reforçando a segurança da aplicação.

Introdução

O Content Security Policy (CSP) é um mecanismo de segurança que protege aplicações web contra ataques como Cross-Site Scripting (XSS) e injeção de código malicioso. Ele permite definir quais fontes de conteúdo podem ser carregadas pela aplicação, reduzindo a superfície de ataque.

1. Como funciona o CSP?

O CSP é implementado através de um cabeçalho HTTP que instrui o navegador sobre quais recursos podem ser carregados. Com ele, podemos restringir scripts externos, bloquear injeções de código e limitar o carregamento de imagens, estilos e fontes.

2. Configurando CSP no PHP

Podemos definir uma política de segurança no cabeçalho HTTP com header():

header("Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.google.com; style-src 'self' https://fonts.googleapis.com;");

Explicação dos parâmetros:

  • default-src 'self': Permite carregar apenas recursos do próprio domínio.
  • script-src 'self' https://apis.google.com: Permite carregar scripts do próprio site e da API do Google.
  • style-src 'self' https://fonts.googleapis.com: Restringe estilos a fontes confiáveis.

Isso impede que scripts externos maliciosos sejam executados na aplicação.

3. Modos de implementação do CSP

Podemos aplicar o CSP de diferentes formas:

3.1. Modo apenas de relatório (Report-Only)

Esse modo permite testar a política antes de aplicá-la de forma restritiva:

header("Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint.php");

Isso gera relatórios de violações sem bloquear os recursos.

3.2. Implementação completa

Quando tivermos certeza de que a política não afeta funcionalidades importantes, aplicamos a política definitiva:

header("Content-Security-Policy: default-src 'self';");

4. Monitorando violações do CSP

Podemos capturar e analisar tentativas de violações definindo um endpoint para relatórios:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $dados = file_get_contents("php://input");
    file_put_contents("csp_violations.log", $dados . "\n", FILE_APPEND);
}

Isso permite identificar tentativas de ataque e ajustar a política conforme necessário.

Conclusão

A implementação do CSP no PHP melhora significativamente a segurança contra ataques XSS e injeção de scripts maliciosos. Ao restringir fontes de conteúdo confiáveis, reduzimos as chances de execução de código não autorizado e protegemos os usuários contra ameaças externas.

A implementação de Content Security Policy (CSP) é uma das melhores estratégias para mitigar ataques baseados em injeção de código, como Cross-Site Scripting (XSS). Sem CSP, um invasor pode explorar falhas na aplicação para injetar scripts maliciosos que roubam informações do usuário ou manipulam a interface do site.

Ao configurar corretamente a política de segurança, conseguimos restringir quais fontes externas podem ser carregadas na aplicação. Isso impede que scripts não autorizados sejam executados, mesmo que um atacante tente inseri-los via formulários ou requisições externas.

Outro benefício do CSP é que ele permite um modo de relatório, onde podemos monitorar possíveis violações antes de aplicarmos a política restritiva. Isso ajuda na adaptação do CSP sem comprometer funcionalidades legítimas da aplicação.

Algumas aplicações:

  • Proteger contra ataques de *Cross-Site Scripting* (XSS).
  • Impedir o carregamento de scripts maliciosos na aplicação.
  • Reduzir a superfície de ataque limitando fontes externas confiáveis.
  • Monitorar e detectar tentativas de violação de segurança.

Dicas para quem está começando

  • Comece aplicando CSP no modo Report-Only para monitorar violações antes de bloquear recursos.
  • Use default-src 'self' para restringir carregamentos a fontes confiáveis.
  • Defina regras específicas para script-src, style-src e img-src conforme necessário.
  • Evite unsafe-inline e unsafe-eval, pois essas diretivas enfraquecem a proteção do CSP.
  • Monitore violações do CSP usando um endpoint para coletar relatórios de segurança.

Contribuições de Renata Oliveira

Compartilhe este tutorial: Como usar Content Security Policy (CSP) para aumentar a segurança em aplicações PHP?

Compartilhe este tutorial

Continue aprendendo:

Como garantir que apenas arquivos permitidos sejam carregados no PHP?

Métodos para restringir uploads de arquivos no PHP, garantindo que apenas formatos seguros sejam aceitos e protegendo o servidor contra ameaças.

Tutorial anterior

Como evitar ataques de negação de serviço (DoS) em aplicações PHP?

Métodos eficazes para mitigar ataques de negação de serviço (DoS) em PHP, protegendo o desempenho e a disponibilidade da aplicação.

Próximo tutorial