Ir para conteúdo
Faça parte da equipe! (2024) ×

Em relação a segurança


Juliana~*
 Compartilhar

Posts Recomendados

Ois... no desenvolvimento de projeto, chega a um ponto em que a questão da segurança começa a 'pesar'.

 

Os métodos de encriptação MD5 e SHA1 são o que uso, mas eles são tão inseguros assim?

Sim eu acho por ser valor fixo e assim, um banco de dados que contem diversas combinações pode facilmente obter o valor da criptografia.

Como é um método de criptografia simples de usar, eu gosto mais, e pensando nos valores fixos cheguei a seguinte conclusão:

 

function gerarSaltAleatorio($tamanho = 22) {

return substr(sha1(mt_rand()), 0, $tamanho);

}

// gerar salt aleatóriamente

$salt = gerarSaltAleatorio();

// criptografa a senha -> 'senha' + 'salt' gerado

$hash = md5($senha . $salt);

for ( $x = 0; $x <= 1000; $x++ ) {

$hash = md5($hash);

}

 

Assim eu salvo o 'salt' e a 'senha criptografada' no banco de dados. No login, seleciono o usuário no banco de dados, obtido no caso do formulário login, seleciono a 'senha criptografada' e o 'salta', gero o novo hash a partir do formulário de login e comparo 'senha do formulário' + 'salt do banco de dados' com 'senha criptografa' do banco de dados e ai libero ou não o acesso.

 

Será que é seguro o suficiente?

 

Até, se o hacker conseguiu roubar o banco de dados ele tem acesso ao servidor. Se ele tem acesso ao servidor, nem o salt ele vai saber, pois e valor aleatório.

 

E o FOR acima atrasa o código, evitando ataque de força bruta. Enfim, será que da para prosseguir com o projeto assim?

"Queridos Edward e Jacob,

Adoro vocês dois, mas vou passar o fim de semana com Jace."

 

Link para o comentário
Compartilhar em outros sites

Não vou responder a questão de segurança, isso depende muito, há muitos fatores a serem avaliados, acho que seria mais interessante se perguntasse no Information Security devido a quantidade de especialistas que utilizam o site.

 

Mas já considerou largar MD5 e usar Bcrypt? Não tem tanto trabalho com relação a gerar e persistir o salt porque ele é incorporado no hash (e sim, é seguro).

Como fazer hash de senhas de forma segura?

Escolha do método para geração de hash em PHP

 

Hash de senha é feito para o "depois" que o seu banco de dados está comprometido. Se a sua preocupação é com login e tals, existem vários métodos de manter o sistema seguro, por exemplo: tentativas de login, manter login/senha em páginas diferentes (como o Google e Microsoft fazem), captcha...

 

The definitive guide to form-based website authentication

+ - + - + - + - + - +

FAÇO PROGRAMAS

+ - + - + - + - + - +

Link para o comentário
Compartilhar em outros sites

Acho que exagerei no termo "segurança" rs.

 

Concordo, mas ainda sim com o BCrypt seria a mesma lógica, e claro é bem mais seguro. Mas MD5 seria suficiente para a não interpretação da senha? Como mostrado acima, ah possibilidade de um método randômico do sha1 repetir? Seria algo que deveria me preocupar?

"Queridos Edward e Jacob,

Adoro vocês dois, mas vou passar o fim de semana com Jace."

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas atrás...
Acho que exagerei no termo "segurança" rs.

 

Concordo, mas ainda sim com o BCrypt seria a mesma lógica, e claro é bem mais seguro. Mas MD5 seria suficiente para a não interpretação da senha? Como mostrado acima, ah possibilidade de um método randômico do sha1 repetir? Seria algo que deveria me preocupar?

 

Até onde sei, posso estar errado, mas MD5 é "vai e vem", há como descriptografar. BCrypt é o que chamam de criptografia "One Way". Só há como acertar o hash novamente se a pessoa souber o que está escrito.

Membro - Bronze - Geek - Bronze - Tech - Mod - Coord - Co-Admin - Platinum

Link para o comentário
Compartilhar em outros sites

@Juliana~* [QUOTE]Os métodos de encriptação MD5 e SHA1 são o que uso, mas eles são tão inseguros assim?[/QUOTE]Não são inseguros, são limitados a um tamanho máximo, permitindo assim uma repetição de hashes. (exemplo fictício, "a" e "aba" serem o mesmo hash). [QUOTE]Sim eu acho por ser valor fixo e assim, um banco de dados que contem diversas combinações pode facilmente obter o valor da criptografia.[/QUOTE] Hashes não possuem retorno, é um caminho só de ida, não há como desencriptar. [QUOTE]Como é um método de criptografia simples de usar, eu gosto mais, e pensando nos valores fixos cheguei a seguinte conclusão: function gerarSaltAleatorio($tamanho = 22) { return substr(sha1(mt_rand()), 0, $tamanho); } // gerar salt aleatóriamente $salt = gerarSaltAleatorio(); // criptografa a senha -> 'senha' + 'salt' gerado $hash = md5($senha . $salt); for ( $x = 0; $x <= 1000; $x++ ) { $hash = md5($hash); } Assim eu salvo o 'salt' e a 'senha criptografada' no banco de dados. No login, seleciono o usuário no banco de dados, obtido no caso do formulário login, seleciono a 'senha criptografada' e o 'salta', gero o novo hash a partir do formulário de login e comparo 'senha do formulário' + 'salt do banco de dados' com 'senha criptografa' do banco de dados e ai libero ou não o acesso. Será que é seguro o suficiente? [/QUOTE] Você está jogando tempo e processamento fora, pois um md5(sha1() ) já dão conta do recado tanto quanto serem executados 1001x (como consta no exemplo). [QUOTE]Até, se o hacker conseguiu roubar o banco de dados ele tem acesso ao servidor. Se ele tem acesso ao servidor, nem o salt ele vai saber, pois e valor aleatório.[/QUOTE] Se você irá comparar senhas usando essa estratégia, mesmo o valor sendo aleatório, você precisará salvá-lo para comparar a autenticidade dos dados. E o hacker em questão não precisa necessariamente saber o valor de um hash. Basta ele criar uma senha, e com o md5(sha1()) gerado para tal, basta ele copiar e colocar no login desejado que entrará corretamente. [QUOTE]E o FOR acima atrasa o código, evitando ataque de força bruta. Enfim, será que da para prosseguir com o projeto assim?[/QUOTE] Não, isso não impede, apenas atrasa-o. Quer solução? Bloqueie a conta por tentativas incorretas da senha ou utilize um captcha. [QUOTE]Concordo, mas ainda sim com o BCrypt seria a mesma lógica, e claro é bem mais seguro. Mas MD5 seria suficiente para a não interpretação da senha? [/QUOTE] Hoje em dia não, pois há diversos sites com bibliotecas enormes de palavras salvas com seus respectivos Hashes MD5 para a "reversão". [QUOTE]Como mostrado acima, ah possibilidade de um método randômico do sha1 repetir? [/QUOTE] Com total certeza. [QUOTE]Seria algo que deveria me preocupar?[/QUOTE] Não, deveria se preocupar em fazer algo correto, pois isso é uma gambiarra (sendo sincero). Quer algo mais seguro apenas com md5() e/ou sha1()? Crie uma segunda ou terceira criptografia, como por exemplo, usar um md5() de um base64encode() de uma string criptografada por uma criptografia sua (ou apenas sua criptografia + md5()). @NoSlake [QUOTE]Até onde sei, posso estar errado, mas MD5 é "vai e vem", há como descriptografar. BCrypt é o que chamam de criptografia "One Way". Só há como acertar o hash novamente se a pessoa souber o que está escrito.[/QUOTE] MD5 é um hash, logo não há volta.

Darkness is a part of my soul

5de5ae31e8.jpg

Link para o comentário
Compartilhar em outros sites

Facilmente você consegue desenvolver um captcha, seguindo a ideia do DArkShade e você ainda pode usar o do Google também por exemplo, isso resolve alguns problemas

Membro - Bronze - Geek - Bronze - Tech - Mod - Coord - Co-Admin - Platinum

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois...
  • 3 meses depois...
Este tópico está impedido de receber novos posts.
 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.