Como devo escolher uma biblioteca de autenticação para o CodeIgniter? [fechadas]

398

Eu vejo que existem alguns . Quais são mantidos e fáceis de usar? Quais são os seus prós e contras?

GavinR
fonte
8
Se você ainda estiver interessado, consulte Tank Auth. Acabei de atualizar meu post abaixo depois de revisá-lo, e é excelente.
Jens Roland
7
Obrigado pela atualização! Essas informações serão valiosas para os visitantes desta pergunta no futuro, por isso alterei a resposta aceita.
GavinR
3
Por que o fechamento repentino? Parece se encaixar muito bem com as seis diretrizes de perguntas subjetivas.
Brian Ortiz
3
Nomeado para reabertura. Respondi a uma pergunta que eu tinha (quais sistemas de autenticação em CI valem a pena olhar) perfeitamente.
Cruachan
3
Concordou com @BrianOrtiz e Cruachan: Por que fechar? Boa pergunta e ótimas respostas.
Peter K.

Respostas:

465

Atualização (14 de maio de 2010):

Acontece que o desenvolvedor russo Ilya Konyukhov pegou a luva depois de ler isso e criou uma nova biblioteca de autenticação para o CI baseada no DX Auth, seguindo as recomendações e os requisitos abaixo.

E o Tank Auth resultante parece a resposta para a pergunta do OP. Vou falar sobre isso aqui e chamar o Tank Auth a melhor biblioteca de autenticação para o CodeIgniter disponível hoje. É uma biblioteca sólida que possui todos os recursos de que você precisa e nenhum dos inchaços que você não precisa:

Autenticação do tanque

Prós

  • Recursos completos
  • Pegada enxuta (20 arquivos) considerando o conjunto de recursos
  • Documentação muito boa
  • Design de banco de dados simples e elegante (apenas 4 tabelas de banco de dados)
  • A maioria dos recursos é opcional e facilmente configurável
  • Suporte a arquivos de idiomas
  • reCAPTCHA suportado
  • Ganchos no sistema de validação do IC
  • E-mails de ativação
  • Entre com email, nome de usuário ou ambos (configurável)
  • Contas desativadas expiram automaticamente
  • Manipulação de erro simples, mas eficaz
  • Usa phpass para hash (e também hashes códigos de registro automático no banco de dados)
  • Não usa perguntas de segurança
  • A separação dos dados do usuário e do perfil é muito boa
  • Modelo de segurança bastante razoável em torno de tentativas de login com falha (boa proteção contra bots e ataques DoS)

Contras (menores)

  • Os códigos de senha perdidos não são divididos em hash no banco de dados
  • Inclui um CAPTCHA nativo (ruim), que é bom para quem não quer depender do serviço reCAPTCHA (de propriedade do Google), mas na verdade não é seguro o suficiente
  • Documentação on-line muito escassa (questão menor aqui, pois o código é bem documentado e intuitivo)

Faça o download do Tank Auth aqui


Resposta original:

Eu também implementei (atualmente cerca de 80% é feito após algumas semanas de trabalho). Eu tentei todos os outros primeiro; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered e muito mais. Nenhum deles estava em pé de igualdade, IMO, ou estavam carecendo de recursos básicos, inerentemente inseguros ou inchados demais para o meu gosto.

Na verdade, fiz um resumo detalhado de todas as bibliotecas de autenticação do CodeIgniter quando as estava testando (logo após o Ano Novo). FWIW, vou compartilhar com você:

Autenticação DX

Prós

  • Muito completo
  • Tamanho médio (25 ou mais arquivos), mas consegue se sentir bem magro
  • Excelente documentação, embora alguns estejam em inglês ligeiramente quebrado
  • Suporte a arquivos de idiomas
  • reCAPTCHA suportado
  • Ganchos no sistema de validação do IC
  • E-mails de ativação
  • Contas desativadas expiram automaticamente
  • Sugere grc.com para sais (nada mau para um PRNG)
  • Banindo com strings 'reason' armazenadas
  • Manipulação de erro simples, mas eficaz

Contras

  • Permite apenas que os usuários redefinam uma senha perdida (em vez de permitir que eles escolham uma nova após a reativação)
  • Modelo de pseudo-evento homebrew - boa intenção, mas erra o alvo
  • Dois campos de senha na tabela de usuários, estilo incorreto
  • Usa duas tabelas de usuário separadas (uma para usuários 'temp' - ambígua e redundante)
  • Usa hash md5 potencialmente inseguro
  • Tentativas de login com falha armazenadas apenas por IP, não por nome de usuário - inseguro!
  • A chave de registro automático não é dividida em hash no banco de dados - praticamente tão insegura quanto armazenar senhas em texto não criptografado!
  • O sistema de função é uma bagunça completa: função is_admin com nomes de função codificados, is_role uma bagunça completa, check_uri_permissions é uma bagunça, toda a tabela de permissões é uma má ideia (um URI pode alterar e tornar as páginas desprotegidas; as permissões devem sempre ser armazenadas exatamente onde está a lógica sensível). Empecilho!
  • Inclui um CAPTCHA nativo (ruim)
  • A interface da função reCAPTCHA está confusa

FreakAuth Light

Prós

  • Muito completo
  • Código muito bem documentado
  • A separação dos dados do usuário e do perfil é um toque agradável
  • Ganchos no sistema de validação do IC
  • E-mails de ativação
  • Suporte a arquivos de idiomas
  • Desenvolvido ativamente

Contras

  • Parece um pouco inchado (mais de 50 arquivos)
  • E ainda falta o login automático de cookies (!)
  • Não suporta logins com nome de usuário e email
  • Parece ter problemas com caracteres UTF-8
  • Requer muito carregamento automático (impedindo o desempenho)
  • Arquivo de configuração mal gerenciado
  • Terrível separação entre visualizador e controlador, com muita lógica de programa nas visualizações e saída codificada nos controladores. Empecilho!
  • Código HTML incorreto nas visualizações incluídas
  • Inclui CAPTCHA abaixo do padrão
  • A depuração comentada ecoa em todos os lugares
  • Força uma estrutura de pastas específica
  • Força uma biblioteca Ajax específica (pode ser alternada, mas não deveria estar lá em primeiro lugar)
  • Não há limite máximo para tentativas de login - MUITO inseguro! Empecilho!
  • Validação de formulário de invasões
  • Usa hash md5 potencialmente inseguro

pc_user

Prós

  • Bom conjunto de recursos por sua pequena área ocupada
  • Leve, sem inchaço (3 arquivos)
  • Login automático elegante de cookies
  • Vem com implementação opcional de teste (toque agradável)

Contras

  • Usa a sintaxe antiga do banco de dados do IC (menos seguro)
  • Não se conecta ao sistema de validação do IC
  • Sistema de status (função) não intuitivo (índices de cabeça para baixo - impraticável)
  • Usa hash sha1 potencialmente inseguro

Fresh Powered

Prós

  • Tamanho pequeno (6 arquivos)

Contras

  • Falta muitos recursos essenciais. Empecilho!
  • Tudo é codificado. Empecilho!

Autenticação Redux / Ion

De acordo com o wiki do CodeIgniter , o Redux foi descontinuado, mas o fork do Ion Auth está forte: https://github.com/benedmunds/CodeIgniter-Ion-Auth

O Ion Auth é uma biblioteca com muitos recursos, sem ser excessivamente pesada ou avançada. Na maioria dos casos, seu conjunto de recursos atenderá mais do que os requisitos de um projeto.

Prós

  • Leve e simples de integrar com o CodeIgniter
  • Suporta o envio de e-mails diretamente da biblioteca
  • Bem documentado online e boa comunidade de desenvolvedores / usuários ativos
  • Simples de implementar em um projeto

Contras

  • Esquema de banco de dados mais complexo do que alguns outros
  • A documentação não possui detalhes em algumas áreas

SimpleLoginSecure

Prós

  • Pegada minúscula (4 arquivos)
  • Minimalista, absolutamente nenhum inchaço
  • Usa phpass para hash (excelente)

Contras

  • Somente faça login, logout, crie e exclua
  • Falta muitos recursos essenciais. Empecilho!
  • Mais um ponto de partida do que uma biblioteca

Não me interpretem mal: não pretendo desrespeitar nenhuma das bibliotecas acima; Estou muito impressionado com o que seus desenvolvedores alcançaram e com o quão longe cada um deles chegou, e não estou reutilizando parte de seu código para criar o meu. O que estou dizendo é que, algumas vezes, nesses projetos, o foco muda das 'necessidades essenciais' (como práticas difíceis de segurança) para as 'coisas agradáveis' mais suaves, e é isso que espero remediar .

Portanto: de volta ao básico.

Autenticação para CodeIgniter feita corretamente

Aqui está minha lista mínima de recursos obrigatórios de uma biblioteca de autenticação. Também é um subconjunto da lista de recursos da minha própria biblioteca;)

  1. Área reduzida com implementação de teste opcional
  2. Documentação completa
  3. Não é necessário carregamento automático. Carregamento just-in-time de bibliotecas para desempenho
  4. Suporte a arquivos de idiomas; sem seqüências codificadas
  5. reCAPTCHA suportado, mas opcional
  6. TRUE geração de sal aleatória VERDADEIRO recomendada (por exemplo, usando random.org ou random.irb.hr)
  7. Complementos opcionais para dar suporte ao login de terceiros (OpenID, Facebook Connect, Conta do Google etc.)
  8. Faça login usando nome de usuário ou email
  9. Separação de dados de usuário e perfil
  10. E-mails para ativação e senhas perdidas
  11. Recurso de login automático de cookies
  12. Phpass configurável para hash (corretamente salgado, é claro!)
  13. Hashing de senhas
  14. Hashing de códigos de registro automático
  15. Hashing de códigos de senha perdidos
  16. Ganchos no sistema de validação do IC
  17. SEM perguntas de segurança!
  18. Política de senha forte imposta do lado do servidor, com validador opcional do lado do cliente (Javascript)
  19. Número máximo imposto de tentativas de logon com falha com as contramedidas do BEST PRACTICES contra ataques de dicionário e DoS!
  20. Todo o acesso ao banco de dados é feito através de instruções preparadas (encadernadas)!

Nota: esses últimos pontos não são um exagero de segurança super alta que você não precisa no seu aplicativo Web. Se uma biblioteca de autenticação não atender 100% a esses padrões de segurança, NÃO USE!

Exemplos recentes de alto perfil de codificadores irresponsáveis ​​que os deixaram de fora de seu software: # 17 é como o email da AOL de Sarah Palin foi invadido durante a campanha presidencial; uma desagradável combinação de # 18 e # 19 foi a culpada recentemente quando as contas de Britney Spears, Barack Obama, Fox News e outras no Twitter foram hackeadas; e o número 20 é o modo como hackers chineses conseguiram roubar 9 milhões de itens de informações pessoais de mais de 70.000 sites coreanos em um hack automático em 2008.

Esses ataques não são cirurgia cerebral. Se você deixar as portas traseiras abertas, não se iluda com uma falsa sensação de segurança, trancando a frente. Além disso, se você é sério o suficiente sobre a codificação para escolher uma estrutura de práticas recomendadas como o CodeIgniter, deve a si próprio pelo menos obter as medidas de segurança mais básicas corretamente.


<rant>

Basicamente, eis a seguinte: Não me importo se uma biblioteca de autenticação oferece vários recursos, gerenciamento avançado de funções, compatibilidade com PHP4, fontes CAPTCHA bonitas, tabelas de países, painéis de administração completos, sinos e assobios - se a biblioteca realmente fornecer meu site menos seguro por não seguir as práticas recomendadas. É um pacote de autenticação ; ele precisa fazer UMA coisa certa: autenticação. Se não conseguir fazer isso , está realmente fazendo mais mal do que bem.

</rant>

/ Jens Roland

Jens Roland
fonte
11
Eu ainda estou nele, encontrei um problema de arquitetura desagradável e tive que escolher entre hackear uma solução rápida (que funcionaria bem, mas sofre de acoplamento apertado), ou sente-se e pense bastante sobre como fazê-lo corretamente . Eu escolhi a última opção, e ainda não a decifrei: D
Jens Roland
2
Jens, você pode querer olhar para Tanque Auth que parece ter sido criado em resposta ao seu (excelente) post: codeigniter.com/forums/viewthread/110993
Richard M
8
Você pode atualizar esta postagem e comparar com o Ion-Auth (derivado do dx-auth)? Parece que o ion-auth está mais atualizado e ativo que o tank-auth neste momento. Eu quero saber, do ponto de vista da segurança, se é tão bom quanto a autenticação de tanque ou não, porque possui alguns recursos adicionais que podem ser úteis.
Vijay
11
Todas essas bibliotecas usam mysql .. no entanto, eu uso o MongoDb, que é um banco de dados noSql. Existe uma biblioteca que funciona com o MoongoDB? Eu tentei converter uma das bibliotecas acima para inserir em MongoDB em vez de MySql, mas ele está ficando complexo demais e gostaria de saber uma biblioteca que já faz isso
Ninja
2
@Lykos: Claro - os dados do usuário seriam dados específicos da autenticação, como UserID, UserName, Email, PasswordHash, LastLoginTime, etc. Os dados do perfil devem ser armazenados em uma tabela de banco de dados separada e podem ser qualquer coisa, dependendo do aplicativo específico. Isso pode incluir coisas como aniversário, sexo, cidade natal, pontuação de reputação etc. Dessa forma, os desenvolvedores de aplicativos podem modificar a tabela ProfileData da maneira que preferirem, sem precisar se preocupar com a quebra repentina do sistema de autenticação.
Jens Roland
58

Observe que a "listagem abrangente" de Jens Roland não inclui funções de usuário. Se você estiver interessado em atribuir diferentes funções de usuário (como administrador / usuário ou administrador / editor / usuário), essas bibliotecas permitem:

  • Ion_Auth (reescrita do Redux)
  • Restaurado
  • Backend Pro

Tank_Auth (nº 1 acima na lista de Jens) não possui funções de usuário. Sei que não é exatamente parte da autenticação, mas desde

  • autenticação e gerenciamento de função são tratados com o carregamento da página
  • Ambos envolvem segurança
  • A mesma tabela / modelo pode ser usada para ambos.
  • Ambos podem ser configurados para carregar no construtor do controlador (ou mesmo carregar automaticamente)

Faz muito sentido ter uma biblioteca para lidar com ambos, se você precisar. Estou mudando para Ion_Auth de Tank_Auth por causa disso.

Burton Kent
fonte
Ah, veja, é realmente bom saber - é bom ter todos os aspectos em uma biblioteca, mantém tudo simples e funcional. Terá que olhar para Ion_Auth apenas por esse motivo! Obrigado Burton!
Edd Twilbeck
4
Esse é um bom ponto, é claro, e o gerenciamento de funções (autorização em geral) é parte central de muitos sites, intimamente ligados ao sistema de autenticação. Ainda assim, vou escolher um sistema de autenticação seguro com gerenciamento de funções simplista ou inexistente, em vez de um sistema de autenticação vulnerável com gerenciamento de funções interno avançado a qualquer dia.
Jens Roland
Ion_Auth funciona bem com CI 2.1 e DataMapper ORM
user482594
37

Ion_auth! Parece uma pegada muito promissora e pequena! Eu gosto..

http://github.com/benedmunds/CodeIgniter-Ion-Auth

Marko
fonte
O Ion Auth também funciona bem para mim, tem tudo que eu preciso e nada que eu não precise (como perguntas secretas e coisas do gênero).
SolidSmile
11
O Ion Auth se parece com o atual líder em termos de uso, recursos e leveza.
pbreitenbach
5
Eu tentei o Tank Auth e o Ion Auth e posso dizer que o código do Tank Auth é muito mais limpo, mais fácil de entender e mais extenso do que o Ion Auth. Por outro lado, o Ion Auth suporta 'papéis'.
11117 Jonathan
30

Sou desenvolvedor do Redux Auth e alguns dos problemas mencionados foram corrigidos na versão 2 beta. Você pode fazer o download deste site oficial também com um aplicativo de amostra.

  • Requer carregamento automático (impedindo o desempenho)
  • Usa o conceito inerentemente inseguro de 'perguntas de segurança'. Empecilho!

Agora, questões de segurança não são usadas e um sistema de senha esquecido mais simples foi implementado.

  • Os tipos de retorno são uma mistura de códigos verdadeiros, falsos, de erro e de sucesso

Isso foi corrigido na versão 2 e retorna valores booleanos. Eu odiava a mistura tanto quanto você.

  • Não se conecta ao sistema de validação do IC

O aplicativo de amostra usa o sistema de validação do IC.

  • Não permite que um usuário reenvie um código de 'senha perdida'

Trabalho em progresso

Também implementei alguns outros recursos, como visualizações de e-mail, para poder usar os assistentes do CodeIgniter nos seus e-mails.

Ainda está em andamento, por isso, se tiver mais sugestões, continue com elas.

-Pipoca

Ps: Obrigado por recomendar o Redux.

Svish
fonte
11
Oh, oi Mathew - e obrigado por dedicar um tempo para responder à minha postagem. A versão beta parece muito interessante - como eu tenho certeza que você notou, o Redux já se aproximou de acertar tudo na minha rodada, por isso vou analisar imediatamente.
Jens Roland
Basta ter uma rápida olhada no tópico e no roteiro do CI Forum. Com boa aparência - em relação aos sais 'dinâmicos', recomendo concatenar (data de registro). (chave de hash do arquivo de configuração). (código ou senha) para frustrar tabelas do arco-íris e de força bruta em um banco de dados roubados
Jens Roland
Além disso, tenho algumas reflexões sobre as práticas recomendadas de autenticação ( stackoverflow.com/questions/549/… ) e a otimização de botnet ( stackoverflow.com/questions/479233/… ) que você pode querer atropelar
Jens Roland
14

Encontrei o Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Parece muito promissor, e eu comecei a usá-lo. Tem características maravilhosas. Integra-se totalmente ao CI e vem com dois arquivos de biblioteca diferentes, nos quais um é muito carregado com todas as funções e o outro contém apenas as validações.

Uma das melhores é que o membro recém-registrado obtém acesso temporário por um determinado período de tempo no site, até clicar no link do email e ativar.

Suthan Bala
fonte
Obrigado por este link. Ele também tem outro bom recurso: Flexi Cart haseydesign.com/flexi-cart .
Vir
13

Talvez você ache o Redux adequado às suas necessidades. Não é um exagero e é fornecido apenas com recursos simples que a maioria de nós exigiria. O desenvolvedor e os colaboradores foram muito rigorosos quanto ao código que contribuiu.

Esta é a página oficial

Filip Dupanović
fonte
11
a versão atual suporta a versão mais recente do Code Igniter? Parece que não há uma atualização há muito tempo. Caso contrário, eu gosto.
GavinR 14/12/08
Estou usando o Redux com a versão mais recente do IC em um site de produção. É muito leve, assim como o CI e muito personalizável.
GloryFish 30/01/09
11
Redux é mantido por mais tempo, veja esta discussão. codeigniter.com/forums/viewthread/145342
The Pixel Developer
O Ion Auth é baseado no Redux Auth 2 e é o que eu usaria. O PyroCMS também o usa. github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi
8

O Ion_Auth vence o tank_auth principalmente por dois motivos: funções do usuário e documentação, esses dois estão ausentes no tank_auth.

nedu
fonte
6

Eu uso uma versão personalizada do DX Auth . Achei simples de usar, extremamente fácil de modificar e possui um guia do usuário (com ótimos exemplos) muito parecido com o do Code Igniter.

Jelani Harris
fonte
4

Veja também o BackendPro

Por fim, você provavelmente acabará escrevendo algo personalizado, mas não há nada errado com os conceitos de empréstimo do DX Auth, Freak Auth, BackendPro, etc.

Minhas experiências com os aplicativos empacotados são específicas de determinadas estruturas e tive problemas para integrá-los em meus próprios aplicativos sem exigir hacks; se o pré-pacote tiver uma atualização, preciso migrá-los.

Eu também uso Smarty e ADOdb no meu código de IC, portanto, não importa o que eu sempre acabe fazendo grandes alterações de código.

Adão
fonte
3

A autenticação do tanque parece boa, mas a documentação é apenas uma explicação de uma página sobre como instalar, além de uma rápida descrição de cada arquivo PHP. Pelo menos foi tudo o que encontrei depois de pesquisar no Google. Talvez o que as pessoas querem dizer acima quando dizem que o Tank Auth está bem documentado seja que o código esteja bem comentado. Isso é bom, mas diferente da documentação. Seria bom ter alguma documentação sobre como integrar os recursos do Tank Auth com o código existente.

user1284303
fonte
3

Estou tentando Ion_Auth e aprecio isso, aliás ...

SimpleLoginSecure Torna a autenticação simples e segura.

Fabiano Shark
fonte