Empresa Vimeo nova versão do analisador estático , que identifica erros óbvios e sutis em código PHP, além de corrigir automaticamente certos tipos de erros. O sistema é adequado para identificar problemas tanto em código legado quanto em código que utiliza recursos modernos introduzidos em versões mais recentes do PHP. O código do projeto é escrito em PHP e sob a licença do MIT.
O Salmo identifica a maioria dos problemas associados ao uso incorreto de tipos, bem como vários outros. Por exemplo, são suportados avisos para mistura de variáveis de tipos diferentes em expressões, verificações lógicas incorretas (como "if ($a && $a) {}", "if ($a && !$a) {}" e "if ($a) {} elseif ($a) {}") e inicialização incompleta de propriedades de objetos. O analisador é executado em modo multithread. É possível realizar verificações incrementais, que analisam apenas os arquivos que foram alterados desde a verificação anterior.
Além disso, são fornecidas ferramentas de programação seguras para permitir anotações em formato ("/** @var Tipo */") para fornecer informações sobre tipos de variáveis, valores de retorno, parâmetros de função e propriedades de objetos. Também permite definir padrões de uso de tipos e usar expressões de asserção. Por exemplo:
/** @var string|null */
$a = foo();
/** @var string $a */
echo strpos($a, 'olá');
/** @psalm-assert-if-true B $a */
função isValidB(A $a) : bool {
retorna $a instanceof B && $a->isValid();
}
Para automatizar a resolução dos problemas encontrados, é fornecido o utilitário Psalter, que suporta plugins e Corrigir problemas comuns no 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 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 caracteres de escape (por exemplo, echo " $nome ”), inclusive rastreando cadeias de atribuições intermediárias e chamadas de função. O uso de arrays associativos $_GET, $_POST e $_COOKIE é considerado como fonte de dados potencialmente perigosos, mas também é possível fontes próprias. As ações que exigem a suspensão do monitoramento incluem operações de saída que geram conteúdo HTML, adicionam cabeçalhos HTTP ou executam consultas SQL.
A validação é aplicada a funções como `echo`, `exec`, `include` e `header`. As considerações de escape incluem tipos de dados como texto, strings contendo SQL, HTML e shellcode, bem como strings contendo parâmetros de autenticação. Este modo identifica vulnerabilidades no código que poderiam levar a ataques de cross-site scripting (XSS) ou injeção de SQL.
Além disso, pode-se notar Teste alfa da nova versão do PHP 8.0. O lançamento está previsto para 26 de novembro. Espera-se que a nova versão apresente os seguintes recursos: Como:
- cuja utilização melhorará a produtividade.
- Suporte , definindo coleções de dois ou mais tipos (por exemplo, "public function foo(Foo|Bar $input): int|float;").
- Suporte (anotações) que permitem anexar metadados (como informações de tipo) às classes sem usar a sintaxe Docblock.
- Definições de classe que permitem combinar a definição de um construtor com propriedades.
- Novo tipo de retorno - .
- Novo tipo - , que pode ser usado para determinar se uma função aceita parâmetros de tipos diferentes.
- Expressão Para lidar com exceções.
- Criar objetos que possam ser descartados durante a coleta de lixo (por exemplo, para armazenar caches desnecessários).
- usando a expressão "::class" para objetos (semelhante a chamar get_class()).
- Definições no bloco catch de exceções que não estão vinculadas a variáveis.
- Deixando uma vírgula após o último elemento da lista de parâmetros da função.
- Nova interface Identificar quaisquer tipos de string ou dados que possam ser convertidos em uma string (para os quais o método __toString() esteja disponível).
- Novo recurso , uma versão simplificada de strpos para determinar a ocorrência de uma substring, e 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 , que realiza a operação de divisão sem gerar erro em caso de divisão por zero.
- Lógica de concatenação de strings. Por exemplo, a expressão 'echo "sum: " . $a + $b' era anteriormente interpretada como 'echo ("sum: " . $a) + $b', mas no PHP 8 será processada como 'echo "sum: " . ($a + $b)'.
- A verificação de operações aritméticas e bit a bit, por exemplo, as expressões "[] % [42]" e "$object + 4" resultarão em um erro.
- Um algoritmo de ordenação estável que mantém a ordem de valores idênticos em diferentes execuções.
Fonte: opennet.ru
