Matrice de la suite d’analyse de vérification proactive des codes

  • Rversion finale: Yokohama
  • Mis à jour 6 mars 2025
  • 18 minutes de lecture
  • Reportez-vous à la matrice de la suite d’analyse Vérification proactive du code (PCC) pour plus de détails sur les vérifications effectuées lors d’une analyse PCC.

    Tableau 1. Matrice de la suite d’analyse de vérification proactive des codes
    Catégorie Nom Short_description Description
    Performances HSD0001049 Évitez les scripts d'interface utilisateur globaux Éviter les scripts d'interface utilisateur globaux Les scripts d'interface utilisateur globaux sont chargés sur chaque page/formulaire dans ServiceNow, même si le code qu'ils contiennent n'est pas appelé.
    Facilité de gestion HSD0001058 SCRIPT L'application incluse dans le périmètre utilise des utilitaires de journalisation ou des méthodes déconseillées L'application incluse dans le périmètre utilise des utilitaires de journalisation ou des méthodes déconseillées : gs.log Les applications incluses dans le périmètre doivent utiliser des API de journalisation incluses dans le périmètre plutôt que des méthodes héritées.
    Facilité de gestion HSD0001058 XML L'application incluse dans le périmètre utilise des utilitaires de journalisation ou des méthodes déconseillées L'application incluse dans le périmètre utilise des utilitaires de journalisation ou des méthodes déconseillées : gs.log Les applications incluses dans le périmètre doivent utiliser des API de journalisation incluses dans le périmètre plutôt que des méthodes héritées.
    Performances HSD0001116 Scripts clients ne doivent pas être définis par rapport à la table globale Scripts clients ne doivent pas être définis par rapport à la table globale Un script client global est un script client dans lequel la table sélectionnée est globale. Les scripts clients globaux n’ont aucune restriction de table ; Par conséquent, ils se chargeront sur chaque page du système, introduisant un retard de chargement du navigateur dans le processus. Il n’y a aucun avantage à charger ce type de scripts sur chaque page.
    Performances HSD0001126 SCRIPT Remontée pas à pas inutile pour sys_id à partir de l'objet actuel Remontée pas à pas inutile pour sys_id à partir de l'objet actuel Les champs de référence stockent déjà l’ID système de l’enregistrement référencé. L’utilisation de gr.fieldname.sys_id est une remontée pas à pas qui demande à la plateforme d’effectuer une autre requête uniquement pour renvoyer la même valeur. C’est une surcharge inutile.
    Performances HSD0001126 XML Remontée pas à pas inutile pour sys_id à partir de l'objet actuel Remontée pas à pas inutile pour sys_id à partir de l'objet actuel Les champs de référence stockent déjà l’ID système de l’enregistrement référencé. L’utilisation de gr.fieldname.sys_id est une remontée pas à pas qui demande à la plateforme d’effectuer une autre requête uniquement pour renvoyer la même valeur. C’est une surcharge inutile.
    Performances HSD0001128 SCRIPT Le code côté client ne doit pas utiliser de méthodes AJAX synchrones Le code côté client ne doit pas utiliser de méthodes AJAX synchrones Le code qui utilise AJAX synchrone peut éventuellement entraîner des retards dans le traitement des événements d’interface utilisateur. Elle peut nuire aux performances et avoir un impact négatif sur l’expérience utilisateur. Dans la mesure du possible, nous devrions essayer d’utiliser l’AJAX asynchrone.
    Mise à niveau HSD0001142 SCRIPT Le code côté client ne doit pas utiliser la technique de manipulation DOM Le code côté client ne doit pas utiliser la technique de manipulation DOM Cette technique de personnalisation donne beaucoup de contrôle, mais pose souvent des problèmes de mise à niveau. Il est recommandé de ne pas utiliser jQuery, PrototypeJS, gel et d’autres techniques.
    Facilité de gestion HSD0001153 SCRIPT URL d'instance codée en dur URL d'instance codée en dur Déclenche un résultat pour les URL d'instance codées en dur, car leur utilisation peut nuire aux fonctionnalités dans les environnements.
    Facilité de gestion HSD0001153 XML URL d'instance codée en dur URL d'instance codée en dur Déclenche un résultat pour les URL d'instance codées en dur, car leur utilisation peut nuire aux fonctionnalités dans les environnements.
    Facilité de gestion HSD0001174 Services Web basés sur un script REST écrivant directement des données Services Web basés sur un script écrivant directement des données Les services Web basés sur un script insèrent/mettent à jour/suppriment des données directement, alors qu'il est recommandé d'utiliser des includes de script, car ils fournissent une approche structurée et documentée pour la gestion des opérations de données, garantissant la cohérence, la sécurité et la maintenabilité au sein de la plateforme.
    Facilité de gestion HSD0001174 Services web basés sur un script SOAP écrivant directement des données Services Web basés sur un script écrivant directement des données Les services Web basés sur un script insèrent/mettent à jour/suppriment des données directement, alors qu'il est recommandé d'utiliser des includes de script, car ils fournissent une approche structurée et documentée pour la gestion des opérations de données, garantissant la cohérence, la sécurité et la maintenabilité au sein de la plateforme.
    Sécurité HSD0001235 XML Éviter les expressions JEXL dynamiques à l'intérieur de la balise Jelly Éviter les expressions JEXL dynamiques à l'intérieur de la balise Jelly Lors de l’écriture de code Jelly, évitez d’utiliser des expressions JEXL dynamiques à l’intérieur de la balise Jelly (ou <g2 :evaluate> pour la phase deux). Bien que le code semble fonctionner, il affecte une ressource de mémoire (appelée PermGen) dans la machine virtuelle Java, ce qui peut entraîner des problèmes de performances et même des pannes système au fil du temps. L’exception à l’utilisation d’expressions JEXL dans les balises <g :evaluate> concerne les valeurs statiques, notamment : ${AMP}\, ${AND}, ${GT}, ${LT} et ${SP} (et leurs équivalents de phase deux : $[AMP], $[AND], etc.).
    Mise à niveau HSD0001247 Utilisation de l'API RESTMessage (V1) obsolète Utilisation de l'API RESTMessage (V1) obsolète

    L’API permet d’envoyer des messages REST sortants en utilisant JavaScript.

    Cependant, la version 1 de RESTMessage a été déconseillée.

    Facilité de gestion HSD0001275 Les scripts ne doivent pas contenir d'ID codés en dur Les scripts ne doivent pas contenir d'ID codés en dur Le codage en dur sys_ids rend le système plus difficile à gérer et moins apte à déplacer les fonctionnalités entre les instances.
    Facilité de gestion HSD0001278 Avant Les règles métier ne doivent pas mettre à jour() ou insérer() sur d'autres tables. Avant Les règles métier ne doivent pas mettre à jour() ou insérer() des enregistrements sur d'autres tables. L’exécution d’un insert() ou d’un update() dans une règles métier onBefore entraînera des mises à jour vers d’autres tables, même si la mise à jour peut être annulée.
    Facilité de gestion HSD0001281 getMessage() appelé dans le script client sans précharger la clé de message getMessage() appelé dans le script client sans précharger la clé de message getMessage utilisé dans un script client requiert que la clé de message soit ajoutée au champ Messages de l'enregistrement de script.
    Facilité de gestion HSD0001312 SCRIPT Éviter l'utilisation de console.log() dans le code Le code ne doit pas contenir la méthode de débogage console.log() La fonction côté client console.log pouvait entraîner des erreurs dans certaines versions du navigateur. De plus, il y a de fortes chances que ce qui est enregistré soit des informations que vous ne voudriez pas voir exposées publiquement, et que des personnes mal intentionnées puissent manipuler le script pour refléter des Informations personnellement identifiables (IPI). Ce n’est jamais une bonne idée d’aller en production avec la journalisation de console activée. Console.log n’est pas valide côté serveur et ne devrait donc pas s’y trouver non plus.
    Facilité de gestion HSD0001312 XML Éviter l'utilisation de console.log() dans le code Le code ne doit pas contenir la méthode de débogage console.log() La fonction côté client console.log pouvait entraîner des erreurs dans certaines versions du navigateur. De plus, il y a de fortes chances que ce qui est enregistré soit des informations que vous ne voudriez pas voir exposées publiquement, et que des personnes mal intentionnées puissent manipuler le script pour refléter des Informations personnellement identifiables (IPI). Ce n’est jamais une bonne idée d’aller en production avec la journalisation de console activée. Console.log n’est pas valide côté serveur et ne devrait donc pas s’y trouver non plus.
    Performances HSD0001338 Les règles métier ne doivent pas être définies dans la table globale Les règles métier ne doivent pas être définies dans la table globale (règle métier globale) Une règle métier globale est une règle métier dans laquelle la table sélectionnée est globale. Tout autre script peut appeler des règles métier globales. Les règles métier globales n’ont aucune restriction de condition ou de table et se chargent sur chaque page du système.
    Performances HSD0001347 SCRIPT Le code côté client ne doit pas utiliser GlideRecord Le code côté client ne doit pas utiliser GlideRecord L’objet GlideRecord côté client est souvent inefficace, car il renvoie beaucoup de données inutiles. GlideRecord et g_form.getReference sont tous deux impliqués.
    Performances HSD0001358 code SCRIPT côté serveur ne doit pas utiliser GlideRecord.getRowCount() Code côté serveur ne doit pas utiliser GlideRecord.getRowCount() pour compter les enregistrements La fonction GlideRecord.getRowCount() fonctionne en obtenant l’ensemble du jeu de résultats sans utiliser les fonctions arithmétiques intégrées de la base de données. GlideAggregate utilise la base de données, il est donc souvent beaucoup plus rapide. L’exception à cette recommandation est si vous avez l’intention de parcourir les enregistrements en boucle et de les traiter quand même.
    Performances HSD0001358 code XML côté serveur ne doit pas utiliser GlideRecord.getRowCount() Code côté serveur ne doit pas utiliser GlideRecord.getRowCount() pour compter les enregistrements La fonction GlideRecord.getRowCount() fonctionne en obtenant l’ensemble du jeu de résultats sans utiliser les fonctions arithmétiques intégrées de la base de données. GlideAggregate utilise la base de données, il est donc souvent beaucoup plus rapide. L’exception à cette recommandation est si vous avez l’intention de parcourir les enregistrements en boucle et de les traiter quand même.
    Facilité de gestion HSD0001392 Les scripts ne doivent pas utiliser la méthode eval() Les scripts ne doivent pas utiliser la méthode eval() La fonction eval() évalue ou exécute un argument. Une mauvaise utilisation d’eval() ouvre votre code aux attaques par injection et le débogage peut être plus difficile, car aucun numéro de ligne n’est affiché avec une erreur.
    Performances Sources de données JDBC HSD0001554a avec « Utiliser la date/heure de la dernière exécution » désactivée pour les ensembles de mises à jour L'option « Utiliser la dernière exécution » doit être cochée dans les sources de données JDBC L'importation répétée de données qui n'ont pas changé entraîne de nombreuses lignes ignorées et limite inutilement les ressources système.
    Performances HSD0001560 Utiliser « suivre par » dans les boucles ngRepeat Utiliser « suivre par » dans les boucles ngRepeat Lors de l’utilisation de la directive ngRepeat sans clause « suivre par », les éléments DOM sont détruits et reconstruits à chaque fois que les données sources sont mises à jour. L’ajout d’une clause « suivre par » avec une clé unique (telle qu’un sys_id) permet de réutiliser les éléments DOM plutôt que de les reconstruire, ce qui améliore considérablement les performances des pages avec des listes volumineuses et complexes.
    Facilité de gestion HSD0001578 Les règles métier ne doivent pas utiliser la méthode SOAP getResponse() Les règles métier ne doivent pas utiliser la méthode SOAP getResponse() getResponse bloque la transaction en attendant qu’une réponse soit reçue. Il est préférable de le faire de manière asynchrone.
    Performances HSD0001623 Les ACL de lecture (règles de sécurité) ne doivent pas avoir GlideRecord/GlideAggregate Les ACL de lecture (règles de sécurité) ne doivent pas avoir GlideRecord/GlideAggregate Les ACL de lecture sont fréquemment exécutées. Avoir des recherches complexes dans la base de données peut nuire aux performances.
    Sécurité HSD0002016 Les scripts Server dans les widgets doivent utiliser GlideRecordSecure Les scripts Server dans les widgets doivent utiliser GlideRecordSecure au lieu de GlideRecord

    La bonne pratique devrait être que les scripts serveur dans les widgets utilisent GlideRecordSecure plutôt que GlideRecord. Cela permet de s’assurer que les ACL de sécurité sont prises en compte dans toutes les interactions avec le serveur. Pour détecter tout écart par rapport à cela, toute instanciation de GlideRecord doit être marquée comme un résultat.

    Notez que $sp.getRecord() renvoie actuellement un objet GlideRecord. Cet appel doit en fait renvoyer un objet GlideRecordSecure pour être aussi sécurisé que possible. Bien qu’il s’agisse d’une amélioration distincte en dehors de l’outil HealthScan, elle pose un défi car il sera plus difficile pour HealthScan de détecter l’utilisation de l’objet GlideRecord renvoyé par $sp.getRecord.

    Performances HSD0002144 Tirer parti de c.server.get() pour améliorer les performances des widgets Tirer parti de c.server.get() pour améliorer les performances des widgets Sur le script client, c.server.get() permet de passer des données spécifiques au script serveur. Cela peut améliorer les performances par rapport à c.server.update(), qui envoie l’objet de données entier.
    Performances HSD0002150 Supprimez les services inutilisés du script client du widget. Supprimez les services inutilisés du script client du widget. Si les services injectés ne sont pas utilisés dans le script contrôleur client d’un widget, envisagez de les supprimer. Les services qui sont injectés et non utilisés sont instanciés, ce qui peut avoir un impact sur les performances. Du point de vue de la lisibilité du code, il est également recommandé de n’injecter que les services nécessaires.
    Performances HSD0002154 N'utilisez pas $rootScope.$on dans le script client d'un widget. N'utilisez pas $rootScope.$on dans le script client d'un widget.

    $rootScope.$on ne doit être utilisé que dans un service. L’utilisation d’écouteurs d’événements sur $rootScope dans le script contrôleur client d’un widget peut provoquer des fuites de mémoire si les écouteurs ne sont pas détruits manuellement. Chaque fois qu’un widget est chargé, le contrôleur est initialisé et chaque écouteur initialisé sur le $rootScope ne sera pas détruit avec le contrôleur, sauf si cela est fait manuellement.

    Les services n’ont pas d’autre alternative que de déclencher des événements sur $rootScope et d’écouter les événements sur $rootScope. Cela est dû au fait que les services sont initialisés une seule fois dans l’application et n’ont pas leur propre champ d’application. Vous pouvez utiliser $rootScope.$on dans un service.

    Facilité de gestion HSD0002808 Scripts clients sans description Scripts clients sans description Scripts clients dont la description est vide, très courte ou identique au nom du script.
    Facilité de gestion HSD0002808 Includes de script sans description Includes de script sans description Includes de script dont la description est vide, très courte ou identique au nom du script.
    Facilité de gestion HSD0002827 Tous les événements doivent avoir une description Tous les événements doivent avoir une description Le champ « description » de tous les événements personnalisés dans le registre des événements doit être renseigné. Cela permet de s’assurer que le but de l’événement est facilement identifiable par les administrateurs qui n’ont pas créé l’entrée de registre et d’améliorer la maintenabilité de l’instance.
    Facilité de gestion HSD0002828 Le champ « Déclenché par » doit être renseigné pour tous les événements Le champ « Déclenché par » doit être renseigné pour tous les événements Le champ « fired_by » de tous les événements personnalisés dans le registre des événements doit être renseigné. Cela garantit que le déclencheur de l’événement est facilement identifiable par les administrateurs qui n’ont pas créé l’entrée de registre et améliore la maintenabilité de l’instance.
    Facilité de gestion HSD0003076 Informations d'identification d'authentification de base sur la définition du message SOAP Informations d'identification d'authentification de base sur la définition du message SOAP L'authentification de base pour les messages SOAP sortants doit utiliser des profils d'authentification de base au lieu de placer les informations d'identification sur la définition de fonction elle-même.
    Facilité de gestion HSD0003081 Informations d'identification d'authentification de base sur la définition du message REST Informations d'identification d'authentification de base sur la définition du message REST L'authentification de base pour les messages REST sortants doit utiliser des profils d'authentification de base au lieu de placer les informations d'identification sur la définition de fonction elle-même.
    Mise à niveau HSD0003307 Table de demande de changement ne doit pas être étendue Table de demande de changement ne doit pas être étendue

    Au moins une table enfant étendant la demande de changement a été créée.

    L’extension de la demande de changement avec des tables enfants personnalisées ne doit pas être effectuée :
    • Pour prendre en charge une table de demande de changement personnalisée, un degré élevé de personnalisation des autres processus ITSM est nécessaire
    • Les nouvelles fonctionnalités des versions futures peuvent ne pas fonctionner sur les tables étendues ou nécessiter une personnalisation supplémentaire
    Facilité de gestion HSD0003625 Script de règle métier doit être encapsulé dans la fonction executeRule Code script dans les règles métier doit être encapsulé dans la fonction executeRule Le code doit vérifier s'il existe une règle métier dont le code n'est pas encapsulé dans la fonction executeRule.
    Mise à niveau HSD0004147 L'utilisation de GlideDialogWindow et de GlideOverlay L'utilisation de GlideDialogWindow et de GlideOverlay Recherche l'utilisation de GlideDialogWindow et de GlideOverlay, qui ne peuvent pas être testés par ATF.
    Performances HSD0004365 SCRIPT Cache vidé dans le cadre des scripts Cache vidé dans le cadre des scripts Si une purge du cache est déclenchée dans le cadre d’une exécution de script non prête à l’emploi, la plateforme devra reconstruire le cache avant de revenir à son état BAU. Cette activité a un impact significatif sur les performances.
    Performances HSD0004726 Le débogueur de SCRIPT ne doit pas être utilisé dans les scripts Le débogueur ne doit pas être utilisé dans les scripts L’instruction debugger est utilisée pour indiquer à l’environnement JavaScript en cours d’exécution d’arrêter l’exécution et de démarrer un débogueur au point actuel du code. Cette pratique est tombée en désuétude avec l’avènement des outils modernes de débogage et de développement. Le code de production ne doit absolument pas contenir de débogueur, car cela entraînerait l’arrêt de l’exécution du code par le navigateur et l’ouverture d’un débogueur approprié.
    Performances HSD0006666 Vérifier si current.update() est utilisé dans une règle métier Vérifier si current.update() est utilisé dans une règle métier Current.update() utilisé dans une règle métier entraîne des mises à jour récursives et peut avoir un impact significatif sur les performances.
    Facilité de gestion HSD0013213 SCRIPT Détection de chaînes codées en dur dans l’utilisation d’addInfoMessage() Détection de chaînes codées en dur dans l'utilisation d'addInfoMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addInfoMessage() tant du côté client que du côté serveur.
    Facilité de gestion HSD0013213 XML Détection de chaînes codées en dur dans l’utilisation d’addInfoMessage() Détection de chaînes codées en dur dans l'utilisation d'addInfoMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addInfoMessage() tant du côté client que du côté serveur.
    Facilité de gestion HSD0013215 SCRIPT Détection de chaînes codées en dur dans l'utilisation d'alert() Détection des chaînes codées en dur dans l'utilisation de alert() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans alert() côté client.
    Facilité de gestion HSD0013215 XML Détection de chaînes codées en dur dans l'utilisation d'alert() Détection des chaînes codées en dur dans l'utilisation de alert() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans alert() côté client.
    Facilité de gestion HSD0014228 SCRIPT Détection de chaînes codées en dur dans l'utilisation d'addErrorMessage() Détection de chaînes codées en dur dans l'utilisation d'addErrorMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addErrorMessage() tant du côté client que du côté serveur.
    Facilité de gestion HSD0014228 XML Détection de chaînes codées en dur dans l'utilisation d'addErrorMessage() Détection de chaînes codées en dur dans l'utilisation d'addErrorMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addErrorMessage() tant du côté client que du côté serveur.
    Facilité de gestion HSD0014229 SCRIPT Détection des chaînes codées en dur dans l'utilisation de setError() Détection des chaînes codées en dur dans l'utilisation de setError() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans setError() côté serveur.
    Facilité de gestion HSD0014229 XML Détection des chaînes codées en dur dans l'utilisation de setError() Détection des chaînes codées en dur dans l'utilisation de setError() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans setError() côté serveur.
    Facilité de gestion HSD0014231 SCRIPT Détection des chaînes codées en dur dans l'utilisation de confirm() Détection des chaînes codées en dur dans l'utilisation de confirm() : SCRIPT Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans confirm() côté client.
    Facilité de gestion HSD0014231 XML Détection des chaînes codées en dur dans l'utilisation de confirm() Détection des chaînes codées en dur dans l'utilisation de confirm() : XML Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans confirm() côté client.
    Facilité de gestion HSD0014232 SCRIPT Détection des chaînes codées en dur dans l'utilisation de prompt() Détection des chaînes codées en dur dans l'utilisation de prompt() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans prompt() côté client.
    Facilité de gestion HSD0014232 XML Détection des chaînes codées en dur dans l'utilisation de prompt() Détection des chaînes codées en dur dans l'utilisation de prompt() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans prompt() côté client.
    Facilité de gestion HSD0014233 SCRIPT Détection de chaînes codées en dur dans l'utilisation d'addMessage() Détection de chaînes codées en dur dans l'utilisation d'addMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addMessage() côté serveur.
    Facilité de gestion HSD0014233 XML Détection de chaînes codées en dur dans l'utilisation d'addMessage() Détection de chaînes codées en dur dans l'utilisation d'addMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addMessage() côté serveur.
    Facilité de gestion HSD0014234 SCRIPT Détection de chaînes codées en dur dans l'utilisation d'addFormMessage() Détection de chaînes codées en dur dans l'utilisation d'addFormMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addFormMessage() côté client.
    Facilité de gestion HSD0014234 XML Détection de chaînes codées en dur dans l'utilisation d'addFormMessage() Détection de chaînes codées en dur dans l'utilisation d'addFormMessage() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addFormMessage() côté client.
    Facilité de gestion HSD0014544 SCRIPT Détection de chaînes codées en dur dans l'utilisation d'addWarningMessage() Détection de chaînes codées en dur dans l'utilisation d'addWarningMessage()() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addWarningMessage() tant du côté client que du côté serveur.
    Facilité de gestion HSD0014544 XML Détection de chaînes codées en dur dans l'utilisation d'addWarningMessage() Détection de chaînes codées en dur dans l'utilisation d'addWarningMessage()() Les messages/chaînes codés en dur dans le code ne seront pas localisés. Détection de telles occurrences dans addWarningMessage() tant du côté client que du côté serveur.