O que você precisa saber sobre a segurança do código PHP
4 de setembro de 2024
0 minutos de leituraNo desenvolvimento web, o PHP é uma linguagem de script bastante usada. Por isso, é essencial entender os possíveis riscos de segurança associados a ele e como mitigá-los. Seja ao implantar aplicações CMS com WordPress ou desenvolver aplicações corporativas com o framework Laravel para PHP, os desenvolvedores precisam entender a importância da segurança do PHP e o impacto nos negócios de algumas vulnerabilidades importantes do interpretador.
Por que é importante se proteger contra vulnerabilidades de segurança no PHP? Devido à sua popularidade e ampla utilização, o PHP costuma ser alvo de hackers e agentes mal-intencionados. As vulnerabilidades podem surgir por vários motivos, como práticas inadequadas de programação, falta de higienização dos dados inseridos pelos usuários e uso de versões desatualizadas.
Por exemplo, imagine que dados de entrada não higienizados sejam usados em uma consulta SQL. Isso pode levar a uma injeção de SQL, uma vulnerabilidade comum.
No código apresentado, um usuário mal-intencionado pode manipular o parâmetro id na URL para realizar uma injeção de SQL. Para evitar isso, é essencial higienizar os dados inseridos pelos usuários, por exemplo, usando mysqli_real_escape_string ou consultas preparadas:
As vulnerabilidades de segurança nas suas aplicações PHP podem ter um impacto significativo nos negócios. Elas podem levar a violações de dados e resultar em multas pesadas por descumprimento de normas de proteção de dados, como o GDPR e a CCPA. Uma violação também pode abalar a confiança dos clientes e causar perda de negócios. Além disso, os custos para corrigir vulnerabilidades podem ser altos, principalmente quando elas são identificadas tardiamente no ciclo de desenvolvimento — por isso, é essencial priorizar a segurança desde o início do projeto.
Perguntas frequentes relacionadas
Como posso proteger minha aplicação PHP contra vulnerabilidades?
Sempre valide e higienize as entradas dos usuários. Use instruções preparadas com consultas parametrizadas para evitar injeções de SQL. Use as versões mais recentes do PHP e de seus frameworks, pois elas incluem correções de segurança para vulnerabilidades conhecidas. Use regularmente ferramentas como o Snyk para verificar se há vulnerabilidades no código, nas dependências da aplicação e nas configurações da infraestrutura em nuvem. Siga as práticas de codificação segura.
Por que a segurança do PHP é importante?
A segurança do PHP é essencial porque uma aplicação PHP vulnerável pode levar a vazamentos de dados, perda da confiança dos clientes e multas regulatórias. Como o PHP é muito usado no desenvolvimento de aplicações web, ele costuma ser alvo de ataques. Garantir a segurança do seu código PHP ajuda a proteger os dados dos usuários e o seu negócio.
O que é um scanner de vulnerabilidades em PHP?
Um scanner de vulnerabilidades em PHP é uma ferramenta que analisa automaticamente seu código PHP em busca de vulnerabilidades de segurança conhecidas. Alguns exemplos são o Snyk e o verificador de segurança integrado ao Composer. Essas ferramentas ajudam você a identificar e corrigir problemas de segurança nos seus aplicativos PHP.
O que é um comunicado de segurança do PHP?
Um comunicado de segurança do PHP é um anúncio público sobre uma vulnerabilidade de segurança em um componente PHP. Ele traz detalhes sobre a vulnerabilidade, seu possível impacto e como corrigi-la. O PHP.net e outros sites relacionados ao PHP costumam publicar esses comunicados. A Snyk também mantém um banco de dados de comunicados de segurança do PHP com base no gerenciador de pacotes Composer.
Vulnerabilidades de segurança comuns no PHP
Vamos conhecer algumas vulnerabilidades comuns de segurança no PHP e descobrir recursos úteis de segurança para desenvolvedores que ajudam a mitigá-las.
Cookies e gerenciamento de sessões
Cookies e sessões são elementos fundamentais do desenvolvimento web, pois permitem manter o estado entre requisições. No entanto, se não forem gerenciados corretamente, podem criar falhas graves de segurança.
No PHP, especialmente ao usar um framework web como o Laravel, é importante proteger cookies e dados de sessão ao gerenciar a autenticação. Confira algumas dicas:
Sempre use cookies seguros e HTTP-only.
Prefira definir o atributo
SameSitecomoLaxouStrictpara evitar ataques de falsificação de requisição entre sites (CSRF).Gere um novo ID de sessão após o login ou a alteração da senha para evitar ataques de fixação de sessão.
No Laravel, você pode definir essas configurações no arquivo config/session.php:
Consulte outras orientações de segurança web sobre como proteger aplicações Laravel contra vulnerabilidades de segurança no PHP.
Injeção de SQL
A injeção de SQL é uma técnica de injeção de código usada por invasores para explorar vulnerabilidades em consultas ao banco de dados de uma aplicação web. Ela pode permitir acesso não autorizado a dados confidenciais e até a manipulação ou exclusão de dados.
Veja o seguinte código PHP vulnerável:
Um invasor pode manipular o parâmetro id na URL para alterar a consulta SQL. Para evitar isso, use consultas preparadas:
Para saber mais sobre injeção de SQL e segurança no PHP, confira este conteúdo gratuito sobre segurança no PHP.
Injeção de código
A injeção de código é outra vulnerabilidade comum que permite a um invasor inserir e executar código arbitrário na sua aplicação. No PHP, isso costuma acontecer quando dados fornecidos pelos usuários são passados à função eval() ou a chamadas do sistema sem validação ou higienização adequadas.
Vamos analisar um caso de uso em um projeto PHP com Laravel. Um desenvolvedor enfrentou um desafio ao tentar gerar dinamicamente uma URL de imagem dentro de um template Blade. O objetivo era exibir uma imagem cujo caminho seria construído com conteúdo variável e a função auxiliar de URL do Laravel. Para isso, o desenvolvedor usou a função eval() do PHP da seguinte forma:
A intenção do desenvolvedor era criar uma maneira flexível de gerar URLs de imagens com base na variável $value. No entanto, o uso de eval() traz sérios riscos de segurança, como:
Injeção de código: se um invasor puder influenciar o conteúdo da string passada para
eval(), poderá executar código PHP arbitrário no servidor. Isso pode levar a acesso não autorizado, violações de dados e vários outros problemas de segurança.Depuração e manutenção complexas: o código executado por meio de
eval()costuma ser mais difícil de depurar e manter, pois pode ocultar a lógica e o fluxo da aplicação. Essa complexidade pode introduzir, sem querer, outras falhas de segurança ou bugs.
O desenvolvedor poderia ter adotado uma abordagem mais segura e fácil de manter, usando o mecanismo de templates Blade do Laravel para gerar a URL da imagem:
Esse método evita completamente o uso de eval() e aproveita os recursos integrados do Laravel para gerar conteúdo dinâmico com segurança. Leia também sobre outras formas de evitar a injeção de código PHP.
Como testar dependências do PHP Composer em busca de vulnerabilidades de segurança
As dependências de terceiros são uma área da segurança de aplicações que muitas vezes passa despercebida. No PHP, usamos o Composer para gerenciar essas dependências. É essencial verificá-las regularmente em busca de vulnerabilidades conhecidas.
Você pode usar ferramentas como o Snyk para analisar automaticamente suas dependências do Composer em busca de vulnerabilidades conhecidas. Veja como instalar e usar o Snyk:
Ao executar o comando snyk test no diretório raiz para testar suas dependências do Composer em busca de vulnerabilidades de segurança, a saída pode ser semelhante a esta:
Recomendo que você leia mais sobre como testar dependências do PHP Composer em busca de vulnerabilidades de segurança com o Snyk.
Vulnerabilidades de segurança no interpretador PHP
Mesmo seguindo práticas de programação segura, vulnerabilidades no próprio interpretador PHP podem expor suas aplicações a riscos. Por exemplo, várias vulnerabilidades foram relatadas no pacote Debian PHP8.2 e estão disponíveis no banco de dados do Snyk.
Algumas das vulnerabilidades mais importantes do interpretador PHP incluem:
CVE-2023-0568: alocação de recursos sem limites ou controle de taxa.
CVE-2023-3823: injeção de entidade externa XML (XXE).
CVE-2023-0662: esgotamento de recursos.
Essas vulnerabilidades podem permitir que um invasor execute código arbitrário ou cause uma negação de serviço (DoS). Por isso, é essencial manter sua versão do PHP atualizada e verificar com frequência se há vulnerabilidades relatadas no interpretador PHP que você usa.
Como a Snyk ajuda a proteger aplicações PHP?
A Snyk é uma poderosa plataforma de segurança pensada para desenvolvedores, que ajuda a identificar e corrigir vulnerabilidades nas aplicações PHP. Ela oferece um amplo banco de dados de vulnerabilidades conhecidas e pode analisar seu projeto automaticamente para detectar esses problemas. A Snyk também cria pull requests com correções automatizadas, poupando muito tempo dos desenvolvedores na correção das vulnerabilidades identificadas.
Quais são as vulnerabilidades mais comuns em PHP?
Há várias vulnerabilidades comuns em PHP que os desenvolvedores devem conhecer. Entre elas estão:
Ataques de injeção: ocorrem quando um invasor consegue inserir SQL ou scripts maliciosos no seu código PHP. Um exemplo é a injeção de SQL, em que o invasor manipula consultas SQL para obter acesso não autorizado ao banco de dados.
Cross-site scripting (XSS): ocorre quando um invasor consegue injetar scripts maliciosos em páginas da web visualizadas por outras pessoas. Esses scripts podem roubar dados confidenciais dos usuários.
Falsificação de solicitação entre sites (CSRF): nesse tipo de ataque, o invasor induz uma vítima a enviar uma solicitação maliciosa.
Vulnerabilidades de inclusão de arquivos: ocorrem quando um invasor consegue incluir um arquivo de um servidor remoto, o que muitas vezes leva à execução de código no servidor.
O que vem por aí para a segurança do PHP?
Uma maneira de acompanhar as vulnerabilidades do interpretador PHP é conectar seus repositórios Git ao Snyk. Assim, o Snyk monitora automaticamente suas dependências em busca de vulnerabilidades e avisa você quando novas vulnerabilidades são relatadas. Talvez você implante suas aplicações PHP com Docker ou outra tecnologia de contêineres; nesse caso, é essencial monitorar as imagens de contêiner em busca de vulnerabilidades, pois elas incluem o interpretador PHP e outras dependências que podem estar vulneráveis.
Se você usa Docker, pode usar o Snyk para analisar suas imagens de contêiner Docker em busca de vulnerabilidades conhecidas, executando o seguinte comando:
Siga as práticas recomendadas de James Walker para criar um Dockerfile pronto para produção para aplicações PHP e o guia de Neema Muganga sobre como proteger contêineres PHP para proteger suas imagens de contêiner PHP.
A proteção contra vulnerabilidades de segurança no PHP não deve ser deixada para depois: ela precisa fazer parte integrante do seu processo de desenvolvimento. Isso envolve adotar práticas de programação segura, manter tudo atualizado e ficar atento às vulnerabilidades relatadas no ecossistema PHP.
Como posso saber mais sobre segurança em PHP?
Para saber mais sobre segurança em PHP, você pode acompanhar tutoriais online no blog da Snyk e fazer aulas curtas e gratuitas pela internet no Snyk Learn. Sites como o OWASP também oferecem muitos recursos sobre segurança de aplicações web, incluindo PHP.
Proteja seu código enquanto desenvolve
O Snyk analisa seu código em busca de problemas de qualidade e segurança e recomenda correções direto no seu IDE.



