Lanzamento de Psalm 3.12, un analizador estático para a linguaxe PHP. Versión alfa de PHP 8.0

Compañía Vimeo publicado nova versión do analizador estático Sal 3.12, que permite identificar erros tanto obvios como sutís no código PHP, así como corrixir automaticamente algúns tipos de erros. O sistema é axeitado para identificar problemas tanto no código legado como no código que utiliza funcións modernas introducidas nas novas ramas de PHP. O código do proxecto está escrito en PHP e distribuído por baixo a licenza MIT.

O salmo identifica a maioría dos problemas asociados ao uso incorrecto do tipo, así como varios erros típicos. Por exemplo, admite avisos sobre a mestura de variables de diferentes tipos nunha expresión, probas lóxicas incorrectas (como "se ($a && $a) {}", "se ($a && !$a) {}" e " if ($a) {} elseif ($a) {}"), inicialización incompleta das propiedades do obxecto. O analizador funciona en modo multiproceso. É posible realizar exploracións incrementais, que analizan só os ficheiros que cambiaron desde a última exploración.

Ademais, ofrécense ferramentas de programación seguras para permitir uso anotacións no formato Docblock (“/** @var Tipo */”) para proporcionar información sobre tipos de variables, valores de retorno, parámetros de funcións e propiedades do obxecto. Tamén se admite a definición de patróns de uso de tipos e o uso de declaracións assert. Por exemplo:

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

/** @var cadea $a */
echo strpos($a, 'ola');

/** @salmo-afirmar-se-verdadero B $a */
función isValidB(A $a): bool {
devolve $a instancia de B && $a->isValid();
}

Para automatizar a eliminación dos problemas atopados, ofrécese a utilidade Psalter, que admite complementos e permite resolver problemas de código comúns, engadir anotacións de tipos e realizar manipulacións como mover clases dun espazo de nomes a outro, mover métodos entre clases e renomear clases e métodos.

No novo número do Salmo implementado a opción "--taint-analysis" permítelle rastrexar a relación entre os parámetros de entrada recibidos do usuario (por exemplo, $_GET['nome']) e o seu uso en lugares que requiren escape de caracteres (por exemplo, echo " $nome "), incluíndo a través de cadeas de seguimento de asignacións intermedias e chamadas de funcións. O uso de matrices asociativas $_GET, $_POST e $_COOKIE considérase como fontes de datos potencialmente perigosos, pero tamén é posible determinación de fontes propias. As accións que requiren escapar do seguimento inclúen operacións de saída que xeran contido HTML, engaden cabeceiras HTTP ou executan consultas SQL.

A validación úsase cando se usan funcións como echo, exec, include e header. Ao analizar a necesidade de escapar téñense en conta tipos de datos como texto, cadeas con código SQL, HTML e Shell, cadeas con parámetros de autenticación. O modo proposto permítelle identificar vulnerabilidades no código que levan a cross-site scripting (XSS) ou substitución de SQL.

Ademais, pódese sinalar comezar proba alfa da nova rama PHP 8.0. O lanzamento está previsto para o 26 de novembro. Na nova sucursal espérase o seguinte: innovaciónscomo:

  • Acender Compilador JIT, cuxo uso mellorará a produtividade.
  • Apoiar tipos de sindicatos, definindo coleccións de dous ou máis tipos (por exemplo, “función pública foo(Foo|Bar $input): int|float;”).
  • Apoiar atributos (anotacións) que che permiten vincular metadatos (como información de tipo) a clases sen usar a sintaxe de Docblock.
  • Sintaxe acurtada definicións de clases, o que lle permite combinar a definición dun construtor e propiedades.
  • Novo tipo de devolución - estático.
  • Novo tipo - mixto, que se pode usar para determinar se unha función acepta parámetros de diferentes tipos.
  • Expresión xogar para xestionar excepcións.
  • Mapa débil para crear obxectos que se poidan sacrificar durante a recollida de lixo (por exemplo, para almacenar cachés innecesarios).
  • Oportunidade usando a expresión "::class" para obxectos (análogo a chamar get_class()).
  • Oportunidade definicións no bloque catch de excepcións que non están vinculadas a variables.
  • Oportunidade deixando unha coma despois do último elemento da lista de parámetros da función.
  • Nova interface Cordable para identificar calquera tipo de cadea ou dato que se poida converter nunha cadea (para o que está dispoñible o método __toString()).
  • Nova característica str_contain(), un análogo simplificado de strpos para determinar a aparición dunha subcadea, así como as funcións str_starts_with() e str_ends_with() para comprobar as coincidencias ao comezo e ao final dunha cadea.
  • Función engadida fdiv(), que realiza unha operación de división sen producir un erro ao dividir entre cero.
  • Cambiado lóxica de unión de cadeas. Por exemplo, a expresión 'echo "sum:" . $a + $b' interpretouse anteriormente como 'eco ("suma: " . $a) + $b', e en PHP 8 tratarase como "eco "suma: " . ($a + $b)'.
  • Apretado comprobando operacións aritméticas e de bits, por exemplo, as expresións "[] % [42]" e "$obxecto + 4" producirán un erro.
  • Implementado un algoritmo de clasificación estable no que se conserva a orde de valores idénticos en diferentes execucións.

Fonte: opennet.ru

Engadir un comentario