Ir para o conteúdo

GPWeb

 Voltar a Sugestões de...
Tela cheia

Autenticaca no banco com MD5

3 de Abril de 2013, 10:27 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 25 vezes
Detectei um problema de segurança no gpweb com relação as senhas no banco de dados.
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

  • 2410e532148edd2b6c7cbf313c164d3d?only path=false&size=50&d=404Sistema GP-Web Ltda.(usuário não autenticado)
    3 de Abril de 2013, 11:42

     

    O senhor é o primeiro em quase um ano que apresenta uma proposta de mudança do código.

    Aqueles que utilizam o gpweb com LDAP já não sofrem do problema que relatou, pois não fica senha armazenada no gpweb.

    Iremos enviar seu texto para nossa equipe de programadores. Daremos ao senhor por e-mail um feedback de nossa parte.

GP-Web v. 8.0.26 (24 Jun)

25 de Junho de 2012, 1:22, por Desconhecido



Treinamento do GP-Web em Porto Alegre-RS

8 de Maio de 2012, 0:22, por Desconhecido

Devido a uma solicitação da Polícia Militar do Rio de Janeiro, que enviará oficiais ao 3º Batalhão de Comunicações, para treinamento no software GP-Web, dentre os dias 15 a 17 de maio do corrente ano, foi franqueado para as Forças Armadas, demais Polícias e Bombeiros Militares do Brasil.



Patrocínio do Tribunal de Justiça do Acre ao GP-Web

23 de Abril de 2012, 12:44, por Desconhecido

Foram realizadas diversas melhorias na versão 8.0.17 do GP-Web, todas patrocinadas pelo Tribunal de Justiça do Acre, com destaque para:



Treinamento do GP-Web para o Ministério da Integração

8 de Abril de 2012, 19:56, por Desconhecido



Treinamento do GP-Web para o INSS

4 de Abril de 2012, 5:49, por Desconhecido