# Como localizar e corrigir sua primeira vulnerabilidade de código

Conheça os conceitos básicos de proteger seu código resolvendo um code scanning alerta em um repositório de demonstração.

Ao aprender a codificar, é normal introduzir inadvertidamente vulnerabilidades em seus projetos. Se esses issues de segurança não forem resolvidos antes de compartilhar seu trabalho, os invasores poderão usá-los para manipular seu código e acessar dados confidenciais, assim, é fundamental identificá-los e corrigi-los o quanto antes.

Felizmente, há ferramentas como code scanning que encontram, explicam e até corrigem vulnerabilidades automaticamente em seus repositórios públicos. Neste tutorial, você aprenderá a manter seu trabalho seguro com code scanning.

## Como configurar o repositório de demonstração

Vamos começar bifurcando um projeto de demonstração com uma vulnerabilidade de segurança. Esse projeto cria uma página da Web simples, porém, como não implantaremos o projeto, não há **nenhum risco de segurança** neste exercício.

1. Navegue até o repositório [`new2code/code-scanning-demo`](https://github.com/new2code/code-scanning-demo).
2. No canto superior direito da página, clique <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-repo-forked" aria-label="repo forked icon" role="img"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path></svg>**Fork**.
3. Na página exibida, clique em **Create fork**.

## Como localizar vulnerabilidades no código

Agora que configuramos o projeto, vamos ativar code scanning em seu fork para verificar se há vulnerabilidades no código.

1. De volta em GitHub, na página inicial do seu repositório, clique em **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality**.
2. Na linha "Code scanning alertas", clique em **Configurar code scanning**.
3. Na seção "Ferramentas", ao lado de "CodeQL análise", selecione **Configurar** e clique em **Padrão**.
4. No pop-up exibido, clique em **Habilitar CodeQL**. Isso disparará um GitHub Actions fluxo de trabalho que examina seu código em busca de vulnerabilidades.
5. Para verificar o status do fluxo de trabalho, na barra de navegação, clique <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-play" aria-label="play icon" role="img"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg> em **Ações**.
6. Depois que o fluxo de trabalho for concluído, na barra de navegação, clique em **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality**.
7. Para exibir o code scanning alerta descoberto pelo fluxo de trabalho, na navegação lateral, clique <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-codescan" aria-label="codescan icon" role="img"><path d="M8.47 4.97a.75.75 0 0 0 0 1.06L9.94 7.5 8.47 8.97a.75.75 0 1 0 1.06 1.06l2-2a.75.75 0 0 0 0-1.06l-2-2a.75.75 0 0 0-1.06 0ZM6.53 6.03a.75.75 0 0 0-1.06-1.06l-2 2a.75.75 0 0 0 0 1.06l2 2a.75.75 0 1 0 1.06-1.06L5.06 7.5l1.47-1.47Z"></path><path d="M12.246 13.307a7.501 7.501 0 1 1 1.06-1.06l2.474 2.473a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM1.5 7.5a6.002 6.002 0 0 0 3.608 5.504 6.002 6.002 0 0 0 6.486-1.117.748.748 0 0 1 .292-.293A6 6 0 1 0 1.5 7.5Z"></path></svg>**Code scanning** e clique em **Scripts entre sites refletidos**.

## Noções básicas sobre um code scanning alerta

Agora que code scanning identificou uma vulnerabilidade no código, vamos dividir as informações fornecidas no alerta.

### Localidade

O alerta mostra uma pequena visualização de um arquivo, centralizada nas linhas de código que criam a vulnerabilidade. Em nosso caso, a vulnerabilidade é detectada na linha 8 do nosso arquivo `index.js`, em que implementamos a entrada fornecida pelo usuário em nosso site.

Se dermos uma olhada mais de perto, poderemos ver que o issue subjacente ocorre na linha 7, quando atribuímos `greet` à entrada do usuário sem verificar se há código mal-intencionado. Para ver uma exibição passo a passo da vulnerabilidade em nosso código, no texto explicativo abaixo das linhas vulneráveis, clique em **Mostrar caminhos**.

![Captura de tela do local de um alerta do code scanning. O botão "Show paths" está destacado em laranja.](/assets/images/help/repository/code-scanning-alert-location-learners.png)

### Descrição e recomendação

Abaixo da visualização do arquivo, code scanning fornece uma descrição mais detalhada da vulnerabilidade. Para ver a correção recomendada, bem como exemplos do código vulnerável e fixo, clique em **Mostrar mais**<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-chevron-down" aria-label="chevron down icon" role="img"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg>.

![Captura de tela dos detalhes de um alerta do code scanning. Uma lista suspensa rotulada como "Show more" é descrita em laranja.](/assets/images/help/repository/code-scanning-alert-details-learners.png)

Em nosso caso, a recomendação é limpar a entrada do usuário antes de usá-la. Isso significa que precisamos verificar a entrada de código mal-intencionado e limpá-lo, se necessário.

> \[!TIP] Se você não entender completamente a correção recomendada, tente [pedir Copilot Chat](https://github.com/copilot) para explicá-la.

### Linha do tempo

Por fim, você pode ver a linha do tempo do alerta na parte inferior da página. Nossa linha do tempo contém a confirmação do local em que a vulnerabilidade foi detectada pela primeira vez e será atualizada automaticamente quando corrigirmos a vulnerabilidade.

![Captura de tela da linha do tempo de um alerta do code scanning.](/assets/images/help/repository/code-scanning-alert-timeline-learners.png)

## Como corrigir uma vulnerabilidade automaticamente

Para proteger nosso projeto de forma rápida e fácil, vamos usar GitHub Copilot Autofix para code scanning.

1. Abaixo do título do alerta, na caixa que sugere "Acelere a resolução deste alerta usando Copilot Autofix para CodeQL", clique em <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield-check" aria-label="shield check icon" role="img"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>**Gerar correção**.
2. Depois que Copilot gerar a sugestão de correção, ela descreverá as alterações que está sugerindo, mostrará uma prévia das alterações e informará sobre quaisquer dependências adicionadas. Tire um momento para ler o trabalho de Copilot.
3. Para criar um pull request com a correção, clique em **Commit to new branch** e, em seguida, clique em **Commit change**.
4. Depois que a pull request de rascunho for criada, na parte inferior da página, clique em **Ready for review** para torná-la mesclável.
5. Para aplicar a correção, clique em **Merge pull request**e clique em **Confirm merge**.

   Depois que a solicitação de pull for mesclada e o code scanning fluxo de trabalho for executado novamente, o alerta será fechado automaticamente e a confirmação de correção da vulnerabilidade será adicionada à linha do tempo.

> \[!NOTE] Em projetos reais, você sempre deve examinar as alterações sugeridas por Copilot antes de confirmá-las ao seu código.

## Próximas etapas

Agora que você testou o code scanning em um repositório de demonstração, **habilite-o em seus próprios projetos** para localizar e corrigir rapidamente as vulnerabilidades atuais e futuras.

Agora que você protegeu o código que escreveu, dê o próximo passo em direção ao código seguro verificando a segurança de suas **dependências**. Confira [Como localizar e corrigir sua primeira vulnerabilidade de dependência](/pt/get-started/learning-to-code/finding-and-fixing-your-first-dependency-vulnerability).