<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matheus Silva</title>
    <description>The latest articles on DEV Community by Matheus Silva (@matheusdsilva01).</description>
    <link>https://dev.to/matheusdsilva01</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F888049%2Fe98bc914-9bf4-4212-afef-0e67888f8b05.png</url>
      <title>DEV Community: Matheus Silva</title>
      <link>https://dev.to/matheusdsilva01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matheusdsilva01"/>
    <language>en</language>
    <item>
      <title>O básico para gerenciar e se proteger de vulnerabilidades em dependências no seu projeto Node.</title>
      <dc:creator>Matheus Silva</dc:creator>
      <pubDate>Mon, 20 Apr 2026 19:20:05 +0000</pubDate>
      <link>https://dev.to/matheusdsilva01/o-basico-para-gerenciar-e-se-proteger-de-vulnerabilidades-em-dependencias-no-seu-projeto-node-3gnk</link>
      <guid>https://dev.to/matheusdsilva01/o-basico-para-gerenciar-e-se-proteger-de-vulnerabilidades-em-dependencias-no-seu-projeto-node-3gnk</guid>
      <description>&lt;p&gt;Verificar e eliminar vulnerabilidades em dependências pode ser mais simples do que você imagina e lhe garanto que isso pode salvar seu tempo e te livrar de algumas dores de cabeça no futuro.&lt;/p&gt;

&lt;p&gt;Antes de tudo, é importante saber gerenciar as dependências do seu projeto e entender como o seu gerenciador de pacote faz uma parte do trabalho para você, nesse artigo vou abordar os seguintes tópicos:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Table of contents&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SemVer&lt;/li&gt;
&lt;li&gt;Relação entre package.json e package-lock.json&lt;/li&gt;
&lt;li&gt;Lidando com vulnerabilidades&lt;/li&gt;
&lt;li&gt;Conclusão&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de falar sobre as vulnerabilidades em si, acho importante uma explicação básica sobre o que significa a sigla SemVer (Semantic Version) e como funciona a relação do &lt;code&gt;package.json&lt;/code&gt;com o &lt;code&gt;package-lock.json&lt;/code&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  SemVer
&lt;/h2&gt;

&lt;p&gt;SemVer, ou Versionamento Semântico, é uma especificação para ajudar desenvolvedores a entender as mudanças e atualizações durante o versionamento de pacote.&lt;/p&gt;

&lt;p&gt;Uma versão de pacote é definida em 3 números &lt;code&gt;Major.Minor.Patch&lt;/code&gt; (ex: 2.3.14), bom o que significa cada número desse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Major (2): Uma versão com atualizações que não tem compatibilidade com versões major anteriores. Então se você atualizar da 1.0 para 2.0 pode ser que isso cause algum problema quando você executar seu projeto, seja por alguma funcionalidade obsoleta ou alguma mudança na sua utilização, etc.&lt;/li&gt;
&lt;li&gt;Minor (2.3): Uma versão que adiciona recursos que tem compatibilidade com versões minor anteriores, ou seja, atualizações dentro da mesma versão major não devem quebrar seu sistema.&lt;/li&gt;
&lt;li&gt;Patch (2.3.14): Normalmente uma versão para lançar correções de bugs, vulnerabilidades e claro mantendo compatibilidade com versões de patch anteriores.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui não tem muito segredo, então quando você ouvir algo do tipo “tal pacote já lançou uma versão de patch(x) pra corrigir aquela vulnerabilidade da V14.3” é uma versão 14.3.x (entenda x como qualquer número).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intervalo de versões (^, ~)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algo fora dessa especificação são os sinais de circunflexo &lt;code&gt;^&lt;/code&gt; e til &lt;code&gt;~&lt;/code&gt; , que você comumente verá em projetos, são usados para definir intervalo de versões e sinalizar para o npm como ele deve lidar com as atualizações da dependência.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;^&lt;/code&gt; circunflexo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Permite atualizações até versões minor mas não major, por exemplo: 2.3 pode atualizar para 2.4 mas por conta própria não vai fazer uma atualização de versão para major 3.x&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~&lt;/code&gt; til&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Permite atualizações apenas de versões patch dentro da minor especificada, por exemplo: 2.3.14 pode atualizar para 2.3.20. E claro não vai atualizar para uma versão 2.4&lt;/p&gt;

&lt;p&gt;Também é possível não especificar um intervalo de versões, dessa forma a instalação é fixada em uma versão e só pode ser alterada manualmente com uso do &lt;code&gt;npm install&lt;/code&gt; por exemplo.&lt;/p&gt;

&lt;p&gt;Definir um intervalo de versões vai trazer mais segurança e praticidade quando precisar dependências mas caso precise de um controle mais rígido pode travar em uma versão sem problemas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relação entre package.json e package-lock.json
&lt;/h2&gt;

&lt;p&gt;São arquivos que se completam. &lt;/p&gt;

&lt;p&gt;O &lt;code&gt;package.json&lt;/code&gt; salva as dependências do projeto, é onde você vai ter um overview geral e pode definir o intervalo de versões.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;package-lock.json&lt;/code&gt; é quem vai controlar a árvore de dependências e definir qual a versão exata que vai ser instalada, claro seguindo a referência definida no &lt;code&gt;package.json&lt;/code&gt;, garantindo que todas as instalações tenham as mesmas versões de dependências, por isso é muito importante você manter o &lt;code&gt;package-lock.json&lt;/code&gt; commitado/salvo no seu repositório além de deixar processo de instalação mais rápido vai dar consistência entre diferentes ambientes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lidando com vulnerabilidades
&lt;/h2&gt;

&lt;p&gt;O npm nos forcene basicamente duas funcionalidades para identificar e resolver vulnerabilidades em nossas dependências.&lt;/p&gt;

&lt;h3&gt;
  
  
  npm audit e npm audit fix
&lt;/h3&gt;

&lt;p&gt;Para verifica se as versões instaladas das dependências no projeto contém alguma vulnerabilidade conhecida, &lt;code&gt;npm audit&lt;/code&gt; eu diria que é o primeiro passo. Executar esse comando no seu terminar vai gerar algo como:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lo18ofkd9f4e2y3sbmc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lo18ofkd9f4e2y3sbmc.png" alt="npm audit report" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse exemplo estou com a versão 16.1.6 do Next, aqui o relatório indica que nesse projeto só tenho vulnerabilidade nessa dependência e essa versão está dentro de um range de 6 vulnerabilidades conhecidas e como pelo menos uma delas tem gravidade de nível &lt;code&gt;high&lt;/code&gt; a gravidade geral é essa, mesmo se algumas delas tiverem nível menor, também retorna links com mais informações sobre elas. &lt;/p&gt;

&lt;p&gt;Para eliminar essas vulnerabilidades, como no meu &lt;code&gt;package.json&lt;/code&gt; defini o pacote do Next como &lt;code&gt;^16.1.6&lt;/code&gt; (olha o ^) e existe uma correção para essas vulnerabilidades dentro desse intervalo de versão definido, isso permite que apenas executando &lt;code&gt;npm audit fix&lt;/code&gt; ele atualize a dependência para uma versão sem vulnerabilidades.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzb4y0cmsdjedh2iwbuj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzb4y0cmsdjedh2iwbuj.png" alt="npm audit fix report" width="428" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui foi feita uma atualização para &lt;code&gt;16.2.4&lt;/code&gt; mas e se tivesse definido com &lt;code&gt;~&lt;/code&gt; ? Fica aí a lição de casa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Escrevi esse artigo com o propósito de fixação do conteúdo que estudei e deixo aqui alguns tópicos para se aprofundar sobre o assunto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependabot&lt;/li&gt;
&lt;li&gt;.npmrc (save-exact, audit-level)&lt;/li&gt;
&lt;li&gt;Snyk&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Referências:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=kK4Meix58R4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=kK4Meix58R4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://semver.org/lang/pt-BR/" rel="noopener noreferrer"&gt;https://semver.org/lang/pt-BR/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.npmjs.com/cli/v11/configuring-npm/package-lock-json" rel="noopener noreferrer"&gt;https://docs.npmjs.com/cli/v11/configuring-npm/package-lock-json&lt;/a&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>npm</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Controlando cache através do navegador</title>
      <dc:creator>Matheus Silva</dc:creator>
      <pubDate>Fri, 12 Dec 2025 21:22:10 +0000</pubDate>
      <link>https://dev.to/matheusdsilva01/controlando-cache-atraves-do-navegador-1h6j</link>
      <guid>https://dev.to/matheusdsilva01/controlando-cache-atraves-do-navegador-1h6j</guid>
      <description>&lt;p&gt;&lt;code&gt;Cache&lt;/code&gt; você já deve ter ouvido esse termo várias vezes e recentemente resolvi aprender como o navegador implementa esse mecanismo e então resolvi escrever esse post sobre o que aprendi.&lt;/p&gt;

&lt;p&gt;Contextualizando, &lt;code&gt;Cache&lt;/code&gt; é um mecanismo utilizado com a finalidade de trazer velocidade ao acesso um conteúdo que é frequentemente utilizado.&lt;/p&gt;

&lt;p&gt;Quando estamos implementando cache em nosso sistema é importante mantê-lo o mais próximo possível do cliente e para isso podemos usar o sistema de cache dos navegadores assim mantendo velocidade no acesso ao conteúdo e salvando recursos de nossos servidores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipos de cache
&lt;/h2&gt;

&lt;p&gt;Para gerenciar cache no navegador usamos o header &lt;code&gt;Cache-Control&lt;/code&gt; e podemos trabalhar com os seguintes valores para ele:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;default&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Por padrão o seguinte fluxo será seguido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se for encontrada em cache uma versão atualizada dos dados essa será retornada.&lt;/li&gt;
&lt;li&gt;Caso seja obsoleta será feita uma espécie de consulta ao servidor e verificar se os dados do cache sofreram alterações, se sofreram alteração os dados atualizados vão ser retornados e atualizados no cache, caso contrário o dado do cache será retornado.&lt;/li&gt;
&lt;li&gt;Se não for encontrado nada em cache será feita a requisição ao servidor e o cache vai ser atualizado com os dados retornados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;no-store&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O navegador vai ignorar o cache, efetuar a requisição para o servidor e não irá armazenar o retorno no cache.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;reload&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O navegador vai ignorar o cache, efetuar a requisição para o servidor e vai atualizar o cache com o retorno da requisição.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;no-cache&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O navegador verifica no cache se existe alguma versão atualizada dos dados ou obsoleta depois disso é verificado com o servidor se há uma nova versão dos dados, se houver será retornado a nova versão pelo servidor e o cache será atualizado, se não a versão do cache vai ser retornada.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;force-cache&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O navegador verifica o cache, se encontrar uma versão atualizada ou obsoleta dos dados ela vai ser retornada se não encontrar nada no cache ele vai fazer a requisição normalmente no servidor retornando os dados e salvando no cache.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;max-age=&amp;lt;valor em segundos&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pode ser usado em conjunto com os valores acima e define por quanto tempo aquele dado é definido como “atualizado”.&lt;/p&gt;

&lt;p&gt;Também e possível gerenciar o cache usando o header &lt;code&gt;Expires&lt;/code&gt; que pode ser definido com um tempo específico, exemplo: &lt;code&gt;Expires: Thu, 25 Dec 2025 18:18:18 GMT&lt;/code&gt; ou seja a partir do tempo especificado aquele dado passa a ser obsoleto.&lt;/p&gt;

&lt;p&gt;Esse foi o conteúdo que estudei espero que tenha agregado de alguma forma. 😊 &lt;/p&gt;

&lt;p&gt;Referências: &lt;br&gt;
&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Guides/Caching" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Guides/Caching&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Request/cache" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/API/Request/cache&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>browser</category>
      <category>programming</category>
      <category>web</category>
    </item>
  </channel>
</rss>
