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.

  • 🛡️ Conheça as ameaças: Os principais riscos são injeção de SQL, cross-site scripting e injeção de código, geralmente disseminados por meio de formulários ou URL parâmetros.
  • 🧹 Etiquetas de tiras: strip_tags remove HTML, JavaScripts e tags PHP de entrada reduzem o risco de ataques de cross-site scripting armazenados.
  • Validar entrada: A função `filter_var` valida e higieniza os dados, confirmando se um valor é do tipo esperado antes que seu código o considere confiável.
  • 🔒 Escape ou Bind: A função `mysqli_real_escape_string` escapa a entrada da consulta, mas instruções preparadas parametrizadas são a defesa mais forte contra injeção de SQL.
  • 🔑 Senhas criptografadas corretamente: Nunca armazene senhas com MD5 ou SHA1; use password_hash e password_verify, que aplicam o algoritmo de hash bcrypt, que é lento e possui salt.
  • 💡 Defesa em profundidade: Validação combinada, escaping, HTTPS e contas de banco de dados com privilégios mínimos, em vez de depender de um único controle.
  • 🤖 Assistência de IA: Ferramentas de IA podem auditar o código PHP em busca de falhas de segurança e ajudar a corrigir vulnerabilidades de injeção de SQL ou XSS com segurança.

Segurança PHP

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

PHP strip_tags

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

PHP strip_tags

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

PHP strip_tags

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.

PHP MD5 e PHP sha1

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.

Perguntas Frequentes

Utilize instruções preparadas com parâmetros vinculados em mysqli ou PDO. Elas enviam a consulta e os dados separadamente, de modo que a entrada do usuário nunca poderá alterar a estrutura da consulta. Isso é mais robusto do que a escaneamento manual.ping entrada.

A função `strip_tags` remove completamente as tags HTML e PHP, enquanto a função `htmlspecialchars` as converte em entidades seguras para que sejam exibidas como texto. Para obter a saída, utilize a função `escap`.ping Contra XSS, htmlspecialchars geralmente é a opção mais segura.

Gere um token CSRF exclusivo por sessão, incorpore-o como um campo oculto em todos os formulários e verifique-o no momento do envio. Rejeite qualquer solicitação cujo token esteja ausente ou não corresponda ao valor armazenado.

Sim. A IA pode detectar injeção de SQL, XSS, hash de senhas inseguro e manipulação insegura de arquivos, explicando cada risco e sugerindo uma solução. Considere-a como uma primeira análise útil, não como um substituto para uma revisão de segurança.

Sim. Cole o código vulnerável e a IA poderá reescrevê-lo com instruções preparadas, gerando uma saída em formato esca.pinge validação de entrada. Teste o código corrigido e confirme a correção comparando-a com a entrada do ataque original.

Resuma esta postagem com: