ProHoster > Blog > notícias da internet > Lançamento do Salmo 3.12, um analisador estático para a linguagem PHP. Versão alfa do PHP 8.0
Lançamento do Salmo 3.12, um analisador estático para a linguagem PHP. Versão alfa do PHP 8.0
Empresa Vimeo publicado nova versão do analisador estático Salmo 3.12, que permite identificar erros óbvios e sutis no código PHP, bem como corrigir automaticamente alguns tipos de erros. O sistema é adequado para identificar problemas tanto em código legado quanto em código que utiliza recursos modernos introduzidos em novos ramos do PHP. O código do projeto é escrito em PHP e distribuído por sob a licença do MIT.
O Salmo identifica a maioria dos problemas associados ao uso incorreto de tipos, bem como vários erros típicos. Por exemplo, ele suporta avisos sobre mistura de variáveis de diferentes tipos em uma expressão, testes lógicos incorretos (como “if ($a && $a) {}”, “if ($a && !$a) {}” e “ if ($a) {} elseif ($a) {}"), inicialização incompleta das propriedades do objeto. O analisador é executado no modo multithread. É possível realizar varreduras incrementais, que analisam apenas os arquivos que foram alterados desde a última varredura.
Além disso, são fornecidas ferramentas de programação seguras para permitir usar anotações no formato Docblock (“/** @var Type */”) para fornecer informações sobre tipos de variáveis, valores de retorno, parâmetros de função, propriedades de objetos. A definição de padrões de uso de tipo e o uso de instruções assert também são suportados. Por exemplo:
/** @var string|nulo */
$a = foo();
/** @var string $a */
echo strpos($a, 'olá');
/** @salmo-afirmar-se-verdadeiro B $a */
função éValidB(A $a): bool {
return $a instância de B && $a->isValid();
}
Para automatizar a eliminação dos problemas encontrados, é fornecido o utilitário Psalter, que suporta plugins e permite solucionar problemas comuns de código, adicionar anotações de tipo e realizar manipulações como mover classes de um namespace para outro, mover métodos entre classes e renomear classes e métodos.
Na nova edição do Salmo implementado a opção "--taint-análise" permite rastrear a relação entre os parâmetros de entrada recebidos do usuário (por exemplo, $_GET['nome']) e seu uso em locais que exigem escape de caracteres (por exemplo, echo " $nome "), inclusive por meio de cadeias de rastreamento de atribuições intermediárias e chamadas de função. O uso de arrays associativos $_GET, $_POST e $_COOKIE é considerado fonte de dados potencialmente perigosos, mas também é possível definição fontes próprias. As ações que exigem rastreamento de escape incluem operações de saída que geram conteúdo HTML, adicionam cabeçalhos HTTP ou executam consultas SQL.
A validação é usada ao usar funções como echo, exec, include e header. Ao analisar a necessidade de escape, são levados em consideração tipos de dados como texto, strings com código SQL, HTML e Shell, strings com parâmetros de autenticação. O modo proposto permite identificar vulnerabilidades no código que levam ao cross-site scripting (XSS) ou à substituição de SQL.
Além disso, pode-se notar começar teste alfa do novo branch PHP 8.0. O lançamento está previsto para 26 de novembro. O seguinte é esperado na nova filial: inovaçõesComo:
Mapa fraco para criar objetos que podem ser sacrificados durante a coleta de lixo (por exemplo, para armazenar caches desnecessários).
Oportunidade usando a expressão “::class” para objetos (análogo a chamar get_class()).
Oportunidade definições no bloco catch de exceções que não estão vinculadas a variáveis.
Oportunidade deixando uma vírgula após o último elemento da lista de parâmetros da função.
Nova interface Stringável para identificar quaisquer tipos de string ou dados que possam ser convertidos em uma string (para a qual o método __toString() está disponível).
Novo recurso str_contains (), um análogo simplificado de strpos para determinar a ocorrência de uma substring, bem como as funções str_starts_with() e str_ends_with() para verificar correspondências no início e no final de uma string.
Função adicionada fdiv(), que executa uma operação de divisão sem gerar erro ao dividir por zero.
Mudado lógica de junção de strings. Por exemplo, a expressão 'echo "sum:" . $a + $b' foi anteriormente interpretado como 'echo ("sum: " . $a) + $b', e no PHP 8 será tratado como 'echo "sum: " . ($a + $b)'.
Apertado verificar operações aritméticas e de bits, por exemplo, as expressões "[] % [42]" e "$object + 4" resultarão em erro.
Implementado um algoritmo de classificação estável no qual a ordem de valores idênticos é preservada em diferentes execuções.