Skip to main content

Saúde das dependências — avaliando o risco dos pacotes com a Snyk

Escrito por
Headshot of Anna Debenham

Anna Debenham

16 de maio de 2019

0 minutos de leitura

O objetivo da Snyk é ajudar você a usar código aberto com segurança. Vulnerabilidades são um indicador de que uma dependência não está saudável, mas há outros fatores de risco envolvidos.

Por isso, temos uma equipe inteira trabalhando para fazer da Snyk o destino ideal para encontrar informações sobre suas dependências — de segurança e licenças a, agora, saúde.

Neste mês, começamos a lançar a primeira fase da nossa iniciativa de Saúde das dependências para ajudar desenvolvedores a identificar possíveis riscos associados às dependências incluídas no código.

Categorias de risco à saúde

As novas informações sobre riscos incluem:

  • Um indicador de pacotes descontinuados

  • Data do primeiro lançamento do pacote (maturidade)

  • Data da última atualização do pacote (atividade)

  • Apenas nos relatórios, a diferença entre a versão atual do pacote e a versão mais recente (desatualização)

Veja mais detalhes sobre essas novas informações:

Status problemático — este pacote foi descontinuado?

No npm, uma dependência é marcada como “descontinuada” quando o responsável pela manutenção deixa de atualizá-la. Agora, marcamos esses pacotes do snyk.io com um ícone de aviso na aba Dependencies dos seus relatórios. Também adicionamos um filtro para você listar apenas os pacotes descontinuados.

Relatório de dependências com o menu de filtros aberto, exibindo os tipos de projeto e o status de integridade da dependência definido como descontinuado.

Além disso, adicionamos um aviso à página do pacote correspondente quando a versão mais recente foi descontinuada:

Página do pacote de vulnerabilidades do cryptiles, marcado como obsoleto, com a descrição “Utilitários criptográficos de uso geral” e licenças BSD detectadas.

Alguns exemplos de pacotes que exibem esse aviso são cryptiles, node-uuid e hoek.

Maturidade — quando este pacote foi lançado pela primeira vez?

Quando perguntamos à nossa comunidade o que seria um sinal de alerta ao instalar um pacote novo, muitos citaram primeiro a maturidade: queriam saber se o pacote já existia havia algum tempo. Se tivesse sido publicado na semana anterior, provavelmente não gostariam de instalá-lo. Se tivesse sido publicado há mais de um ano, isso indicaria que era mais maduro. Por outro lado, alguns pacotes podem ser considerados “maduros” por engano só por existirem há muito tempo, mesmo tendo apenas uma versão publicada. Por isso, também mostramos a versão semântica (semver) mais recente. Se ela for inferior a uma faixa como 0.1.0, isso pode indicar que o pacote ainda está pouco desenvolvido, então talvez seja melhor esperar antes de usá-lo. Agora, mostramos esses dados no relatório:

Tabela de dependências que destaca as versões mais recentes e as datas da última publicação de pacotes como onetime, rc, restore-cursor e snyk-tree.

Esses dados também são exibidos na página do pacote:

Página do banco de dados de vulnerabilidades da Snyk para o pacote npm validator, com detalhes sobre validação e sanitização de strings e informações sobre versões

Atividade — o pacote continua sendo mantido?

A data da última publicação também nos informa o nível de atividade do pacote. Muitos pacotes estão, na prática, arquivados, mas seus responsáveis pela manutenção não os marcaram explicitamente dessa forma. É provável que um pacote que não recebe atualizações há, por exemplo, mais de 12 meses não seja atualizado novamente. Pode ser uma biblioteca criada para uma finalidade específica e considerada completa, mas, se as dependências dela não recebem atualizações, o risco é maior.

Desatualização — há atualizações disponíveis?

Para quem prefere usar sempre a versão mais recente, agora mostramos uma comparação entre a versão da dependência instalada nos seus projetos e a versão mais recente disponível para o mesmo pacote (sem incluir versões alfa ou pré-lançamentos).

Tabela de dependências com destaque para as colunas de versão e versão mais recente, mostrando pacotes desatualizados, como cryptiles, hoek, hawk, accept e ammo.

Como esses dados estão diretamente relacionados aos seus projetos, eles ficam disponíveis apenas na área de relatórios da Snyk.

Continue avaliando a qualidade com a Snyk

Assim como uma avaliação de 4,5 estrelas não seria um bom indicador de qualidade de um produto se viesse de uma única resenha, os dados sobre a saúde das dependências devem ser considerados em um contexto mais amplo. Por isso, estamos ampliando nosso banco de dados com diferentes indicadores de qualidade para ajudar nossos clientes a avaliar e tomar decisões mais embasadas sobre os riscos. Recomendamos analisar cada pacote em seu contexto mais amplo — pode haver bons motivos para uma pontuação baixa em determinada métrica.

E tem muito mais por vir…

Nos próximos meses, vamos ampliar a abrangência e o nível de detalhe das informações sobre a saúde das dependências. Para isso, adicionaremos mais pontos de dados às categorias atuais, incluiremos novas categorias, como Popularidade, e ofereceremos políticas para automatizar a avaliação.

Como começar

Os detalhes estão na aba Dependencies da área de relatórios da Snyk (se o seu plano Snyk incluir relatórios) e também nas páginas de pacotes, disponíveis para toda a comunidade de código aberto.

No momento, os detalhes estão disponíveis apenas para pacotes npm. Nos relatórios, esses dados são atualizados sempre que a Snyk cria um novo snapshot do projeto em que a dependência foi encontrada (por padrão, a cada 24 horas).

Se o seu plano incluir acesso à nossa API, você pode usar a API de dependências para criar seus próprios relatórios com scripts. Também é possível exportar um CSV com todas as suas dependências para ajudar sua equipe a priorizar as dependências problemáticas.

Experimente e conte para a gente que outros dados você gostaria de ver.

Comece a resolver desafios de capture the flag

Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.