O que é Psalm 7

Psalm 7 é uma versão do analisador estático Psalm para projetos PHP. A ferramenta verifica tipos, identifica código morto e rastreia dados controlados pelo usuário até pontos perigosos.

A versão foi anunciada em 2 de novembro de 2026 pela equipe do projeto. O lançamento combina análise de tipos, análise de segurança e detecção de código morto em uma mesma execução.

O objetivo é encontrar defeitos antes da produção e transformar parte da revisão de segurança em uma checagem repetível no Composer ou no CI.

Como funciona

O Psalm lê o código PHP, o autoload do Composer e a configuração para construir relações entre funções, métodos e classes.

Na análise de segurança, acompanha a origem de um dado até um destino. Uma entrada de $_GET pode seguir por funções, closures, geradores e parâmetros por referência.

O Psalm 7 também usa um grafo de referências para localizar código inacessível, inclusive ciclos de classes que não são alcançados por um ponto de entrada.

vendor/bin/psalm --no-cache

Principais recursos

A análise de taint fica ativada por padrão e roda junto com tipos e código morto. Os resultados de segurança usam a severidade SECURITY e podem ser exportados em SARIF.

O rastreamento ganhou fontes e destinos para NoSQL, prompt injection em LLMs, componentes de URL, php://input, arquivos enviados, $_SERVER e $_FILES.

Há também um modelo de pureza baseado em capacidades. Funções podem declarar efeitos como acesso a globais, escrita de propriedades, entrada e saída ou uso de tempo.

  • Detecção de código morto baseada em grafo.
  • Valores padrão para templates genéricos.
  • Suporte a PHP 8.5 e 8.6 citado no anúncio.
  • Plugins oficiais para PHPUnit, Symfony, Laravel, Mockery e sabre/event.

Como começar: instalação passo a passo

O caminho indicado é atualizar a dependência de desenvolvimento pelo Composer. Antes, confira a versão do PHP e faça a execução em um branch.

O anúncio informa suporte a PHP 8.2 até 8.6 em ambientes 64-bit. Revise o guia de atualização se o projeto usa plugins ou configurações próprias.

Depois da instalação, registre a saída e ajuste a configuração apenas para decisões conscientes, como manter ou desligar a análise de taint.

composer require --dev vimeo/psalm:^7.0 -W
vendor/bin/psalm --init
vendor/bin/psalm
Atenção
Atenção

O upgrade pode revelar novos avisos porque a análise de segurança passa a rodar por padrão. Faça a triagem antes de bloquear o pipeline.

Exemplo prático

Considere uma aplicação que recebe um comando por parâmetro HTTP e o envia diretamente para um processo. O analisador pode mostrar o caminho entre a entrada externa e a chamada sensível.

O exemplo é propositalmente inseguro e não deve ser copiado para produção. A utilidade está em observar a entrada atravessando uma closure até shell_exec.

<?php
$run = function (string $command): void {
    shell_exec($command);
};
$run((string) $_GET['cmd']);

A correção depende do produto. Em muitos casos, a melhor saída é trocar comandos livres por uma lista fechada de ações e parâmetros validados.

Comparação com alternativas

O Psalm atua na análise estática e pode ser usado ao lado de testes unitários, integração e ferramentas de estilo. Ele não substitui um scanner de dependências.

O PHPStan é uma alternativa conhecida para tipos. PHPUnit verifica comportamento em cenários executados, enquanto scanners de dependências procuram riscos conhecidos em pacotes.

O ponto forte do Psalm 7 é combinar tipos, taint e código morto no mesmo fluxo, com recursos específicos para caminhos de dados e contratos de pureza.

Pontos positivos e limitações

Entre os pontos positivos estão a análise de segurança padrão, o rastreamento profundo, stubs de bibliotecas e uma imagem Docker oficial.

O modelo de capacidades melhora a documentação e ajuda a evitar que uma função declarada como pura faça operações de entrada e saída.

A limitação é que análise estática não entende sozinha toda a regra de negócio. Código dinâmico pode exigir stubs, anotações e revisão humana.

Casos de uso reais

Em uma API PHP, o Psalm pode rastrear dados de requisições até consultas, chamadas HTTP e montagem de URLs, ajudando a localizar validações ausentes.

Em um monólito Laravel ou Symfony, a análise de código morto pode indicar classes que ficaram para trás depois de uma migração. Confirme rotas e comandos antes de remover algo.

Em bibliotecas reutilizáveis, templates com valores padrão facilitam a evolução dos tipos. Em pipelines de CI, o SARIF pode alimentar a revisão de segurança do repositório.

Dicas e boas práticas

Pro
Pro tip

Separe a atualização da ferramenta da correção dos avisos para revisar o impacto do upgrade.

Dica
Dica

Use stubs oficiais ou revisados para bibliotecas importantes. O mapa de tipos influencia a utilidade dos avisos.

Cuidado
Cuidado

Não transforme toda supressão em solução. Registre o motivo e reavalie quando o código mudar.

Para começar no CI, execute em modo informativo, guarde o relatório e escolha poucos problemas para impedir o merge.

Vale a pena?

Psalm 7 vale a pena para times PHP que querem unir tipos, segurança e limpeza de código em uma ferramenta.

Ele não é uma solução completa de segurança e não elimina testes, revisão ou validação de dependências.

O próximo passo é instalar em um branch, separar os achados por risco e transformar as correções importantes em uma etapa permanente do CI.