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 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 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 outros. erros típicosPor 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 usar anotações em formato Bloco de documentos ("/** @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 permite 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 implementado 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 definição 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 começar 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: inovaçõesComo:

  • Ativando compilador JITcuja utilização melhorará a produtividade.
  • Suporte tipos de união, definindo coleções de dois ou mais tipos (por exemplo, "public function foo(Foo|Bar $input): int|float;").
  • Suporte atributos (anotações) que permitem anexar metadados (como informações de tipo) às classes sem usar a sintaxe Docblock.
  • Sintaxe abreviada Definições de classe que permitem combinar a definição de um construtor com propriedades.
  • Novo tipo de retorno - estático.
  • Novo tipo - misto, que pode ser usado para determinar se uma função aceita parâmetros de tipos diferentes.
  • Expressão jogar Para lidar com exceções.
  • Mapa fraco Criar objetos que possam ser descartados durante a coleta de lixo (por exemplo, para armazenar caches desnecessários).
  • Oportunidade usando a expressão "::class" para objetos (semelhante 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 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 str_contains(), 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 fdiv(), que realiza a operação de divisão sem gerar erro em caso de divisão por zero.
  • Mudado 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)'.
  • Apertado 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.
  • Implementado Um algoritmo de ordenação estável que mantém a ordem de valores idênticos em diferentes execuções.

Fonte: opennet.ru

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