Matriz do pacote de verificação de verificação proativa de código
Consulte a matriz do pacote de verificação de verificação proativa de código (PCC) para obter detalhes sobre as verificações realizadas durante uma verificação de PCC.
| Categoria | Nome | Short_description | Descrição |
|---|---|---|---|
| Desempenho | HSD0001049 Evitar scripts de interface do usuário global | Evitar scripts de interface do usuário global | Os scripts de interface do usuário global são carregados em todas as páginas/formulários na ServiceNow, mesmo se o código dentro deles não for chamado. |
| Gerenciabilidade | HSD0001058 SCRIPT O app com escopo usa utilitários de registro em log ou métodos descontinuados | O app com escopo usa utilitários de registro em log ou métodos descontinuados — gs.log | As aplicações com escopo devem usar APIs de registro em log com escopo em vez de métodos legados. |
| Gerenciabilidade | HSD0001058 XML O app com escopo usa utilitários de registro em log ou métodos descontinuados | O app com escopo usa utilitários de registro em log ou métodos descontinuados — gs.log | As aplicações com escopo devem usar APIs de registro em log com escopo em vez de métodos legados. |
| Desempenho | HSD0001116 Scripts de cliente não devem ser definidos em relação à tabela Global | Scripts de cliente não devem ser definidos em relação à tabela Global | Um client script global é qualquer client script em que a Tabela selecionada é Global. Os client scripts globais não têm restrições de tabela; portanto, eles serão carregados em todas as páginas do sistema, apresentando um atraso de carregamento do navegador no processo. Não há benefício em carregar esse tipo de script em todas as páginas. |
| Desempenho | HSD0001126 SCRIPT Referência com pontos desnecessária para sys_id do objeto atual | Referência com pontos desnecessária para sys_id do objeto atual | Os campos de referência já armazenam o SYS ID do registro referenciado. O uso de gr.fieldname.sys_id é uma referência com pontos e instrui a plataforma a executar outra consulta apenas para retornar o mesmo valor. Esta é uma sobrecarga desnecessária. |
| Desempenho | HSD0001126 XML Referência com pontos desnecessária para sys_id do objeto atual | Referência com pontos desnecessária para sys_id do objeto atual | Os campos de referência já armazenam o SYS ID do registro referenciado. O uso de gr.fieldname.sys_id é uma referência com pontos e instrui a plataforma a executar outra consulta apenas para retornar o mesmo valor. Esta é uma sobrecarga desnecessária. |
| Desempenho | HSD0001128 SCRIPT O código no cliente não deve usar métodos AJAX síncronos | O código no cliente não deve usar métodos AJAX síncronos | O código que usa AJAX síncrono pode causar atrasos no processamento de eventos de IU. Isso pode ser prejudicial ao desempenho e afetar negativamente a experiência do usuário. Sempre que possível, devemos tentar empregar AJAX assíncrono. |
| Melhora | HSD0001142 SCRIPT O código no cliente não deve usar a técnica de manipulação DOM | O código no cliente não deve usar a técnica de manipulação DOM | Essa técnica de personalização oferece muito controle, mas frequentemente causa desafios de upgrade. É recomendável não usar jQuery, PrototypeJS, gel e outras técnicas. |
| Gerenciabilidade | HSD0001153 SCRIPT URL da instância codificada | URL da instância codificada | Gera uma descoberta de URLs de instância codificadas, já que seu uso pode ser prejudicial à funcionalidade em todos os ambientes. |
| Gerenciabilidade | HSD0001153 XML URL da instância codificada | URL da instância codificada | Gera uma descoberta de URLs de instância codificadas, já que seu uso pode ser prejudicial à funcionalidade em todos os ambientes. |
| Gerenciabilidade | HSD0001174 REST Serviços web com script gravando dados diretamente | Serviços web com script gravando dados diretamente | Os Serviços web com script inserem/atualizam/excluem dados diretamente, porém é recomendável utilizar Inclusões de script porque elas fornecem uma abordagem estruturada e documentada para gerenciar operações de dados, garantindo consistência, segurança e manutenção na plataforma. |
| Gerenciabilidade | HSD0001174 SOAP Serviços web com script gravando dados diretamente | Serviços web com script gravando dados diretamente | Os Serviços web com script inserem/atualizam/excluem dados diretamente, porém é recomendável utilizar Inclusões de script porque elas fornecem uma abordagem estruturada e documentada para gerenciar operações de dados, garantindo consistência, segurança e manutenção na plataforma. |
| Segurança | HSD0001235 XML Evitar expressões JEXL dinâmicas dentro do marcador Jelly | Evitar expressões JEXL dinâmicas dentro do marcador Jelly | Ao escrever código Jelly, evite usar expressões JEXL dinâmicas dentro do marcador Jelly (ou<g2:evaluate> para a fase dois). Embora o código pareça funcionar, ele afeta um recurso de memória (chamado PermGen) na Java Virtual Machine, o que pode levar a problemas de desempenho e até mesmo indisponibilidades do sistema ao longo do tempo. A exceção ao uso de expressões JEXL dentro de<g:evaluate> marcadores está com valores estáticos, incluindo: ${AMP}\, ${AND}, ${GT}, ${LT} e ${SP} (e suas contrapartes de fase dois: $[AMP], $[AND] e assim por diante). |
| Melhora | HSD0001247 Uso de API RESTMessage descontinuada (v1) | Uso de API RESTMessage descontinuada (v1) |
A API tem permissão para enviar mensagens REST de saída usando JavaScript. No entanto, a versão 1 do RESTMessage foi descontinuada. |
| Gerenciabilidade | HSD0001275 Os scripts não devem conter IDs codificados | Os scripts não devem conter IDs codificados | A codificação rígida de sys_ids torna o sistema mais difícil de gerenciar e menos capaz de mover a funcionalidade entre instâncias. |
| Gerenciabilidade | HSD0001278 As regras de negócio anteriores não devem usar update() nem insert() em outras tabelas | As regras de negócio anteriores não devem usar registros update() nem insert() em outras tabelas | A execução de um insert() ou update() em um BR onBefore causará atualizações em outras tabelas, mesmo que a atualização possa ser cancelada. |
| Gerenciabilidade | HSD0001281 getMessage() chamado no Script de cliente sem pré-carregar chave de mensagem | getMessage() chamado no Script de cliente sem pré-carregar chave de mensagem | O getMessage usado em um client script precisa ter a chave de mensagem adicionada ao campo Mensagens no registro do script. |
| Gerenciabilidade | HSD0001312 SCRIPT Evitar o uso de console.log() no código | O código não deve conter o método de depuração console.log() | A função console.log do lado do cliente pode causar erros em determinadas versões do navegador. Além disso, há uma boa chance de que o que está sendo registrado sejam informações que você não deseja expor publicamente e que pessoas com intenção mal-intencionada possam manipular o script para refletir PII. Nunca é uma boa ideia ir para a produção com o registro em log do console habilitado. Console.log está no lado do servidor inválido e, portanto, também não deve estar lá. |
| Gerenciabilidade | HSD0001312 XML Evitar o uso de console.log() no código | O código não deve conter o método de depuração console.log() | A função console.log do lado do cliente pode causar erros em determinadas versões do navegador. Além disso, há uma boa chance de que o que está sendo registrado sejam informações que você não deseja expor publicamente e que pessoas com intenção mal-intencionada possam manipular o script para refletir PII. Nunca é uma boa ideia ir para a produção com o registro em log do console habilitado. Console.log está no lado do servidor inválido e, portanto, também não deve estar lá. |
| Desempenho | HSD0001338 Regras de negócio não devem ser definidas na tabela Global | Regras de negócio não devem ser definidas na tabela Global (Regra de negócio global) | Uma regra de negócio global é qualquer regra de negócio em que a tabela selecionada é global. Qualquer outro script pode chamar Regras de negócios globais. As Regras de negócio globais não têm restrições de condição ou de tabela e são carregadas em todas as páginas do sistema. |
| Desempenho | HSD0001347 SCRIPT O código no cliente não deve usar GlideRecord | O código no cliente não deve usar GlideRecord | O objeto GlideRecord do lado do cliente geralmente é ineficiente, pois retorna muitos dados desnecessários. GlideRecord e g_form.getReference estão envolvidos. |
| Desempenho | HSD0001358 SCRIPT O código no servidor não deve usar GlideRecord.getRowCount() | O código no servidor não deve usar GlideRecord.getRowCount() para contar registros | O GlideRecord.getRowCount() funciona obtendo o conjunto de resultados inteiro sem usar as funções aritméticas integradas do banco de dados. O GlideAggregate usa o banco de dados e, portanto, geralmente é muito mais rápido. A exceção a esta recomendação é se você pretende fazer um loop pelos registros e processá-los mesmo assim. |
| Desempenho | HSD0001358 XML O código no servidor não deve usar GlideRecord.getRowCount() | O código no servidor não deve usar GlideRecord.getRowCount() para contar registros | O GlideRecord.getRowCount() funciona obtendo o conjunto de resultados inteiro sem usar as funções aritméticas integradas do banco de dados. O GlideAggregate usa o banco de dados e, portanto, geralmente é muito mais rápido. A exceção a esta recomendação é se você pretende fazer um loop pelos registros e processá-los mesmo assim. |
| Gerenciabilidade | HSD0001392 Os scripts não devem usar o método eval() | Os scripts não devem usar o método eval() | A função eval() avalia ou executa um argumento. O uso inadequado de eval() abre seu código para ataques de injeção e a depuração pode ser mais desafiadora, já que nenhum número de linha é exibido com um erro. |
| Desempenho | HSD0001554a JDBC Fontes de dados com “Usar data/hora da última execução” desabilitada para conjuntos de atualizações | As fontes de dados JDBC devem ter a opção “Usar data/hora da última execução” marcada | A importação repetida de dados sem alterações causa muitas linhas ignoradas e limita desnecessariamente os recursos do sistema. |
| Desempenho | HSD0001560 Usar “rastrear por” em loops ngRepeat | Usar “rastrear por” em loops ngRepeat | Ao usar a diretiva ngRepeat sem uma cláusula "rastrear por", os elementos DOM são destruídos e recriados sempre que os dados de origem são atualizados. Adicionar uma cláusula "rastrear por" com uma chave exclusiva (como um sys_id) permite que os elementos do DOM sejam reutilizados em vez de recriados, o que melhora significativamente o desempenho de páginas com listas grandes e complexas. |
| Gerenciabilidade | HSD0001578 As Regras de negócio não devem usar o método SOAP getResponse() | As Regras de negócio não devem usar o método SOAP getResponse() | getResponse bloqueia a transação, aguardando até que uma resposta seja recebida. Isso é melhor feito de forma assíncrona. |
| Desempenho | HSD0001623 As ACLs de leitura (regras de segurança) não devem ter GlideRecord/GlideAggregate | As ACLs de leitura (regras de segurança) não devem ter GlideRecord/GlideAggregate | As ACLs de leitura são executadas com frequência. Ter pesquisas de banco de dados complexas pode prejudicar o desempenho. |
| Segurança | HSD0002016 Scripts de servidor em widgets devem usar GlideRecordSecure | Scripts de servidor em widgets devem usar GlideRecordSecure em vez de GlideRecord |
A prática recomendada deve ser que os scripts de servidor em widgets usem GlideRecordSecure em vez de GlideRecord. Isso serve para garantir que as ACLs de segurança sejam consideradas em todas as interações do servidor. Para detectar desvios disso, qualquer instanciação de GlideRecord deve ser marcada como uma descoberta. Observe que $sp.getRecord() atualmente retorna um objeto GlideRecord. Esta chamada deve realmente retornar um objeto GlideRecordSecure para ser o mais seguro possível. Embora essa seja uma melhoria separada fora da ferramenta HealthScan, ela representa um desafio, pois será mais difícil para a HealthScan detectar o uso do objeto GlideRecord retornado por $sp.getRecord. |
| Desempenho | HSD0002144 Utilizar c.server.get() para melhorar o desempenho do widget | Utilizar c.server.get() para melhorar o desempenho do widget | No script do cliente, c.server.get() permite que você passe dados específicos para o script do servidor. Isso pode ter melhorias de desempenho em relação a c.server.update(), que envia o objeto de dados inteiro. |
| Desempenho | HSD0002150 Remova serviços não utilizados do client script do widget. | Remova serviços não utilizados do client script do widget. | Se os serviços injetados não forem usados no script do controlador do cliente de um widget, considere removê-los. Os serviços injetados e não usados serão instanciados, o que pode ter um impacto no desempenho. Também é uma prática recomendada, do ponto de vista da legibilidade do código, injetar somente serviços necessários. |
| Desempenho | HSD0002154 Não use $rootScope.$on no client script de um widget. | Não use $rootScope.$on no client script de um widget. |
$rootScope.$on só deve ser usado em um serviço. O uso de ouvintes de eventos em $rootScope no script do controlador do cliente de um widget pode causar vazamentos de memória se os ouvintes não forem destruídos manualmente. Cada vez que um widget é carregado, o controlador é inicializado e cada ouvinte inicializado no $rootScope não será destruído com o controlador, a menos que seja feito manualmente. Os serviços não têm outra alternativa a não ser disparar eventos em $rootScope e ouvir eventos em $rootScope. Isso ocorre porque os serviços são inicializados uma vez na aplicação e não têm seu próprio escopo. Não há problema em usar $rootScope.$on em um serviço. |
| Gerenciabilidade | HSD0002808 Scripts de cliente sem descrição | Scripts de cliente sem descrição | Scripts de cliente em que a descrição está vazia, é muito curta ou é igual ao nome do script. |
| Gerenciabilidade | HSD0002808 Inclusões de script sem descrição | Inclusões de script sem descrição | Inclusões de script em que a descrição está vazia, é muito curta ou é igual ao nome do script. |
| Gerenciabilidade | HSD0002827 Todos os eventos devem ter uma descrição | Todos os eventos devem ter uma descrição | Todos os eventos personalizados no registro de eventos devem ter o campo "descrição" preenchido. Isso garantirá que a finalidade do evento seja facilmente identificada por administradores que não criaram a entrada de registro e melhorará a manutenção da instância. |
| Gerenciabilidade | HSD0002828 Todos os eventos devem ter o campo “acionado por” preenchido | Todos os eventos devem ter o campo “acionado por” preenchido | Todos os eventos personalizados no registro de eventos devem ter o campo "fired_by" preenchido. Isso garantirá que o gatilho do evento seja facilmente identificado por administradores que não criaram a entrada de registro e melhorará a manutenção da instância. |
| Gerenciabilidade | HSD0003076 Credenciais de autenticação básica na definição de Mensagem de SOAP | Credenciais de autenticação básica na definição de Mensagem de SOAP | A autenticação básica para Mensagens de SOAP de saída deve usar perfis de autenticação básica em vez de colocar as credenciais na própria definição de função. |
| Gerenciabilidade | HSD0003081 Credenciais de autenticação básica na definição de Mensagem de REST | Credenciais de autenticação básica na definição de Mensagem de REST | A autenticação básica para Mensagens de REST de saída deve usar perfis de autenticação básica em vez de colocar as credenciais na própria definição de função. |
| Melhora | HSD0003307 A tabela Solicitação de mudança não deve ser estendida | A tabela Solicitação de mudança não deve ser estendida |
Pelo menos uma tabela secundária que estende a Solicitação de Mudança foi criada. Estender a Solicitação de Mudança com tabelas secundárias personalizadas não deve ser feito:
|
| Gerenciabilidade | HSD0003625 O script de Regra de negócio deve ser encapsulado na função executeRule | O código do script em Regras de negócio deve ser encapsulado na função executeRule | O código deve verificar se há regras de negócio com código não encapsulado na função executeRule. |
| Melhora | HSD0004147 Uso de GlideDialogWindow e GlideOverlay | Uso de GlideDialogWindow e GlideOverlay | Verifica o uso de GlideDialogWindow e GlideOverlay, que não podem ser testados pelo ATF. |
| Desempenho | HSD0004365 SCRIPT Cache liberado como parte de scripts | Cache liberado como parte de scripts | Se uma limpeza de cache for acionada como parte de uma execução de script não ootb, isso exigirá que a plataforma recrie o cache antes de retornar ao seu estado BAU. Esta atividade tem um impacto significativo no desempenho. |
| Desempenho | HSD0004726 SCRIPT O depurador não deve ser usado em scripts | O depurador não deve ser usado em scripts | A declaração do depurador é usada para informar ao ambiente JavaScript em execução para interromper a execução e iniciar um depurador no ponto atual do código. Isso perdeu a preferência como uma prática recomendada com o surgimento de ferramentas modernas de depuração e desenvolvimento. O código de produção não deve conter o depurador, pois isso fará com que o navegador pare de executar o código e abra um depurador apropriado. |
| Desempenho | HSD0006666 Verificar se current.update() é usado em uma regra de negócio | Verificar se current.update() é usado em uma regra de negócio | Se usado em regras de negócio, current.update() causa atualizações recursivas e pode ter impacto significativo no desempenho. |
| Gerenciabilidade | HSD0013213 SCRIPT Detectar cadeias de caracteres codificadas no uso de addInfoMessage() | Detectar cadeias de caracteres codificadas no uso de addInfoMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectar essas ocorrências em addInfoMessage() no lado do cliente e do servidor. |
| Gerenciabilidade | HSD0013213 XML - Detecção de cadeias de caracteres codificadas no uso de addInfoMessage() | Detectar cadeias de caracteres codificadas no uso de addInfoMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectar essas ocorrências em addInfoMessage() no lado do cliente e do servidor. |
| Gerenciabilidade | HSD0013215 SCRIPT Detectar cadeias de caracteres codificadas no uso de alert() | Detectar cadeias de caracteres codificadas no uso de alert() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em alert() no lado do cliente. |
| Gerenciabilidade | HSD0013215 XML Detectar cadeias de caracteres codificadas no uso de alert() | Detectar cadeias de caracteres codificadas no uso de alert() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em alert() no lado do cliente. |
| Gerenciabilidade | HSD0014228 SCRIPT Detectar cadeias de caracteres codificadas no uso de addErrorMessage() | Detectar cadeias de caracteres codificadas no uso de addErrorMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em addErrorMessage() no lado do cliente e do servidor. |
| Gerenciabilidade | HSD0014228 XML Detectar cadeias de caracteres codificadas no uso de addErrorMessage() | Detectar cadeias de caracteres codificadas no uso de addErrorMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em addErrorMessage() no lado do cliente e do servidor. |
| Gerenciabilidade | HSD0014229 SCRIPT Detectar cadeias de caracteres codificadas no uso de setError() | Detectar cadeias de caracteres codificadas no uso de setError() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em setError() no lado do servidor. |
| Gerenciabilidade | HSD0014229 XML Detectar cadeias de caracteres codificadas no uso de setError() | Detectar cadeias de caracteres codificadas no uso de setError() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em setError() no lado do servidor. |
| Gerenciabilidade | HSD0014231 SCRIPT Detectar cadeias de caracteres codificadas no uso de confirm() | Detectar cadeias de caracteres codificadas no uso de confirm() — SCRIPT | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em confirm() no lado do cliente. |
| Gerenciabilidade | HSD0014231 XML Detectar cadeias de caracteres codificadas no uso de confirm() | Detectar cadeias de caracteres codificadas no uso de confirm() — XML | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em confirm() no lado do cliente. |
| Gerenciabilidade | HSD0014232 SCRIPT Detectar cadeias de caracteres codificadas no uso de prompt() | Detectar cadeias de caracteres codificadas no uso de prompt() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências no prompt () no lado do cliente. |
| Gerenciabilidade | HSD0014232 XML Detectar cadeias de caracteres codificadas no uso de prompt() | Detectar cadeias de caracteres codificadas no uso de prompt() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências no prompt () no lado do cliente. |
| Gerenciabilidade | HSD0014233 SCRIPT Detectar cadeias de caracteres codificadas no uso de addMessage() | Detectar cadeias de caracteres codificadas no uso de addMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectar essas ocorrências em addMessage() no lado do servidor. |
| Gerenciabilidade | HSD0014233 XML Detectar cadeias de caracteres codificadas no uso de addMessage() | Detectar cadeias de caracteres codificadas no uso de addMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectar essas ocorrências em addMessage() no lado do servidor. |
| Gerenciabilidade | HSD0014234 SCRIPT Detectar cadeias de caracteres codificadas no uso de addFormMessage() | Detectar cadeias de caracteres codificadas no uso de addFormMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em addFormMessage() no lado do cliente. |
| Gerenciabilidade | HSD0014234 XML Detectar cadeias de caracteres codificadas no uso de addFormMessage() | Detectar cadeias de caracteres codificadas no uso de addFormMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectando essas ocorrências em addFormMessage() no lado do cliente. |
| Gerenciabilidade | HSD0014544 SCRIPT Detectar cadeias de caracteres codificadas no uso de addWarningMessage() | Detectar cadeias de caracteres codificadas no uso de addWarningMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectar essas ocorrências em addWarningMessage() no lado do cliente e do servidor. |
| Gerenciabilidade | HSD0014544 XML Detectar cadeias de caracteres codificadas no uso de addWarningMessage() | Detectar cadeias de caracteres codificadas no uso de addWarningMessage() | As mensagens/cadeias de caracteres codificadas no código não serão localizadas. Detectar essas ocorrências em addWarningMessage() no lado do cliente e do servidor. |