Introdução
Aceitar entradas do usuário sem validação pode expor uma aplicação PHP a vulnerabilidades graves, como injeção de SQL, Cross-Site Scripting (XSS) e ataques de manipulação de dados. Utilizar filtros de entrada garante que apenas dados válidos e seguros sejam processados pela aplicação.
1. Utilizando filter_var()
para validação e sanitização
O PHP fornece a função filter_var()
para validar e limpar dados de entrada. Alguns exemplos incluem:
Validando e-mails:
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (!$email) {
die("E-mail inválido!");
}
Sanitizando strings para remover caracteres perigosos:
$nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING);
Isso evita que scripts maliciosos sejam inseridos em campos de entrada.
2. Filtrando entradas de formulários com filter_input()
Podemos validar diretamente entradas vindas de $_POST
, $_GET
e $_REQUEST
:
$idade = filter_input(INPUT_POST, 'idade', FILTER_VALIDATE_INT);
if ($idade === false) {
die("Idade inválida!");
}
Isso impede que valores inválidos sejam processados pela aplicação.
3. Prevenindo ataques de Cross-Site Scripting (XSS)
Para evitar que scripts maliciosos sejam inseridos em campos de entrada, podemos usar htmlspecialchars()
:
$comentario = htmlspecialchars($_POST['comentario'], ENT_QUOTES, 'UTF-8');
Isso converte <script>
em texto seguro, impedindo a execução de scripts no navegador.
4. Protegendo contra injeção de SQL
Para evitar SQL Injection, nunca use entradas do usuário diretamente em consultas SQL. Em vez disso, utilize prepared statements com PDO:
$pdo = new PDO('mysql:host=localhost;dbname=seguro', 'usuario', 'senha');
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE email = ?");
$stmt->execute([$_POST['email']]);
Isso impede que comandos SQL maliciosos sejam executados.
5. Aplicando regras personalizadas de validação
Podemos criar regras customizadas para verificar entradas do usuário:
function validarNome($nome) {
return preg_match("/^[a-zA-ZÀ-ÿ' ]+$/", $nome);
}
if (!validarNome($_POST['nome'])) {
die("Nome inválido!");
}
Isso garante que apenas caracteres permitidos sejam aceitos.
Conclusão
Usar filtros de entrada no PHP é essencial para proteger a aplicação contra ataques e dados inválidos. Validações como filter_var()
, htmlspecialchars()
e prepared statements com PDO ajudam a garantir que apenas dados seguros sejam processados, reduzindo o risco de vulnerabilidades.
Por que usar filtros de entrada no PHP é essencial para segurança?
A validação e sanitização de entradas no PHP é um dos primeiros passos para garantir a segurança de uma aplicação web. Sem filtros adequados, ataques como SQL Injection e XSS podem comprometer o sistema e expor informações sensíveis.
A melhor abordagem para evitar esses riscos é sempre validar os dados antes de processá-los. O uso de funções nativas do PHP, como filter_var()
e htmlspecialchars()
, reduz significativamente a possibilidade de entradas maliciosas causarem danos.
Além disso, armazenar dados filtrados de forma segura no banco de dados e utilizar prepared statements garantem que informações não sejam manipuladas indevidamente. Essas práticas tornam qualquer aplicação PHP mais segura e confiável.
Algumas aplicações:
- Evitar que usuários insiram comandos SQL maliciosos nos formulários.
- Bloquear tentativas de XSS convertendo caracteres perigosos.
- Garantir que apenas dados válidos e sanitizados sejam processados pela aplicação.
- Reduzir erros de execução causados por entradas inesperadas ou malformadas.
Dicas para quem está começando
- Sempre valide entradas de usuários com
filter_var()
antes de usá-las. - Utilize *prepared statements* com PDO para evitar injeção de SQL.
- Use
htmlspecialchars()
para impedir ataques XSS em campos de texto. - Filtre entradas de formulários com
filter_input()
para maior segurança. - Crie funções personalizadas para validar dados críticos, como nomes e IDs.
Contribuições de Renata Oliveira