O sistema está armazenando o MD5 puro da senha na base, o que hoje já não é mais seguro.
Estou enviando abaixo as modificações necessárias para que o sistema fique seguro com relação a isso.
A mudança principal é não usar o MD5 puro na senha, e sim utilizar o MD5 sobre uma combinação
salt + senha + login_do_usuario
Com isso são evitados dois problemas:
1- Ataque por dicionário (vide site http://www.md5online.org/)
Ao usar um 'salt' com uma senha complicada, evita-se qualquer palavra normalmente existente nos ataques por dicionário. Seria necessário existir no dicionário as senhas comuns adicionadas desse 'sal'.
2- Ataque por similaridade de senha
Ao usar o MD5 com a senha concatenada ao login do usuário, logins diferentes passam a ter MD5 diferentes para a mesma senha, sendo impossível identificar senhas idênticas acessando a tabela de usuários do banco.
Marcos Paulo F. Rebello (caco)
---------------------
Arquivos a alterar:
config.php
==========
+ $config['md5salt'] = 'T%42#4*7j';
incluir/funcoes_principais.php
==============================
+ function md5_seguro($senha, $usuario) {
+ global $config;
+ return md5($config['md5salt'].$senha.$usuario);
+ }
classes/autenticacao.class.php:
==============================
linha 155:
- if (MD5($senha) == $linha['usuario_senha'] && $linha['usuario_ativo']) return true;
+ if (md5_seguro($senha,$usuarioNome) == $linha['usuario_senha'] && $linha['usuario_ativo']) return true;
incluir/envio_senha.php:
==============================
linha 120:
- $novopass = md5($novopass);
+ $novopass = md5_seguro($novopass, $config['usuario']);
modulos/admin/admin.class.php:
==============================
linha 87:
- elseif ($senha != $this->usuario_senha) $this->usuario_senha = md5($this->usuario_senha);
+ elseif ($senha != $this->usuario_senha) $this->usuario_senha = md5_seguro($this->usuario_senha, $this->usuario_login);
linha 95:
- $this->usuario_senha = md5($this->usuario_senha);
+ $this->usuario_senha = md5_seguro($this->usuario_senha, $this->usuario_login);
modulos/publico/checarsenha.php:
==============================
linha 23:
- $antigo_md5 = md5($senhaAntiga);
+ $antigo_md5 = md5_seguro($senhaAntiga,$config['usuario']);
linha 35:
- $q->adAtualizar('usuario_senha', md5($senhaNova1));
+ $q->adAtualizar('usuario_senha', md5_seguro($senhaNova1,$resultado['usuario_login']));
modulos/publico/segunda_conta.php: $usuario_senha2=md5(getParam($_REQUEST, 'usuario_senha2', ''));
==============================
linha 29:
- $usuario_senha2=md5(getParam($_REQUEST, 'usuario_senha2', ''));
+ $usuario_senha2=md5_seguro(getParam($_REQUEST, 'usuario_senha2', ''),$usuario_login2);
------------------------------------
md5 para os usuarios padrões do banco de exemplo, senha 123456 e salt 'T%42#4*7j':
usuario_login usuario_senha
admin 831e6992fa70d9b840f145ac6347380f
cmt 16ba751bf29c39a83f6b852e691e8cec
scmt 97b7d1f5ad2f2de67df5f65a1c401fb9
s1 1cb102b7699cc8854030184731ba595a
s2 c14ea17cfab2cb614b6a153387fb2558
s3 a47fcc1be3cc970a90480b52badf766f
s4 eaebb03188d62259e2ea9af7610047bf
protocolista d5d0010cfec9771c715a6071b98d17fa
Autor: Marcos Paulo Ferreira Rabello
1Um comentário