Função de segurança PHP: strip_tags, filter_var, Md5 e sha1
Ameaças potenciais à segurança
Eles são basicamente dois grupos de pessoas que podem atacar o seu sistema
- Hackers – com a intenção de obter acesso a dados não autorizados ou interromper o aplicativo
- Usuários – eles podem inserir parâmetros errados inocentemente em formulários que podem ter efeitos negativos em um site ou aplicativo da web.
A seguir estão os tipos de ataques que precisamos observar.
Injeção de SQL – Este tipo de ataque anexa código prejudicial a SQL afirmações.
Isso é feito usando formulários de entrada do usuário ou URLs que 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.
Scripting entre sites – esse tipo de ataque insere código prejudicial geralmente JavaScript. Isso é feito usando formulários de entrada do usuário, como formulários de contato e comentários. Isso é feito para;
- Recuperar informações confidenciais, como dados de cookies
- Redirecione o usuário para um URL diferente.
- Outras ameaças podem incluir – injeção de código PHP, injeção de shell, injeção de e-mail, divulgação de código-fonte de script, etc.
Melhores práticas de segurança de aplicativos PHP
Vejamos agora algumas das melhores práticas de segurança PHP que devemos considerar ao desenvolver nossas aplicações.
PHP strip_tags
As funções strip_tags removem HTML, JavaScript ou tags PHP de uma string.
Esta 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ê salvou comments.php na pasta phptuts, navegue até o URLhttp://localhost/phptuts/comments.php
Vamos supor que você receba o seguinte como entrada do usuário alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Navegue até o URL http://localhost/phptuts/comments.php
Vamos agora proteger nosso aplicativo contra tais ataques usando a função strip_tags.
<?php $user_input = "<script>alert('Your site sucks!');</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.
Verifique este link para a referência completa filtro_var
O código é 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('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Saída:
alert('Your site sucks!');
Função mysqli_real_escape_string Esta função é usada para proteger uma aplicação contra injeção de SQL.
Suponhamos que temos a seguinte instrução SQL para validar o ID do usuário e a senha.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Um usuário mal-intencionado pode inserir o seguinte código na caixa de texto do ID do usuário. 'OU 1 = 1 — E 1234 na caixa de texto da senha Vamos codificar o módulo de autenticação
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
O resultado final será
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
AQUI,
- “SELECT * FROM users WHERE user_id = ”” testa um ID de usuário vazio
- “'OR 1 = 1“ é uma condição que sempre será verdadeira
- “-” comenta a parte que testa a senha.
A consulta acima retornará todos os usuários. Vamos agora usar a função mysqli_real_escape_string para proteger nosso módulo de login.
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
O código acima irá resultar
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Note a segunda aspa simples foi escapada para nós, ela será tratada como parte do ID do usuário e a senha não será comentada.
PHP MD5 e PHP sha1
Md5 é o acrônimo para Message Digest 5 e sha1 é o acrônimo para Secure Hash Algorithm 1.
Ambos são usados para criptografar strings.
Depois que uma string é criptografada, é tedioso descriptografá-la.
MD5 e sha1 são muito úteis ao armazenar senhas no banco de dados.
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ê salvou o arquivo hashes.php na pasta phptuts, navegue até o URL
Como você pode ver nos hashes acima, se um invasor obtivesse acesso ao seu banco de dados, ele ainda não saberia as senhas para fazer login.
Resumo
- Segurança refere-se a medidas implementadas para proteger um aplicativo contra ataques acidentais e maliciosos.
- A função strip_tags é usada para remover tags como a partir de dados de entrada
- A função filter_var valida e php limpa os dados de entrada
- mysqli_real_escape_string é usado para limpar a instrução SQL. Remove caracteres maliciosos das declarações
- tanto MD5 quanto SHA1 são usados para criptografar senha.