Validador e Sanitizador de Inputs
Teste a validação e sanitização de diversos tipos de dados com esta ferramenta simples e eficaz, ideal para desenvolvedores que buscam segurança e qualidade no tratamento de formulários.
Por que validar e sanitizar inputs?
Garantir que os dados recebidos são válidos e limpos previne vulnerabilidades como XSS, SQL Injection e outros ataques comuns que podem comprometer seu sistema.
Além disso, melhora a qualidade dos dados armazenados e evita erros durante o processamento.
Melhores práticas para validação em PHP
Use funções nativas como filter_var para validação e sanitização. Combine com prepared statements e binds para proteger consultas SQL.
Centralize regras de validação em classes ou funções reutilizáveis para manter o código organizado e seguro.
Exemplo prático: o que um atacante pode tentar no campo email
"><script>alert('xss')</script>@malicioso.com→ tenta executar script via campo email.admin' OR '1'='1→ tenta injetar SQL se não usar tratamento adequado.verylongemail@verylongdomain.com...→ tenta sobrecarregar o banco.
Como evitar isso?
- Validação no frontend e backend (nunca confiar só no frontend).
- Sanitização e escape dos dados antes de salvar ou mostrar.
- Limitar tamanho dos campos.
- Usar prepared statements para consultas SQL.
- Implementar CAPTCHA ou outros mecanismos anti-bot.
- Bloquear envios excessivos (rate limiting).
Código fonte resumido
<?
class InputValidator
{
public static function sanitizeString(string $input): string
{
return trim(strip_tags($input));
}
public static function validateEmail(string $email): bool
{
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
public static function validateUrl(string $url): bool
{
$cleanUrl = filter_var($url, FILTER_SANITIZE_URL);
return filter_var($cleanUrl, FILTER_VALIDATE_URL) !== false;
}
public static function validateInt($input, int $min = null, int $max = null): bool
{
$options = [];
if ($min !== null) $options['min_range'] = $min;
if ($max !== null) $options['max_range'] = $max;
return filter_var($input, FILTER_VALIDATE_INT, ['options' => $options]) !== false;
}
public static function validateAndSanitizeString(string $input, int $maxLength = 100): ?string
{
$sanitized = self::sanitizeString($input);
if (strlen($sanitized) === 0 || strlen($sanitized) > $maxLength) {
return null;
}
return $sanitized;
}
}
if (isset($_POST['validar'])) {
$email = $_POST['email'] ?? '';
$url = $_POST['url'] ?? '';
$idade = $_POST['idade'] ?? '';
$nome = $_POST['nome'] ?? '';
$emailValido = InputValidator::validateEmail($email);
$urlValida = InputValidator::validateUrl($url);
$idadeValida = InputValidator::validateInt($idade, 1, 120);
$nomeSanitizado = InputValidator::validateAndSanitizeString($nome);
echo 'Resultados da Validação
';
echo 'Email: ' . htmlspecialchars($email) . ' — ' . ($emailValido ? 'Válido' : 'Inválido') . '
';
echo 'URL: ' . htmlspecialchars($url) . ' — ' . ($urlValida ? 'Válida' : 'Inválida') . '
';
echo 'Idade: ' . htmlspecialchars($idade) . ' — ' . ($idadeValida ? 'Válida' : 'Inválida') . '
';
if ($nomeSanitizado !== null) {
echo 'Nome (sanitizado): ' . htmlspecialchars($nomeSanitizado) . '
';
} else {
echo 'Nome: Inválido ou vazio
';
}
}
?>
<form method="post" novalidate>
<label for="email">Email:</label>
<input type="email" id="email" name="email" placeholder="exemplo@dominio.com" required />
<label for="url">URL:</label>
<input type="url" id="url" name="url" placeholder="https://www.exemplo.com" required />
<label for="idade">Idade (1 a 120):</label>
<input type="number" id="idade" name="idade" min="1" max="120" required />
<label for="nome">Nome:</label>
<input type="text" id="nome" name="nome" maxlength="100" placeholder="Seu nome aqui" required />
<button type="submit" name="validar">Validar Dados</button>
</form>