Programação

segunda-feira, 15 de novembro de 2021

PHP - HASH e htmlspecialchars

 PASSWORD SEGURA

Uma das tarefas importantes na criação de websites dinâmicos é a autenticação e controle de acesso dos utilizadores. A forma mais comum de se realizar controle de acesso é por meio de um par de informações, username ou email e senha, que são armazenados numa base de dados para que seja possível verificar as credenciais do utilizador no momento de login no sistema.

A forma mais segura de armazenar senhas numa base de dados é através da utilização de funções de criptografia em PHP.

HASH

Função hash -  é um conjunto de caracteres de tamanho fixo gerado por um algoritmo matemático 


Algoritmos de hash: 

          função md5 (32 caracteres) e função sha1(40 caracteres)  e password_hash (60 caracteres)


Pouco provável mas não impossível, dois valores diferentes gerarem a mesma saída.

É desaconselhado usar a função md5 pois na internet existem tabelas que ligam o valor original ao  hash! 

sha1 It is not recommended to use this function to secure passwords  

  https://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash


Em PHP é aconselhado utilizador a função password_hash() que utiliza o algoritmo bcrypt ou o algoritmo Blowfish

string password_hash ( string $senha , integer $algoritmo, array $opções )

Onde:

  • $senha é a senha fornecida que deve ser encriptada.
  • $algoritmo é o algoritmo de hash que deve ser utilizado no processo. Os algoritmos suportados são:
    • PASSWORD_DEFAULT – algoritmo bcrypt. Se usado, recomenda-se armazenar o resultado do hash em um campo que permite até 255 caracteres, por questões de boas práticas.
    • PASSWORD_BCRYPT – Usa o algoritmo CRYPT_BLOWFISH para criar o hash, resultando em uma string de exatos 60 caracteres.

A função password_hash  gera um salt no momento de gerar um hash.

Um salt é um pouco de dados adicionais que tornam os hashes significativamente mais difíceis de quebrar.

A função password_hash () irá criar um salt aleatório sendo geralmente a abordagem mais fácil e segura.

Podemos ver que a função password_hash vai gerar hash de 60 caracteres da password "ester@oliveira_2021


 Ao usar password_hash () o valor de retorno inclui o salt como parte do hash gerado.

Este valor deve ser armazenado literalmente na base de dados, pois inclui informações sobre a função hash 


A senha introduzida pelo utilizador é enviada ao script de processamento por meio do método POST, e seu hash é gerado da seguinte maneira:

$hashsenha = password_hash($_POST['senha'], PASSWORD_DEFAULT);
$hashsenha = trim(password_hash($_POST['senha'], PASSWORD_DEFAULT));

onde ‘senha‘ é o nome do campo de origem do valor da senha na página de registo, e $hashsenha é a variável que irá conter o hash da senha criado, o qual deverá então ser armazenado na base de dados juntamente com os demais dados de login necessários.

A função trim() é usada para eliminar eventuais espaços em branco no início e no final da string gerada.

Função password_verify()

Deve ser utilizada a função password_verify ()  para verificar as senhas (não usar operadores = = nem  = = = do PHP ou strcmp() )

BASE DE DADOS
Ao inserir dados, escolher Função md5, para converter a password "escola_esad" num hash de 32 caracteres.




MAIS SEGURO usar função password_hash()

Password armazenada




Função htmlspecialchars () 

A função htmlspecialchars () converte alguns caracteres especiais predefinidos em entidades HTML, sendo um dos métodos mais populares para prevenir ataques Cross-Site Scripting (XSS).

Os invasores também podem usar XSS para espalhar malware, reescrever o conteúdo de sites, causar problemas em redes sociais e phishing para credenciais de utilizador. 

& (ampersand) torna-se &
 '"' (aspas dupla) torna-se " quando ENT_NOQUOTES não está definida. 
'' (aspas simples) torna-se ' apenas quando ENT_QUOTES está definida.
  (menor que) torna-se  <
>  maior que) torna-se  >


assim o seguinte script

<?php
     $str = "This is some <b> bold </b> text.";
     echo htmlspecialchars($str);
?>


vai gerar o seguinte output pois as tag <b> e </b> são convertidas em entidades HTML, ou seja,  <b>  vai ser convertido em &lt;b&gt; e o </b> em &lt;/b&gt;, resultando no seguinte:

This is some &lt;b&gt; bold &lt;/b&gt; text.



A Visualização no Browser será

This is some <bbold </b> text.




Considerando outro script em php 

podemos observar que tem um script em Javascript



Este script sem a função htmlspecialchars vai executar o script em javascript pelo que será exibido uma janela com o texto dentro função alert




A utilização da função htmlspecialchars impede a execução de um script pois vai converter em entidades HTML.


















 

Sem comentários:

Enviar um comentário