Skip to main content

Codificação segura com Snyk Code: funcionalidade de ignorar com um toque diferente

Escrito por

Frank Fischer

Blog Design Snyk Code

30 de março de 2021

0 minutos de leitura

Ao analisar seu código com nossa ferramenta de codificação segura, o Snyk Code pode encontrar diversos tipos de vulnerabilidades de segurança. E, embora o Snyk Code seja rápido, preciso e conte com muitos recursos, às vezes é necessário suprimir avisos específicos. Um caso de uso comum ocorre em códigos de teste, quando você usa explicitamente senhas codificadas para testar suas rotinas ou sabe da existência de um problema, mas decide não corrigi-lo. Para essas situações, o Snyk Code — assim como os outros produtos da plataforma Snyk — permite ignorar sugestões.

Há mais coisas para ignorar do que você imagina (pelo menos, mais do que eu imaginava). Vamos ver como ignorar um problema e, em seguida, conhecer os bastidores da implementação desse recurso.

Como usar o recurso de ignorar no Snyk Code

Na interface web do Snyk Code, você encontrará um novo botão chamado Ignorar (no canto inferior direito, com o ícone de um olho riscado):

Identificação de injeção de SQL pelo Snyk Code, mostrando código JavaScript vulnerável, explicação sobre entrada HTTP não sanitizada e os botões Ignorar e Detalhes completos.

Ele permite configurar o mecanismo de teste estático de segurança de aplicações (SAST). Vamos explorar como funciona daqui a pouco. Por enquanto, vamos nos concentrar no uso.

Caixa de diálogo do Snyk Code para marcar um problema como não vulnerável, com campo de comentário, opções de duração da desconsideração e botão Salvar

Ao clicar em Ignorar, você verá uma janela sobreposta (mostrada acima). Primeiro, classifique o problema como não vulnerável, ignorar temporariamente (se quiser apenas suprimir a mensagem por enquanto) ou ignorar permanentemente (não será corrigido). Em seguida, você pode escrever um comentário para si ou para seus colegas (recomendamos muito incluir uma breve explicação, pois as decisões da semana passada podem parecer misteriosas sem alguns comentários). Por fim, defina por quanto tempo o problema será ignorado (14, 30, 60 ou 90 dias, ou para sempre).

Se você optar por ignorar um problema, ele não será exibido por padrão. À esquerda, há um seletor de status para problemas ignorados; você pode exibi-los e remover ou editar a sinalização de ignorado. Para saber mais sobre esse recurso, consulte a documentação sobre como ignorar problemas no Snyk Code.

Ignorar sugestões não é tão simples quanto parece

É claro que, para marcar algo como ignorado (ou excluí-lo do relatório de problemas), é preciso identificar o problema de forma estável. A cada nova análise, o mecanismo precisa encontrar o mesmo problema e marcá-lo novamente. Obviamente, o algoritmo não pode simplesmente memorizar o nome do arquivo e o número da linha, já que o código está sempre mudando, e o número da linha também. A solução tradicional, usada por linters, é adicionar um comentário ao lado do problema para instruir o sistema a ignorá-lo. Essa também foi a implementação original que adotamos. No entanto, recebemos comentários de alguns desenvolvedores que não gostavam de espalhar comentários pelo código apenas para configurar a análise estática. Por isso, criamos uma solução exclusiva e, na nossa opinião, superior.

Os sistemas tradicionais usam o código-fonte onde ocorre o problema (e algumas linhas ao redor), calculam um hash e o usam para identificar o problema. Se o texto mudar, o ID do problema também muda e, com isso, todos os sinalizadores associados a ele são excluídos. Mas nós, seres humanos, pensamos de um jeito um pouco diferente. Se eu adicionar um comentário ao lado do problema, na prática não alterei o problema em si. No entanto, o hash muda, e o problema é identificado como um novo.

Para contornar isso, a maioria das outras ferramentas compara apenas algumas linhas do relatório. Isso pode fazer com que relatórios semelhantes sejam ignorados quando reaparece outro problema com uma assinatura parecida (ignorando demais) ou que a correspondência se perca quando ocorre uma alteração não relacionada no código (gerando relatórios indesejados). Para oferecer um mecanismo aceitável, algumas ferramentas chegam a usar listas compiladas com dezenas de exceções para comparar relatórios. As duas abordagens têm falhas. Elas trabalham fundamentalmente no nível do texto, sem levar em conta o analisador que produziu o resultado. É como tratar as palavras de uma frase como uma sequência de caracteres, sem tentar entender seu significado.

Como o Snyk Code implementa o recurso de ignorar

Uma das etapas da análise estática de código é transformar o código de entrada no que chamamos de representação intermediária. Essa estrutura de dados captura o fluxo de dados ou de controle do código, mas abstrai alguns detalhes. Nossa ideia é usar essa representação para gerar o hash. Assim, a implementação reconhece o mesmo problema mesmo quando você refatora o código ou renomeia uma variável. Além disso, flexibilizamos os requisitos de correspondência exata, para que a maioria das pequenas alterações no código com um problema ignorado não faça o relatório reaparecer sem necessidade.

Ao comparar no nível semântico, podemos reconhecer o mesmo problema de antes, assim como um desenvolvedor faria. E você não precisa mais adicionar comentários ao código-fonte. Por exemplo, os dois trechos de código a seguir — apesar das diferenças textuais — indicam o mesmo problema, pois apenas renomeamos as variáveis:

var fs = require('fs');

var logFileName = req.query.file || 'standard_log.log';
var logfile = fs.readFile(logFileName, "utf8", function(err, data) {...

var filesystem = require('fs');

var generalLogFileName = req.query.file || 'standard_log.log'; 
var handleLogFile = filesystem.readFile(generalLogFileName, "utf8", function(err, data) {...

Não vamos ignorar seu feedback

Esperamos que essa nova abordagem à funcionalidade de ignorar seja mais útil para você. Este é apenas um exemplo de como nossos usuários compartilharam comentários valiosos, que pudemos colocar em prática. Conte para a gente o que achou do novo recurso e como podemos melhorar o produto no futuro. Adoramos receber seu feedback.

Proteja seu código com inteligência de ponta

Conheça toda a gama de recursos de análise estática (SAST) do Snyk Code em apenas 30 minutos.