Tools4Devs

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>