Lanzamiento de Psalm 3.12, un analizador estático para el lenguaje PHP. Versión alfa de PHP 8.0

empresa vimeo опубликовала nueva versión del analizador estático Salmo 3.12, que le permite identificar errores obvios y sutiles en el código PHP, así como corregir automáticamente algunos tipos de errores. El sistema es adecuado para identificar problemas tanto en código heredado como en código que utiliza características modernas introducidas en nuevas ramas de PHP. El código del proyecto está escrito en PHP y distribuido por bajo la licencia del MIT.

El Salmo identifica la mayoría de los problemas asociados con el uso incorrecto de tipos, así como varios errores típicos. Por ejemplo, admite advertencias sobre la combinación de variables de diferentes tipos en una expresión, pruebas lógicas incorrectas (como “if ($a && $a) {}”, “if ($a && !$a) {}” y “ if ( $a) {} elseif ($a) {}"), inicialización incompleta de las propiedades del objeto. El analizador se ejecuta en modo multiproceso. Es posible realizar análisis incrementales, que analizan sólo los archivos que han cambiado desde el último análisis.

Además, se proporcionan herramientas de programación seguras para permitir utilizar anotaciones en el formato bloque de documentos (“/** @var Type */”) para proporcionar información sobre tipos de variables, valores de retorno, parámetros de funciones y propiedades de objetos. También se admite la definición de patrones de uso de tipos y el uso de declaraciones de afirmación. Por ejemplo:

/** @var cadena|nulo */
$a = foo();

/** @var cadena $a */
echo strpos($a, 'hola');

/** @salmo-afirmar-si-verdadero B $a */
la función esValidB(A $a): bool {
return $una instancia de B && $a->isValid();
}

Para automatizar la eliminación de problemas encontrados, se proporciona la utilidad Psalter, que admite complementos y permite solucionar problemas comunes de código, agregar anotaciones de tipo y realizar manipulaciones como mover clases de un espacio de nombres a otro, mover métodos entre clases y cambiar el nombre de clases y métodos.

En la nueva edición de Salmo implementado la opción "--taint-analysis" le permite rastrear la relación entre los parámetros de entrada recibidos del usuario (por ejemplo, $_GET['nombre']) y su uso en lugares que requieren caracteres de escape (por ejemplo, echo " $nombre "), incluso a través de cadenas de seguimiento de asignaciones intermedias y llamadas a funciones. El uso de matrices asociativas $_GET, $_POST y $_COOKIE se considera fuente de datos potencialmente peligrosos, pero también es posible definición fuentes propias. Las acciones que requieren escapar del seguimiento incluyen operaciones de salida que generan contenido HTML, agregan encabezados HTTP o ejecutan consultas SQL.

La validación se utiliza cuando se utilizan funciones como echo, exec, include y header. Al analizar la necesidad de escape, se tienen en cuenta tipos de datos como texto, cadenas con código SQL, HTML y Shell, cadenas con parámetros de autenticación. El modo propuesto le permite identificar vulnerabilidades en el código que conducen a secuencias de comandos entre sitios (XSS) o sustitución de SQL.

Adicionalmente, se puede señalar iniciar Prueba alfa de la nueva rama PHP 8.0. El lanzamiento está previsto para el 26 de noviembre. En la nueva sucursal se espera lo siguiente: innovacionescomo

  • Включение compilador JIT, cuyo uso mejorará la productividad.
  • Apoyar tipos de unión, definiendo colecciones de dos o más tipos (por ejemplo, “función pública foo(Foo|Bar $input): int|float;”).
  • Apoyar atributos (anotaciones) que le permiten vincular metadatos (como información de tipo) a clases sin utilizar la sintaxis de Docblock.
  • Sintaxis abreviada definiciones de clase, lo que le permite combinar la definición de un constructor y propiedades.
  • Nuevo tipo de devolución - estático.
  • Nuevo tipo - mezclado, que se puede utilizar para determinar si una función acepta parámetros de diferentes tipos.
  • Expresión lanzar para manejar excepciones.
  • Mapa débil para crear objetos que puedan sacrificarse durante la recolección de basura (por ejemplo, para almacenar cachés innecesarios).
  • Oportunidad usando la expresión “::class” para objetos (análoga a llamar a get_class()).
  • Oportunidad definiciones en el bloque catch de excepciones que no están vinculadas a variables.
  • Oportunidad dejando una coma después del último elemento en la lista de parámetros de la función.
  • Nuevas interferencias Encadenable para identificar cualquier tipo de cadena o datos que se puedan convertir en una cadena (para los cuales el método __toString() está disponible).
  • Nueva caracteristica str_contains (), un análogo simplificado de strpos para determinar la aparición de una subcadena, así como las funciones str_starts_with() y str_ends_with() para verificar coincidencias al principio y al final de una cadena.
  • Característica añadida fdiv(), que realiza una operación de división sin arrojar un error al dividir por cero.
  • Cambió Lógica de unión de cadenas. Por ejemplo, la expresión 'echo "suma:" . $a + $b' se interpretaba anteriormente como 'echo ("suma: " . $a) + $b', y en PHP 8 se tratará como 'echo "suma: " . ($a + $b)'.
  • Apretado comprobar operaciones aritméticas y de bits, por ejemplo, las expresiones "[] % [42]" y "$object + 4" dará como resultado un error.
  • Implementado un algoritmo de clasificación estable en el que el orden de valores idénticos se conserva en diferentes ejecuciones.

Fuente: opennet.ru

Añadir un comentario