Aldeia Numaboa

  • Increase font size
  • Default font size
  • Decrease font size
Home Informática Tutoriais e Programação Joomla Como as senhas são criptografadas no Joomla

Como as senhas são criptografadas no Joomla

Indique esta página Imprimir PDF
(8 votos, média 5.0 de 5)
Índice do Artigo
Como as senhas são criptografadas no Joomla
A criptografia
Fora do contexto Joomla
Todas as páginas
Joomla

Meu amigo Tchó fez uma pergunta muito interessante: "Pretendo utilizar a tabela de usuários do Joomla para autenticar usuários em outras páginas que irei criar em um portal. Acontece que não sei como criptografar a senha digitada pelo usuário para comparar com a que está salva na tabela do BD do Joomla. Procurei muito pela Net mas ainda não encontrei... você poderia dar uma ajudinha?"

Claro que sim! E para que outros também possam usar estas informações, elas vão em forma de tutorial.

Antes de sujar a mão de graxa

Neste tutorial estou falando do método de encriptação de senhas do Joomla 1.5.x. Para reforçar a segurança deste CMS, estas versões apresentam um método bem mais robusto quando comparado com o método oferecido pelas versões mais antigas 1.0.x. Se você ainda não atualizou para a 1.5.x, está mais do que na hora de pensar em fazer isto - não só pelo aspecto segurança, mas também porque as versões 1.0.x vão ser descontinuadas.

Onde estão guardadas as informações

Não fui eu quem inventou o sistema de criptografia de senhas do Joomla, mas, como a criptografia é um dos meus assuntos preferidos, fui dar uma espiada no que a turma dos joomleiros fez. Localizei dois arquivos essenciais para entender a mecânica da cifragem: o primeiro é o arquivo joomla.php, que faz parte do plugin de autenticação; o segundo é o helper.php, que faz parte do conjunto de arquivos user da biblioteca joomla. Estão nos seguintes diretórios:

  • /plugins/authentication/joomla.php
  • /libraries/joomla/user/helper.php

Inicialmente abra o joomla.php e dê uma olhada no método onAutheticate:

  1. /**
  2. * This method should handle any authentication and report back to the subject
  3. *
  4. * @access public
  5. * @param array $credentials Array holding the user credentials
  6. * @param array $options Array of extra options
  7. * @param object $response Authentication response object
  8. * @return boolean
  9. * @since 1.5
  10. */
  11. function onAuthenticate( $credentials, $options, &$response )
  12. {
  13. jimport('joomla.user.helper');
  14.  
  15. // Joomla does not like blank passwords
  16. if (empty($credentials['password']))
  17. {
  18. $response->status = JAUTHENTICATE_STATUS_FAILURE;
  19. $response->error_message = 'Empty password not allowed';
  20. return false;
  21. }
  22.  
  23. // Initialize variables
  24. $conditions = '';
  25.  
  26. // Get a database object
  27. $db =& JFactory::getDBO();
  28.  
  29. $query = 'SELECT `id`, `password`, `gid`'
  30. . ' FROM `#__users`'
  31. . ' WHERE username=' . $db->Quote( $credentials['username'] )
  32. ;
  33. $db->setQuery( $query );
  34. $result = $db->loadObject();
  35.  
  36. if($result)
  37. {
  38. $parts = explode( ':', $result->password );
  39. $crypt = $parts[0];
  40. $salt = @$parts[1];
  41. $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
  42.  
  43. if ($crypt == $testcrypt) {
  44. $user = JUser::getInstance($result->id); // Bring this in line with the rest of the system
  45. $response->email = $user->email;
  46. $response->fullname = $user->name;
  47. $response->status = JAUTHENTICATE_STATUS_SUCCESS;
  48. $response->error_message = '';
  49. } else {
  50. $response->status = JAUTHENTICATE_STATUS_FAILURE;
  51. $response->error_message = 'Invalid password';
  52. }
  53. }
  54. else
  55. {
  56. $response->status = JAUTHENTICATE_STATUS_FAILURE;
  57. $response->error_message = 'User does not exist';
  58. }
  59. }

Não é preciso destrinchar este código todinho (o que seria uma chatice), vou apenas apontar as partes que nos interessam. As linhas 70 a 78 mostram que o plugin acessou o banco de dados do Joomla para buscar algumas informações na tabela de usuários filtrando os dados pelo nome de usuário. Depois disto, se tiver encontrado alguma coisa, explode o que encontrou no campo password usando o delimitador ":" (linha 82). A primeira parte (a senha criptografada) é armazenada na variável $crypt; a segunda (o chamado sal) é colocada na variável $salt. Isto indica que as senhas guardadas são compostas por duas partes. Alguns exemplos são:

3291503d0bd0059c54b466049594c443:Tk7F78S1VpAAGgPB
69a02eba32f545982806168859ebb08b:kQFgQ54RngbuYhsC

Logo a seguir, o método getCryptedPassword, que pertence à classe JUserHelper, é chamado com os parâmetros senha e sal (veja na linha 85). O que faz e onde está esta função? Na biblioteca do Joomla, mais especificamente no segundo arquivo que nos interessa: /libraries/joomla/user/helper.php. Veja a seguir o que são estas duas partes e como devem ser tratadas para que possamos conferir se determinado usuário está fornecendo a senha correta.



Atualização Ter, 16.12.2008 17:08  

Na Aldeia

Há 133 visitantes online

3306 registros
1 hoje
10 nesta semana
43 neste mês

Boas vindas: Italo

Estatística

Artigos: 1063
Leituras: 6038859
Arquivados: 21
Downloads: 533
Baixados: 172282
Glossário: 1208
Bibliografia: 25
Links: 90

Visitas de onde

Top 5:
Brasil flag 73%Brasil (48316)
Portugal flag 5%Portugal (3145)
EUA flag 3%EUA (2184)
Rússia flag 0%Rússia (260)
Holanda flag 0%Holanda (240)
66400 visitas de 100 países

Hoje:1408
Ontem:2587
No mês:40585
Mês passado:25815
Total:66400
Recorde:3037
No dia:04.03.10
Leituras hoje:23617
Leituras Total:285169
Bots hoje:267
Dados desde:16.02.2010

Login

Kanji da hora




Faça contato







Juro por Deus que estou morta de vergonha. Ao invés do nosso presidente ouvir os apelos e tentar ajudar, ele "tira sarro" de prisioneiros políticos perseguidos pelo seu lunático amigo Castro, apreciador do frango ensopado de dona Letícia.

Leia Mais