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

Société Viméo опубликовала nouvelle version de l'analyseur statique Psaume 3.12, qui vous permet d'identifier les erreurs évidentes et subtiles dans le code PHP, ainsi que de corriger automatiquement certains types d'erreurs. Le système est adapté pour identifier les problèmes à la fois dans le code existant et dans le code utilisant des fonctionnalités modernes introduites dans les nouvelles branches de PHP. Le code du projet est écrit en PHP et distribué par sous licence MIT.

Psaume identifie la plupart des problèmes associés à une utilisation incorrecte des caractères, ainsi que divers erreurs typiques. Par exemple, il prend en charge les avertissements concernant le mélange de variables de différents types dans une expression, les tests logiques incorrects (tels que « if ($a && $a) {} », « if ($a && !$a) {} » et « if ( $a) {} elseif ($a) {}"), initialisation incomplète des propriétés de l'objet. L'analyseur fonctionne en mode multithread. Il est possible d'effectuer des analyses incrémentielles, qui analysent uniquement les fichiers modifiés depuis la dernière analyse.

De plus, des outils de programmation sécurisés sont fournis pour permettre utiliser annotations au format Docblock («/** @var Type */») pour fournir des informations sur les types de variables, les valeurs de retour, les paramètres de fonction et les propriétés des objets. La définition de modèles d'utilisation de type et l'utilisation d'instructions assert sont également prises en charge. Par exemple:

/** @var chaîne|null */
$a = foo();

/** @var chaîne $a */
echo strpos($a, 'bonjour');

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

Pour automatiser l'élimination des problèmes détectés, l'utilitaire Psalter est fourni, qui prend en charge les plugins et il permet résolvez les problèmes de code courants, ajoutez des annotations de type et effectuez des manipulations telles que le déplacement de classes d'un espace de noms à un autre, le déplacement de méthodes entre les classes et le renommage des classes et des méthodes.

Dans le nouveau numéro de Psaume mis en œuvre l'option "--taint-analysis" vous permet de retracer la relation entre les paramètres d'entrée reçus de l'utilisateur (par exemple, $_GET['name']) et leur utilisation à des endroits nécessitant un échappement de caractères (par exemple, echo " $nom "), y compris via des chaînes de suivi d'affectations intermédiaires et d'appels de fonctions. L'utilisation des tableaux associatifs $_GET, $_POST et $_COOKIE est considérée comme des sources de données potentiellement dangereuses, mais elle est également possible détermination propres sources. Les actions qui nécessitent un suivi d'échappement incluent les opérations de sortie qui génèrent du contenu HTML, ajoutent des en-têtes HTTP ou exécutent des requêtes SQL.

La validation est utilisée lors de l'utilisation de fonctions telles que echo, exec, include et header. Lors de l'analyse du besoin d'échappement, les types de données tels que le texte, les chaînes avec code SQL, HTML et Shell, les chaînes avec paramètres d'authentification sont pris en compte. Le mode proposé permet d'identifier les vulnérabilités du code qui conduisent à du cross-site scripting (XSS) ou à une substitution SQL.

De plus, on peut noter commencer test alpha de la nouvelle branche PHP 8.0. La sortie est prévue pour le 26 novembre. Sont attendus dans la nouvelle succursale : les innovationsComme:

  • Включение Compilateur JIT, dont l’utilisation améliorera la productivité.
  • support types de syndicats, définissant des collections de deux types ou plus (par exemple, « fonction publique foo(Foo|Bar $input) : int|float; »).
  • support les attributs (annotations) qui vous permettent de lier des métadonnées (telles que des informations de type) à des classes sans utiliser la syntaxe Docblock.
  • Syntaxe raccourcie définitions de classe, vous permettant de combiner la définition d'un constructeur et de propriétés.
  • Nouveau type de retour - statique.
  • Nouveau genre - mixte, qui peut être utilisé pour déterminer si une fonction accepte des paramètres de différents types.
  • Expression renversement pour gérer les exceptions.
  • Carte faible pour créer des objets qui peuvent être sacrifiés lors du garbage collection (par exemple, pour stocker des caches inutiles).
  • Occasion en utilisant l'expression « ::class » pour les objets (analogue à l'appel de get_class()).
  • Occasion définitions dans le bloc catch des exceptions qui ne sont pas liées à des variables.
  • Occasion en laissant une virgule après le dernier élément de la liste des paramètres de la fonction.
  • Nouvelle interface Enfilable pour identifier les types de chaînes ou les données pouvant être converties en chaîne (pour lesquelles la méthode __toString() est disponible).
  • Nouvelle fonctionnalité str_contains(), un analogue simplifié de strpos pour déterminer l'occurrence 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.
  • Fonction ajoutée fdiv(), qui effectue une opération de division sans générer d'erreur lors de la division par zéro.
  • Modifié logique de jonction de chaînes. Par exemple, l'expression 'echo "sum:" . $a + $b' était auparavant interprété comme 'echo ("sum: " . $a) + $b', et en PHP 8 sera traité comme 'echo "sum: " . ($a + $b)'.
  • Resserré la vérification des opérations arithmétiques et binaires, par exemple, les expressions "[] % [42]" et "$object + 4" entraîneront une erreur.
  • Mis en œuvre un algorithme de tri stable dans lequel l'ordre des valeurs identiques est préservé au cours des différentes exécutions.

Source: opennet.ru

Ajouter un commentaire