Giter VIP home page Giter VIP logo

Comments (8)

rogeriolino avatar rogeriolino commented on June 11, 2024 1

Obrigado @CauanCabral .

Se você olhar a entidade usuário no branch v2.0 já está assim (algoritmo + salt): https://github.com/novosga/novosga/blob/v2.0/src/Novosga/Entity/Usuario.php

Por enquanto no security.yml só tem definido MD5, mas depois vou criar uma entrada para o MessageDigest do próprio Symfony:

https://github.com/novosga/novosga/blob/v2.0/app/config/security.yml

E por exemplo no security.yml:

encoders:
        ...
        bcrypt:
            algorithm: bcrypt
            cost: 15

Por fim estou pensando em detectar que o perfil do usuário é da versão antiga e levar o usuário para uma página para atualizar o perfil. Aí nesse caso poderia até adicionar o campo e-mail (que daria para utilizar para envio de alertas).

from novosga.

rogeriolino avatar rogeriolino commented on June 11, 2024

@CauanCabral o método de encriptação não foi alterado para manter compatibilidade com o SGA Livre (que usa apenas md5).

Então, acho que o requisito para essa mudança, é a implementação de um "esqueci minha senha" para depois quando assumirmos uma nova estratégia de hash numa próxima versão, não invalide a aplicação já instalada.

ps: Migrar as senhas creio não ser a alternativa. O negócio é assumir que teve que melhorar a segurança e que os usuários atualizem suas senhas.

from novosga.

CauanCabral avatar CauanCabral commented on June 11, 2024

Fiz a implementação da geração e verificação da senha, falta ainda trabalhar na recuperação da mesma.

from novosga.

rogeriolino avatar rogeriolino commented on June 11, 2024

Pensando melhor, essa recuperação de senha (por enquanto) não vai funcionar legal. Porque na tabela de usuários não tem coluna para e-mail.

from novosga.

CauanCabral avatar CauanCabral commented on June 11, 2024

Então, reparei isso.
Incluí um campo para email e outros dois para recuperação de senha, mas isso só funcionará para quem já tem email cadastrado no sistema.

Como você comentou na outra issue, talvez a solução seja manter um campo secundário para armazenar a antiga senha, como um modo de compatibilidade mesmo. Vou pensar um pouco em como implementar essa solução.

from novosga.

rogeriolino avatar rogeriolino commented on June 11, 2024

👍

from novosga.

rogeriolino avatar rogeriolino commented on June 11, 2024
  • Criar coluna "algoritmo" para guardar algoritmo utilizado no hash da senha. Atualmente usa MD5, então no script de migração do banco já deve iniciar a coluna com "md5".
  • Criar interface PasswordProvider e suas especializações (ex Md5PasswordProvider)
  • Criar factory do password provider para retornar a instância a partir do usuário
  • Definir um novo algoritmo para armanezar as senhas e implementar o seu provider
  • Utilizar novo provider ao criar novos usuário ou atualizar senha

from novosga.

CauanCabral avatar CauanCabral commented on June 11, 2024

@rogeriolino estava dando uma olhada na situação do projeto depois de um bom tempo afastado e gostei bastante do que tem feito, parabéns.

Tenho algumas ideias para implementar essa issue, posso fazer uma proposição via PR?

  • Acho que não precisa da coluna com o algoritmo. Pelo tamanho da string de hash já podemos deduzir que é MD5 ou um formato moderno
  • Como a versão 2.0 é baseada no Symfony 3, que por sua vez tem dependencia no PHP 5.5, podemos usar as extensões nativas de password que foram implementadas e na época que abri essa issue não existiam ( http://php.net/manual/pt_BR/function.password-hash.php )
  • O restante do seu checklist eu estou de acordo, só faria transparente a migração de senha: sempre que um usuário fizer login e ainda tiver hash md5, o sistema detecta e faz um novo hash a partir da senha fornecida usando a nova implementação.

from novosga.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.