Neste artigo você vai aprender a como sanitizar inputs com PHP, através de um técnica simples e muito eficiente para os seus projetos!
Fala programador(a), beleza? Bora aprender mais sobre PHP!
Introdução
No desenvolvimento web, uma das maiores ameaças à segurança é a injeção de código, que ocorre quando os usuários mal-intencionados conseguem executar código malicioso no seu site através de campos de entrada.
Para proteger seu site e seus usuários, é essencial “sanitizar” ou limpar os dados de entrada para garantir que eles sejam seguros antes de usá-los em seu código.
Neste artigo, vamos abordar como sanitizar entradas com PHP.
O Que é a Sanitização de Inputs? e como sanitizar inputs com PHP
A sanitização de inputs é o processo de limpar e validar os dados que seu aplicativo recebe.
Isso é feito para evitar que códigos mal-intencionados sejam inseridos em seu aplicativo, evitando assim vulnerabilidades comuns de segurança, como ataques de injeção de SQL e scripts cross-site (XSS).
Sanitizando Inputs com PHP
PHP fornece um número de funções para a sanitização de inputs, e vamos cobrir algumas das mais comuns neste artigo.
Sanitizando Strings
A função filter_input()
é uma das funções mais usadas para sanitizar strings em PHP. A função aceita três parâmetros – o tipo de input a ser sanificado, o nome do input e o filtro a ser aplicado.
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
Neste exemplo, a função filter_input()
é usada para sanitizar um campo de entrada chamado ‘name’.
O filtro FILTER_SANITIZE_STRING
remove tags e codifica caracteres especiais, o que é ideal para a sanitização de strings.
Sanitizando Números
Para sanitizar entradas numéricas, você pode usar FILTER_SANITIZE_NUMBER_INT
ou FILTER_SANITIZE_NUMBER_FLOAT
, dependendo se o número é um inteiro ou um número de ponto flutuante.
$age = filter_input(INPUT_POST, 'age', FILTER_SANITIZE_NUMBER_INT); $price = filter_input(INPUT_POST, 'price', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
Sanitizando URLs e Emails
PHP também fornece filtros específicos para sanitizar URLs e endereços de e-mail.
$url = filter_input(INPUT_POST, 'url', FILTER_SANITIZE_URL); $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
Validação vs Sanitização
É importante observar a diferença entre sanitização e validação. A sanitização trata da limpeza dos dados de entrada – removendo caracteres indesejados ou potencialmente prejudiciais.
A validação, por outro lado, verifica se os dados de entrada estão corretos, úteis e fazem sentido.
Por exemplo, um campo de entrada para um endereço de e-mail deve ser primeiro sanificado para remover caracteres potencialmente perigosos, e então validado para garantir que seja um endereço de e-mail válido.
Entendendo Injeção de Código
Para compreender completamente a importância da sanitização de entradas, é crucial entender o que é a injeção de código
. A injeção de código é uma técnica usada por hackers para manipular seu código, inserindo seus próprios comandos. Isso pode levar a vários problemas, incluindo a exposição de dados sensíveis, como informações de usuário e senhas, a manipulação de seu banco de dados, ou até mesmo o comprometimento de todo o seu sistema.
A forma mais comum de injeção de código é a Injeção de SQL.
No entanto, outros tipos, como a Injeção de Código HTML e a Injeção de Código PHP, também são comuns.
Em todos esses casos, a sanitização de entradas desempenha um papel crucial na proteção contra esses ataques.
Um exemplo clássico de um código PHP que pode ser vulnerável a injeção de código é aquele que recebe entradas do usuário e as usa diretamente em uma consulta SQL sem nenhuma sanitização ou escaping.
Veja um exemplo a seguir:
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; // Criando uma conexão $conn = new mysqli($servername, $username, $password, $dbname); // Checando a conexão if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Recebendo o input do usuário diretamente $id = $_GET['id']; // Usando o input do usuário diretamente na consulta SQL $sql = "SELECT * FROM users WHERE id = $id"; $result = $conn->query($sql); // Restante do código ... ?>
Nesse exemplo, um usuário mal-intencionado pode alterar o valor da variável $_GET['id']
na URL para algo como 1 OR 1=1
, e a consulta SQL se torna "SELECT * FROM users WHERE id = 1 OR 1=1"
. Isso retornará todos os usuários, pois 1=1
é sempre verdadeiro.
Este é um exemplo simples de Injeção de SQL, um dos tipos de ataques de injeção de código.
Sanitizar os inputs do usuário e usar declarações preparadas são maneiras de prevenir esse tipo de ataque.
Sanitização Vs. Escaping
Outro conceito que vale a pena discutir é a diferença entre sanitização e escaping.
Embora ambos sejam usados para garantir que os dados de entrada sejam seguros, eles têm propósitos ligeiramente diferentes.
A sanitização, como mencionado anteriormente, trata de limpar os dados de entrada, removendo ou modificando quaisquer caracteres que possam ser problemáticos.
Por outro lado, o escaping envolve adicionar caracteres de escape aos dados de entrada para garantir que eles sejam tratados como dados, e não como código.
Na prática, isso significa que, enquanto a sanitização pode remover certos caracteres ou sequências de caracteres dos dados de entrada, o escaping fará com que eles sejam tratados literalmente.
Por exemplo, se um usuário inserir a string “<script>
“, a sanitização pode removê-la completamente, enquanto o escaping pode convertê-la em “<script>
“, que é seguro para ser exibido em um navegador.
Em muitos casos, você precisará usar uma combinação de sanitização e escaping para garantir que seus dados de entrada sejam totalmente seguros.
Recursos Adicionais
Existem muitos outros recursos e técnicas disponíveis para ajudar a proteger seu site ou aplicativo contra ataques.
Além das funções de sanitização e validação do PHP, existem várias bibliotecas e frameworks disponíveis que podem oferecer recursos de segurança mais robustos.
Além disso, há uma ampla gama de recursos online disponíveis para ajudá-lo a entender melhor a segurança da web e a proteger seu site ou aplicativo.
Sites como OWASP (Open Web Application Security Project) oferecem uma grande quantidade de informações e orientações sobre segurança da web, incluindo listas de vulnerabilidades de segurança comuns e como proteger-se contra elas.
Quer aprender mais sobre programação? Conheça nosso canal no YouTube:
Conclusão
Chegamos ao fim do artigo sobre como sanitizar inputs com PHP!
Sanitizar entradas é uma prática de segurança essencial para qualquer aplicativo web.
É importante lembrar que enquanto a sanitização pode proteger seu aplicativo de muitos tipos de ataques, não é uma solução de segurança completa por si só.
Outras práticas de segurança, como a utilização de conexões seguras, a limitação de tentativas de login e a validação rigorosa dos dados, também são necessárias para manter seu aplicativo seguro.
No entanto, o uso consistente da sanitização de entradas como parte de um plano de segurança mais amplo pode ajudar a proteger você, seus usuários e seus dados contra ameaças.
Lembre-se, a segurança do seu aplicativo deve ser uma consideração em cada etapa do desenvolvimento, não apenas uma reflexão tardia.
Está buscando em evoluir como Programador? Confira o nossos cursos de programação.