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

La empresa Vimeo ha publicado nuevo lanzamiento del analizador estático Psalm 3.12, que permite identificar tanto errores evidentes como difíciles de detectar en el código en PHP, así como corregir automáticamente ciertos tipos de errores. El sistema es adecuado para detectar problemas tanto en código obsoleto como en código que utiliza características modernas introducidas en nuevas versiones de PHP. El código del proyecto está escrito en PHP y se distribuye bajo licencia MIT.

Psalm identifica la mayoría de los problemas relacionados con el uso incorrecto de los tipos, así como diversos errores típicos. Por ejemplo, se soporta la emisión de advertencias sobre la mezcla en una expresión de variables con diferentes tipos, así como comprobaciones lógicas incorrectas (como «if ($a && $a) {}», «if ($a && !$a) {}» y «if ($a) {} elseif ($a) {}»), y la inicialización incompleta de propiedades de objeto. El analizador se ejecuta en modo multihilo. Es posible realizar comprobaciones incrementales, donde solo se analizan los archivos que han cambiado desde la última verificación.

Además, se proporcionan herramientas de programación segura que permiten utilizar anotaciones en formato Docblock («/** @var Type */») para proporcionar información sobre los tipos de variables, valores devueltos, parámetros de funciones y propiedades de objetos. También se soporta la definición de patrones de uso de tipos y la aplicación de expresiones assert. Por ejemplo:

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

/** @var string $a */
echo strpos($a, 'hello');

/** @psalm-assert-if-true B $a */
function isValidB(A $a) : bool {
return $a instanceof B && $a->isValid();
}

Para automatizar la corrección de los problemas encontrados, se proporciona la utilidad Psalter, que soporta plugins y permite solucionar problemas típicos en el código, agregar anotaciones sobre tipos, así como realizar maniobras como mover clases de un espacio de nombres a otro, mover métodos entre clases, renombrar clases y métodos.

En el nuevo lanzamiento de Psalm se ha implementado la opción «—taint-analysis», que permite rastrear la relación entre los parámetros de entrada recibidos del usuario (por ejemplo, $_GET['name']) y su uso en lugares que requieren la escapatoria de caracteres (por ejemplo, echo «<h1>$name</h1>»), incluyendo el seguimiento de cadenas de asignaciones intermedias y llamadas a funciones. Se consideran fuentes de datos potencialmente peligrosos el uso de arrays asociativos $_GET, $_POST y $_COOKIE, pero también es posible y definición fuentes propias. Dentro de las acciones que requieren seguimiento de escape, se consideran las operaciones de salida que generan contenido en formato HTML, la adición de encabezados HTTP o la ejecución de consultas SQL.

La verificación se aplica al utilizar funciones como echo, exec, include y header. Al analizar la necesidad de escape, se consideran tipos de datos como texto, cadenas SQL, HTML y código Shell, así como cadenas con parámetros de autenticación. El modo propuesto permite identificar vulnerabilidades en el código que conducen a ataques de scripting entre sitios (XSS) o inyección de código SQL.

También se puede destacar el comienzo pruebas alfa de la nueva rama de PHP 8.0. El lanzamiento está programado para el 26 de noviembre. Se esperan novedades en la nueva rama como: novedades, como:

  • Activación del compilador JIT, cuyo uso permitirá aumentar el rendimiento.
  • Soporte tipos unión, que definen colecciones de dos o más tipos (por ejemplo «public function foo(Foo|Bar $input): int|float;»).
  • Soporte atributos (anotaciones), que permiten vincular metadatos (por ejemplo, información sobre tipos) a clases sin utilizar la sintaxis de Docblock.
  • Sintaxis abreviada para la definición de clases, que permite combinar la definición del constructor y las propiedades.
  • Nuevo tipo de valores de retorno — static.
  • Nuevo tipo — mixed, que se puede usar para definir la recepción de parámetros de función con diferentes tipos.
  • Expresión throw para el manejo de excepciones.
  • WeakMap para crear objetos que se pueden recolectar con el recolector de basura (por ejemplo, para almacenar cachés opcionales).
  • Posibilidad de usar la expresión «::class» para objetos (análogo a la llamada a get_class()).
  • Posibilidad definición en el bloque catch de excepciones no vinculadas a variables.
  • Posibilidad omitir la coma después del último elemento en la lista de parámetros de la función.
  • Nueva interfaz Stringable para identificar cualquier tipo de cadena o datos que se puedan convertir a una cadena (para los que está disponible el método __toString()).
  • Nueva función str_contains(), análogo simplificado de strpos para determinar la inclusión de una subcadena, así como las funciones str_starts_with() y str_ends_with() para verificar coincidencias al inicio y al final de una cadena.
  • Se agregó la función fdiv(), que realiza la operación de división sin generar un error en caso de división por cero.
  • Se cambió la lógica de concatenación de cadenas. Por ejemplo, la expresión ‘echo «sum: » . $a + $b’ anteriormente se interpretaba como ‘echo («sum: » . $a) + $b’, mientras que en PHP 8 se procesará como ‘echo «sum: » . ($a + $b)’.
  • Se intensificó la verificación de operaciones aritméticas y bit a bit, por ejemplo, las expresiones «[] % [42]» y «$object + 4» generarán un error.
  • Se implementó un algoritmo de ordenamiento estable, donde se conserva el orden de aparición de valores idénticos en distintas ejecuciones.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster