Função de segurança PHP: strip_tags, filter_var, Md5 e sha1
⚡ Resumo Inteligente
A segurança do PHP protege aplicações web contra ataques e entradas descuidadas, validando, higienizando e armazenando dados com segurança. Este guia aborda as principais ameaças e, em seguida, mostra como usar `strip_tags`, `filter_var` e `escap`.pinge o uso de hash de senhas moderno com password_hash para defesa contra XSS, injeção de SQL e credenciais roubadas.

Ameaças potenciais à segurança
Existem basicamente dois grupos de pessoas que podem atacar seu sistema:
- Hackers – com a intenção de obter acesso a dados não autorizados ou interromper o aplicativo
- Os usuários podem, inocentemente, inserir parâmetros incorretos em formulários, o que pode ter efeitos negativos em um site ou aplicativo web.
A seguir estão os tipos de ataques que precisamos observar.
Injeção de SQL – esse tipo de ataque adiciona código malicioso a SQL afirmações.
Isso é feito usando formulários de entrada do usuário ou URLque usam variáveis.
O código anexado comenta a condição na cláusula WHERE de uma instrução SQL. O código anexado também pode:
- insira uma condição que sempre será verdadeira
- excluir dados de uma tabela
- atualizar dados em uma tabela
Esse tipo de ataque geralmente é usado para obter acesso não autorizado a um aplicativo.
Scripts entre sites (XSS) – esse tipo de ataque insere código malicioso, geralmente JavaScript. Isso é feito usando formulários de entrada do usuário, como formulários de contato e de comentários. Isso é feito para:
- Recuperar informações confidenciais, como dados de cookies
- Redirecione o usuário para um site diferente. URL.
Outras ameaças podem incluir injeção de código PHP, injeção de shell, injeção de e-mail e divulgação do código-fonte do script.
Melhores práticas de segurança de aplicativos PHP
Vamos agora analisar algumas das melhores práticas de segurança do PHP que devemos considerar ao desenvolver.ping nossos aplicativos.
PHP strip_tags
A função strip_tags remove o HTML, JavaScriptou tags PHP de uma string.
Essa função é útil quando precisamos proteger nossa aplicação contra ataques como cross-site scripting.
Vamos considerar um aplicativo que aceita comentários de usuários.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Supondo que você tenha salvo o arquivo comments.php na pasta phptuts, navegue até o URL http://localhost/phptuts/comments.php
Vamos supor que você receba a seguinte entrada do usuário: alert(‘Your site sucks!’);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Navegue até o URL http://localhost/phptuts/comments.php
Vamos agora proteger nossa aplicação contra esses ataques usando a função strip_tags.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Navegue até o URL http://localhost/phptuts/comments.php
Função filter_var PHP
A função filter_var é usada para validar e limpar dados.
A validação verifica se os dados são do tipo correto. Uma verificação de validação numérica em uma string retorna um resultado falso.
Sanitização é remover caracteres ilegais de um corda.
Consulte este link para obter a referência completa: filtro_var
O código abaixo é para o sistema de comentários. Ele usa a função filter_var e a constante FILTER_SANITIZE_STRIPPED para remover tags.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Saída:
alert('Your site sucks!');
Observação: FILTER_SANITIZE_STRIPPED (um alias de FILTER_SANITIZE_STRING) foi descontinuado a partir do PHP 8.1. Para novos códigos, use strip_tags() ou, para exibição segura, htmlspecialchars().
PHP mysqli_real_escape_string
A função mysqli_real_escape_string é usada para ajudar a proteger um aplicativo contra injeção de SQL.
Suponhamos que temos a seguinte instrução SQL para validar o nome de usuário e a senha.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Um usuário malicioso pode entrar ' OU 1 = 1 — Insira o nome de usuário no campo de texto e 1234 no campo de senha. Vamos codificar o módulo de autenticação.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
O resultado final será:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
AQUI,
- “WHERE uid = ”” testa se o ID do usuário está vazio.
- “'OU 1 = 1'” é uma condição que será sempre verdadeira.
- O símbolo “–” comenta a parte que testa a senha.
A consulta acima retornará todos os usuários. Agora, vamos usar a função `mysqli_real_escape_string` para proteger nosso módulo de login. Observe que, em código real, essa função recebe a conexão com o banco de dados como primeiro argumento.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
O código acima produzirá a seguinte saída:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Observação: a segunda aspa simples foi escapada, portanto será tratada como parte do ID do usuário e a senha não será comentada.
Melhor prática: iscaping Ajuda, mas instruções preparadas parametrizadas em mysqli ou PDO são a defesa recomendada contra injeção de SQL, porque os dados nunca são misturados ao texto da consulta.
PHP MD5 e PHP sha1
MD5 é a sigla para Message Digest 5, e SHA1 é a sigla para Secure Hash Algorithm 1. Ambas são funções de hash unidirecionais.
O código abaixo mostra a implementação de md5 e sha1.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Supondo que você tenha salvo o arquivo hashes.php na pasta phptuts, navegue até o URL.
Importante: MD5 e SHA1 são hashes rápidos e sem sal. já não é considerado seguro para armazenar senhasPorque podem ser quebradas rapidamente com hardware moderno e tabelas rainbow. Use-as apenas para checksums que não envolvam segurança e utilize o método abaixo para senhas.
Como criptografar senhas com segurança em PHP
Para armazenamento de senhas, o PHP oferece as funções `password_hash` e `password_verify`. Elas aplicam um algoritmo lento com salt (bcrypt por padrão), de forma que cada hash seja único e difícil de quebrar, mesmo que seu banco de dados seja roubado.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- password_hash () Gera um hash com salt para armazenar no banco de dados; PASSWORD_DEFAULT mantém você no algoritmo recomendado atual.
- verificar_senha() Verifica uma tentativa de login comparando-a com o hash armazenado, sem nunca a descriptografar.
Como o salt e o algoritmo são armazenados dentro do hash, você nunca precisa gerenciá-los diretamente, o que torna essa a maneira correta e à prova de futuro de lidar com senhas em PHP.




