Sortie de Psalm 3.12, un analyseur statique pour le langage PHP. Alpha de PHP 8.0

La société Vimeo a publié nouvelle version de l'analyseur statique Psalm 3.12, permettant de détecter à la fois les erreurs évidentes et difficiles à attraper dans le code PHP, ainsi que de corriger automatiquement certains types d'erreurs. Le système est adapté pour repérer les problèmes tant dans le code obsolète que dans celui utilisant les fonctionnalités modernes introduites dans les nouvelles versions de PHP. Le code du projet est écrit en PHP et est distribué sous licence MIT.

Psalm identifie la plupart des problèmes liés à une mauvaise utilisation des types, ainsi que divers erreurs typiques. Par exemple, il prend en charge la génération de messages d'avertissement concernant le mélange de variables de types différents dans une expression, des vérifications logiques incorrectes (comme «if ($a && $a) {}», «if ($a && !$a) {}» et «if ($a) {} elseif ($a) {}»), ainsi que l'initialisation incomplète des propriétés d'un objet. L'analyseur s'exécute en mode multithreading. Il est possible d'effectuer des vérifications incrémentales, où seuls les fichiers modifiés depuis la dernière vérification sont analysés.

Il offre également des outils de programmation sécurisée, permettant d'utiliser des annotations au format Docblock («/** @var Type */») pour fournir des informations sur les types de variables, les valeurs de retour, les paramètres des fonctions, et les propriétés des objets. Il prend également en charge la définition de modèles d'utilisation des types et l'application d'expressions assert. Par exemple :

/** @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();
}

Pour automatiser la correction des problèmes identifiés, un utilitaire appelé Psalter est fourni, qui prend en charge les plugins et d'installer réparer les problèmes de typage dans le code, ajouter des annotations de type, ainsi qu'effectuer des manipulations telles que le déplacement de classes d'un espace de noms à un autre, le déplacement de méthodes entre des classes, le renommage de classes et de méthodes.

Dans la nouvelle version de Psalm réalisée l'option «—taint-analysis», permettant de suivre le lien entre les paramètres d'entrée fournis par l'utilisateur (par exemple, $_GET[‘name’]) et leur utilisation dans des endroits nécessitant l'échappement de caractères (par exemple, echo «<h1>$name</h1>»), y compris à travers le suivi des chaînes d'affectations intermédiaires et des appels de fonctions. Les sources de données potentiellement dangereuses incluent l'utilisation de tableaux associatifs $_GET, $_POST et $_COOKIE, mais cela peut également être définition les propres sources. Parmi les actions nécessitant un suivi de l'échappement, on trouve les opérations de sortie qui conduisent à la génération de contenu au format HTML, l'ajout d'en-têtes HTTP ou l'exécution de requêtes SQL.

La vérification est appliquée lors de l'utilisation de fonctions telles que echo, exec, include et header. Lors de l'analyse de la nécessité d'échapper, les types de données tels que texte, chaînes SQL, HTML et code Shell, ainsi que les chaînes avec des paramètres d'authentification sont pris en compte. Le mode proposé permet d'identifier les vulnérabilités dans le code qui mènent au cross-site scripting (XSS) ou à l'injection de code SQL.

Il convient également de noter le début tests alpha de la nouvelle branche PHP 8.0. La sortie est prévue pour le 26 novembre. Dans la nouvelle branche, on attend des nouveautés, tels que :

  • l'inclusion du compilateur JIT, dont l'application permettra d'améliorer la performance.
  • Support types d'union, définissant des collections de deux types ou plus (par exemple «public function foo(Foo|Bar $input): int|float;»).
  • Support attributs (annotations), permettant d'associer des métadonnées (par exemple, des informations sur les types) aux classes sans utiliser la syntaxe Docblock.
  • Une syntaxe abrégée pour la définition des classes, permettant de combiner la définition du constructeur et des propriétés.
  • Un nouveau type de valeur de retour — static.
  • Le nouveau type — mixed, qui peut être utilisé pour définir les paramètres d'une fonction acceptant différents types.
  • Expression throw pour la gestion des exceptions.
  • WeakMap pour créer des objets qui peuvent être collectés par le ramasse-miettes (par exemple, pour stocker des caches optionnels).
  • Possibilité l'utilisation de l'expression «::class» pour les objets (équivalent de l'appel à get_class()).
  • Possibilité les définitions dans un bloc catch d'exceptions non liées à des variables.
  • Possibilité laisser une virgule après le dernier élément d'une liste de paramètres de fonction.
  • Nouvelle interface Stringable pour identifier tous les types ou données de chaîne pouvant être convertis en chaîne (pour lesquels la méthode __toString() est disponible).
  • La nouvelle fonction str_contains(), un équivalent simplifié de strpos pour déterminer la présence d'une sous-chaîne, ainsi que les fonctions str_starts_with() et str_ends_with() pour vérifier les correspondances au début et à la fin d'une chaîne.
  • Une fonction a été ajoutée fdiv(), effectuant une opération de division sans émettre d'erreur en cas de division par zéro.
  • La logique de concaténation de chaînes a été modifiée. Par exemple, l'expression ‘echo «sum: » . $a + $b’ était précédemment interprétée comme ‘echo («sum: » . $a) + $b’, tandis qu’en PHP 8, elle sera traitée comme ‘echo «sum: » . ($a + $b)’. vérification des opérations arithmétiques et bit à bit, par exemple, les expressions «[] % [42]» et «$object + 4» entraîneront une erreur.
  • Renforcement un algorithme de tri stable, dans lequel l'ordre des valeurs identiques est préservé lors de différentes exécutions.
  • l'opérateur de séquence optionnelle стабильный алгоритм сортировки, в котором при разных запусках сохраняется порядок следования одинаковых значений.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster