Validando e sanitizando entradas do usuário no PHP

Métodos para validar e sanitizar entradas do usuário no PHP, garantindo segurança contra ataques de injeção e manipulação de dados.

Introdução

Validar e sanitizar entradas do usuário é uma das principais defesas contra ataques como SQL Injection, Cross-Site Scripting (XSS) e Remote Code Execution (RCE). Nunca devemos confiar em dados enviados por usuários sem uma verificação adequada.

1. Diferença entre validação e sanitização

  • Validação: Confirma se a entrada está no formato esperado (exemplo: um e-mail válido).
  • Sanitização: Remove ou escapa caracteres indesejados para evitar ataques.

2. Utilizando filter_var() para validação

O PHP possui a função filter_var() para validar diversos tipos de dados. Exemplo de validação de e-mail:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (!$email) {
    echo 'E-mail inválido!';
} else {
    echo 'E-mail válido: ' . $email;
}

Se o e-mail estiver incorreto, ele retornará false, garantindo que dados inválidos não sejam processados.

3. Sanitizando entradas para evitar XSS

Ao exibir dados na página, é essencial sanitizá-los para evitar injeção de scripts maliciosos:

$nome = htmlspecialchars($_POST['nome'], ENT_QUOTES, 'UTF-8');
echo 'Nome: ' . $nome;

Isso converte caracteres especiais em entidades HTML, impedindo que scripts sejam executados no navegador.

4. Filtrando números inteiros e strings seguras

Podemos garantir que apenas números sejam aceitos em um campo de ID:

$id = filter_var($_GET['id'], FILTER_VALIDATE_INT);
if (!$id) {
    echo 'ID inválido';
} else {
    echo 'ID válido: ' . $id;
}

Para remover caracteres perigosos de uma string:

$mensagem = filter_var($_POST['mensagem'], FILTER_SANITIZE_STRING);
echo 'Mensagem limpa: ' . $mensagem;

5. Prevenindo SQL Injection com prepared statements

Jamais insira diretamente dados do usuário em consultas SQL. Utilize prepared statements para evitar ataques:

$pdo = new PDO('mysql:host=localhost;dbname=teste', 'usuario', 'senha');
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE email = ?");
$stmt->execute([$_POST['email']]);

Isso impede que comandos maliciosos sejam injetados no banco de dados.

Conclusão

Validar e sanitizar entradas do usuário no PHP é essencial para a segurança da aplicação. Com o uso correto de filter_var(), htmlspecialchars() e prepared statements, conseguimos minimizar riscos e garantir um código seguro.

A validação e sanitização de entradas do usuário são aspectos essenciais da segurança em aplicações web. Ataques como SQL Injection e XSS exploram falhas na forma como os dados são processados, podendo comprometer toda a aplicação.

A primeira linha de defesa é garantir que os dados recebidos correspondam ao formato esperado. Isso evita que entradas inválidas sejam processadas pelo sistema. Em seguida, a sanitização remove qualquer código potencialmente perigoso antes que ele seja armazenado ou exibido.

Além disso, em aplicações que utilizam banco de dados, é imprescindível usar prepared statements para evitar injeções maliciosas. A combinação dessas técnicas reduz significativamente os riscos de segurança e melhora a robustez da aplicação.

Algumas aplicações:

  • Impedir ataques de SQL Injection em bancos de dados.
  • Proteger contra *Cross-Site Scripting* (XSS) em formulários.
  • Garantir que apenas dados válidos sejam processados pela aplicação.
  • Reduzir o risco de ataques que comprometem a integridade dos dados.

Dicas para quem está começando

  • Sempre valide entradas do usuário antes de usá-las.
  • Utilize filter_var() para validar e sanitizar dados comuns.
  • Use htmlspecialchars() ao exibir dados para evitar ataques XSS.
  • Jamais insira entradas diretamente em consultas SQL, prefira *prepared statements*.
  • Teste diferentes tipos de entrada para garantir que sua aplicação esteja protegida contra falhas.

Contribuições de Renata Oliveira

Compartilhe este tutorial: Como validar e sanitizar entradas do usuário corretamente no PHP?

Compartilhe este tutorial

Continue aprendendo:

Como impedir a injeção de comandos no shell através do PHP?

Métodos eficazes para evitar ataques de injeção de comandos no shell em aplicações PHP.

Tutorial anterior

Como evitar ataques de inclusão de arquivos (LFI e RFI) no PHP?

Métodos eficazes para impedir ataques de inclusão de arquivos no PHP e evitar a execução de código malicioso no servidor.

Próximo tutorial