Skip to main content

O suporte do Snyk Code à análise de vulnerabilidades em PHP entra em beta

Escrito por
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog hero php example

2 de setembro de 2021

0 minutos de leitura

O suporte do Snyk Code à análise de vulnerabilidades em PHP já está disponível em beta. Agora, é possível identificar problemas de segurança no código PHP de forma rápida e fácil.

Para começar, faça login no Snyk ou crie uma conta gratuita. Depois de entrar no painel, clique no botão Adicionar projeto no canto superior direito e conecte-se ao repositório que você quer analisar.

Menu do painel com o painel Adicionar projeto expandido, mostrando GitHub, Cloud Foundry, Bitbucket Cloud, CLI, repositórios públicos do GitHub e outras opções.

A partir daí, você pode se conectar a várias plataformas de repositório e analisar vulnerabilidades em PHP em todos os repositórios que gerencia, mesmo que sejam privados. Também é possível fazer a análise pela CLI ou por uma IDE. Conheça outras formas de integrar o Snyk Code ao seu ambiente de desenvolvimento.

Vamos conhecer três das principais vulnerabilidades que as novas análises de PHP podem identificar e ver o que observar nesta versão beta.

XSS

As vulnerabilidades de cross-site scripting (XSS) ocorrem quando um invasor injeta código malicioso em aplicações confiáveis. O ataque pode ter como alvo o navegador de uma pessoa ou injetar código no ambiente de execução da aplicação ou no sistema operacional.

Em PHP, isso pode ocorrer por vários motivos e costuma estar associado à sanitização inadequada de dados fornecidos pelo usuário. Abordei esse assunto com mais detalhes em uma publicação anterior sobre como evitar a injeção de código.

Vamos analisar um exemplo prático para entender melhor o que observar nesta pull request de um repositório.

Comparação lado a lado do código em functions.php mostrando a sanitização adicionada a uma variável POST do PHP.

No exemplo, você pode ver a comparação lado a lado: filter_var foi adicionado com o tipo de filtro FILTER_SANITIZE_NUMBER_INT para tratar a sanitização dos dados de entrada de $_POST. Esse filtro remove todos os caracteres, exceto os dígitos e os sinais de mais e menos.

Hash inseguro

O hash feito por código é uma forma de transformar com segurança uma sequência de caracteres em um valor ou chave que representa a sequência original. Isso pode ser feito, por exemplo, para armazená-la em um banco de dados ou no ambiente de execução para uso posterior. Muitas vezes, usa-se um hash reversível, para que os dados criptografados possam ser armazenados e descriptografados depois.

Tradicionalmente, o MD5 era o método padrão — principalmente em PHP — para criptografar itens como senhas de usuários, até que, em 2008, ficou comprovado que era “criptograficamente vulnerável e inadequado para uso futuro”.

Neste exemplo de correção feita para este repositório, vemos que null é definido como valor padrão na chamada da função de chave assinada. Isso significa que, se nenhum valor for passado para a função, o padrão será null, que poderá ser tratado adequadamente pela função de chave assinada.

Comparação lado a lado do diff de código para generated/gnupg.php, alterando o parâmetro $passphrase para que o valor padrão seja null.

Injeção de SQL

A injeção de SQL é semelhante ao XSS, mas a vulnerabilidade permite injetar uma carga maliciosa de SQL em um banco de dados. Em segurança de aplicações, isso pode levar à criação de um novo usuário com privilégios elevados, ao comprometimento de dados ou à exclusão de dados do banco.

É muito importante ter em mente, especialmente ao lidar com dados fornecidos pelo usuário que serão enviados a um banco de dados, que a sanitização adequada é essencial.

Em outro exemplo de repositório, você pode ver que a pull request implementada usa filter_input_array do PHP para tratar os dados de entrada enviados a essa função do banco de dados.

Comparação lado a lado de alterações no código PHP mostrando a adição de filtragem de entradas às ações de atualização, exclusão e restauração do banco de dados

Analise seu código PHP com o Snyk Code

Esses são apenas alguns exemplos comuns da extensa base de conhecimento sobre vulnerabilidades do Snyk Code. Recomendo que você experimente para ver o que é identificado no seu código.

Vale reforçar que o suporte a PHP no Snyk Code está em beta. Adoraríamos receber seu feedback para aprimorar ainda mais nosso suporte a PHP. Entre em contato se tiver alguma dúvida ou quiser conversar sobre os resultados da análise.

Confira também estes conteúdos sobre segurança em PHP:

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.