Skip to main content

Criando o plugin gulp-snyk: uma entrevista com Doug Wade

Escrito por
Headshot of Tim Kadlec

Tim Kadlec

26 de janeiro de 2017

0 minutos de leitura

Doug Wade é engenheiro sênior de front-end na Indeed. Doug criou o excelente plugin gulp-snyk, que permite integrar o Snyk ao processo de build do Gulp com facilidade. Ficamos muito animados quando encontramos o plugin e quisemos conversar com Doug para saber um pouco mais sobre ele.

Terminal mostrando uma compilação bem-sucedida do Gulp com patches do Snyk aplicados, concluída em 26 μs.

Por que você começou a usar o Snyk?

Quando fui mentor no Node Summit no ano passado, tive a oportunidade de assistir à ótima palestra do Guy e ver uma demonstração ao vivo de como explorar alguns avisos de segurança com minimatch que eu vinha ignorando nos meus projetos. Foi esclarecedor e assustador ao mesmo tempo.

Durante o happy hour, conversei com Guy sobre por que eu deveria trocar o nsp pelo Snyk, e ele me falou sobre o que considero o “recurso matador” do Snyk: snyk protect.

Por muito tempo, me incomodou publicar .nsprcs no Github para fazer meus builds do Travis passarem. Em projetos como o React Server, parecia que eu estava publicando uma lista de vulnerabilidades que invasores poderiam usar para atacar sites como www.redfin.com. Era justamente o contrário do que eu queria fazer! Mas, na prática, não havia outra opção.

No início da história do npm, Isaac Z. Schlueter (criador e CEO do npm) tomou uma decisão que, na minha opinião, foi essencial tanto para a explosão no número de pacotes disponíveis no npm quanto para tornar o acesso ao desenvolvimento de código aberto no npm a forma mais acessível de começar a contribuir. Isaac decidiu evitar o inferno de dependências do Java, dando a cada pacote dependente sua própria cópia independente das dependências declaradas.

Isso significa que, para um desenvolvedor que cria módulos no npm — como eu faço com muitos dos meus módulos de código aberto —, é possível iterar muito rapidamente, alterando e atualizando dependências sem se preocupar com os usuários presos a uma versão antiga enquanto esperam por um conjunto consistente de dependências.

A contrapartida é que, para desenvolvedores de aplicações que precisam remover dependências vulneráveis de toda a cadeia de dependências — como eu faço no meu trabalho —, não basta atualizar as dependências diretas; também é preciso garantir que cada dependência seja atualizada para a versão segura. Depois de levar uma bronca de um desenvolvedor que respeito muito por abrir uma issue e um PR para atualizar uma dependência vulnerável em um projeto da Node Foundation, percebi que o método do nsp — com arquivos nsprc e a espera para que as correções se propagassem pelo ecossistema — não era sustentável.

A abordagem do Snyk resolve isso corrigindo minha aplicação por meio de um script postinstall. Assim, não preciso esperar a mudança se propagar pelo ecossistema, e meu manifesto deixa de ser uma lista de vulnerabilidades existentes e passa a ser uma lista de vulnerabilidades que foram corrigidas.

Por que você decidiu criar o gulp-snyk?

Desenvolvo com Node desde a versão 0.8, principalmente porque era o único ambiente de desenvolvimento que consegui configurar com sucesso no meu computador Windows quando comecei a aprender a programar. Por isso, ainda tenho vários módulos por aí que usam Gulp como sistema de build.

Acredito que a principal função dos sistemas de build é padronizar tarefas comuns e facilitar sua descoberta. Em vez de esperar que novos colaboradores encontrem tarefas espalhadas entre um package.json e um gulpfile, eu queria ter uma única lista de tarefas. Não era muito código repetitivo criar minhas tarefas do Snyk no Gulp, mas era o suficiente para eu não querer copiá-lo e colá-lo entre projetos. Então, publiquei o plugin no npm.

Fiz a maior parte do desenvolvimento em duas noites, depois do trabalho. Descobri que existe uma API programática não documentada, que o gulp-snyk usa para executar o alvo de testes.

Abri uma issue para tentar coordenar isso com o Snyk, mas, para mim, essa situação destaca uma das coisas de que mais gosto em trabalhar com uma linguagem dinâmica. Eu não precisava saber nada sobre o Snyk. Bastava abrir um REPL (Read-Eval-Print-Loop) e começar a explorar.

Como você usa o gulp-snyk hoje?

Uso o gulp-snyk para proteger o Clefs e o name-suffixes, e pretendo adicioná-lo ao React Server. Uso o Snyk em 17 dos meus módulos Node e pretendo expandir para todos os 33.

Trinta e três módulos NPM! O que motiva você a contribuir tanto?

Acredito que nós, desenvolvedores, temos a obrigação ética de retribuir à comunidade, considerando o quanto recebemos dela. Mas, para ser sincero, acho que boa parte do que me motiva é profundamente egoísta.

Quando faço um PR para o Node, o npm ou o Lerna, tenho a oportunidade de explorar o código e receber uma revisão de código de algumas das pessoas mais talentosas e brilhantes do desenvolvimento de software. Quando publico pela primeira vez um projeto que criei no Reddit ou no Hacker News, recebo comentários sobre design de API, arquitetura e documentação muito mais alinhados à minha área de especialização do que os que recebo no trabalho.

De certa forma, acho que também faço isso para não puxar a escada depois de subir. Minha carreira foi construída sobre uma base de trabalho com software livre e de código aberto (FOSS) e aprendizado a partir dele. Então, de maneira muito concreta e significativa, sem o FOSS eu não estaria onde estou hoje.

Falando nisso, se alguém quiser ajudar a contribuir com o gulp-snyk, onde pode encontrar o projeto?

O plugin gulp-snyk está disponível no npm e pode ser instalado com npm (npm install --save-dev gulp-snyk) ou yarn (yarn add --dev gulp-snyk). Quem quiser ajudar a contribuir pode encontrar o código no GitHub.

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.

Leia mais

illustration hero ai
Blog

PHP corrige duas vulnerabilidades críticas de RCE sem autenticação (CVE-2026-109618, CVE-2026-109619): atualize agora

Duas falhas críticas no ciclo de requisições do PHP podem permitir execução remota de código sem autenticação. Atualize para uma versão corrigida ou instale um backport do fornecedor para versões mais antigas.

blog feature ai lilac
Blog

Transforme seu backlog de vulnerabilidades em pull requests com remediação agentiva

O Evo Remediation Agent está em Open Preview e traz a resolução automatizada de dependências para o Evo Agentic AppSec. Agora, as equipes de AppSec podem executar campanhas contínuas de remediação

AI Background min crop
Blog

A IA está acionando todos os riscos que você aceitou: sete insights do painel de segurança de IA sem filtros

A IA está tornando os ataques mais baratos e rápidos, expondo riscos que as organizações já carregam. Quatro líderes de segurança explicam por que a defesa na velocidade das máquinas e a correção mais rápida são essenciais.