Lançamento do Psalm 3.12, um analisador estático para a linguagem PHP. Versão alfa do PHP 8.0

Empresa Vimeo publicou nova versão do analisador estático Psalm 3.12, que permite identificar tanto erros óbvios quanto sutis no código em PHP, além de corrigir automaticamente alguns tipos de erros. O sistema é adequado para detectar problemas tanto em código legado quanto em código que utiliza recursos modernos introduzidos nas novas versões do PHP. O código do projeto é escrito em PHP e é distribuído sob a licença MIT.

Psalm identifica a maioria dos problemas relacionados ao uso incorreto de tipos, além de diversos erros comuns. Por exemplo, suporta a emissão de avisos sobre a mistura de variáveis de diferentes tipos em uma expressão, verificações lógicas incorretas (como "if ($a && $a) {}", "if ($a && !$a) {}" e "if ($a) {} elseif ($a) {}"), e inicialização incompleta de propriedades de objeto. O analisador é executado em modo multithread. É possível realizar verificações incrementais, onde apenas os arquivos que mudaram desde a última verificação são analisados.

Além disso, fornece ferramentas de programação segura, permitindo utilizados anotações no formato Docblock ("/** @var Type */") para fornecer informações sobre tipos de variáveis, valores de retorno, parâmetros de funções e propriedades de objetos. Também suporta a definição de padrões de uso de tipos e a aplicação de expressões assert. Por exemplo:

/** @var string|null */
$a = foo();

/** @var string $a */
echo strpos($a, 'hello');

/** @psalm-assert-if-true B $a */
function isValidB(A $a) : bool {
return $a instanceof B && $a->isValid();
}

Para automatizar a correção dos problemas encontrados, é fornecida a ferramenta Psalter, que suporta plugins e permite corrige problemas típicos no código, adiciona anotações de tipo e também faz manipulações como mover classes de um namespace para outro, mover métodos entre classes, renomear classes e métodos.

Na nova versão do Psalm são implementadas a opção «—taint-analysis», que permite rastrear a relação entre os parâmetros de entrada recebidos do usuário (por exemplo, $_GET[‘name’]) e seu uso em locais que exigem a escape de caracteres (por exemplo, echo «<h1>$name</h1>»), incluindo o rastreamento de cadeias de atribuições intermediárias e chamadas de funções. Como fontes de dados potencialmente perigosos, considera-se o uso de arrays associativos $_GET, $_POST e $_COOKIE, mas também é possível definição fontes próprias. Dentre as ações que requerem acompanhamento da escapagem, estão as operações de saída que resultam na formação de conteúdo em formato HTML, adição de cabeçalhos HTTP ou execução de consultas SQL.

A verificação é aplicada ao usar funções como echo, exec, include e header. Ao analisar a necessidade de escape, são considerados tipos de dados como texto, strings SQL, HTML e código Shell, além de strings com parâmetros de autenticação. O modo proposto permite identificar vulnerabilidades no código que podem levar a ataques de cross-site scripting (XSS) ou injeção de código SQL.

Adicionalmente, pode-se destacar início beta de testes de uma nova versão do PHP 8.0. O lançamento está previsto para 26 de novembro. Espera-se que nesta nova versão haja novidades, como:

  • Ativação do compilador JIT, cuja implementação permitirá aumentar o desempenho.
  • Suporte tipos de união, que definem coleções de dois ou mais tipos (por exemplo «public function foo(Foo|Bar $input): int|float;»).
  • Suporte atributos (anotações), que permitem vincular metadados (por exemplo, informações sobre tipos) a classes sem usar a sintaxe Docblock.
  • Sintaxe reduzida para definição de classes, permitindo combinar a definição do construtor e das propriedades.
  • Novo tipo de valores de retorno — static.
  • Novo tipo — mixed, que pode ser usado para definir como a função recebe parâmetros de diferentes tipos.
  • Expressão throw para tratamento de exceções.
  • WeakMap para criação de objetos que podem ser descartados durante a coleta de lixo (por exemplo, para armazenamento de caches opcionais).
  • Possibilidade uso da expressão «::class» para objetos (semelhante à chamada get_class()).
  • Possibilidade definição em bloco catch de exceções não vinculadas a variáveis.
  • Possibilidade deixar a vírgula após o último elemento na lista de parâmetros da função.
  • Uma nova interface Stringable para identificação de quaisquer tipos de string ou dados que podem ser convertidos em string (para os quais o método __toString() está disponível).
  • Nova função str_contains(), um análogo simplificado de strpos para determinar a ocorrência de uma substring, assim como as funções str_starts_with() e str_ends_with() para verificar correspondências no início e no final da string.
  • Adicionada a função fdiv(), realizando a operação de divisão sem gerar erro em caso de divisão por zero.
  • Alterado a lógica de concatenação de strings. Por exemplo, a expressão ‘echo «soma: » . $a + $b’ antes era interpretada como ‘echo («soma: » . $a) + $b’, enquanto que no PHP 8 será processada como ‘echo «soma: » . ($a + $b)’.
  • O checagem de operações aritméticas e bitwise, como as expressões ‘[] % [42]’ e ‘$object + 4’ gerando erro.
  • o operador de sequência opcional algoritmo de ordenação estável, onde a ordem de valores iguais é mantida entre execuções diferentes.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster