如何为CodeIgniter选择身份验证库?[关闭]


398

我看到有几个。哪些维护且易于使用?他们的优缺点是什么?


8
如果您仍然感兴趣,请查看Tank Auth。我在审核后才在下面更新了我的帖子,它很棒。
詹斯·罗兰

7
感谢更新!这将是将来对该问题的访问者有用的信息,因此我更改了接受的答案。
GavinR 2010年

3
为什么突然关闭?它似乎非常符合六项主观问题准则。
Brian Ortiz'2

3
提名重新开放。完美地回答了我的一个问题(CI中的身份验证系统值得研究)。
Cruachan

3
与@BrianOrtiz和Cruachan达成协议:为什么要关闭?好问题,好答案。
彼得·K。

Answers:


465

更新(2010年5月14日):

事实证明,俄罗斯开发人员Ilya Konyukhov在阅读完此书后,按照以下建议和要求,根据DX Auth为CI创建了新的身份验证库。

由此产生的Tank Auth看起来像是OP的问题的答案。我将在这里大步向前,将Tank Auth称为当今可用的CodeIgniter最佳身份验证库。这是一个坚如磐石的库,它具有您需要的所有功能,没有您不需要的东西:

坦克认证

优点

  • 全功能
  • 考虑功能集的精益足迹(20个文件)
  • 很好的文档
  • 简单优雅的数据库设计(仅4个DB表)
  • 大多数功能是可选的,易于配置
  • 语言文件支持
  • 支持reCAPTCHA
  • 与CI的验证系统挂钩
  • 激活电子邮件
  • 使用电子邮件和/或用户名登录(可配置)
  • 未激活的帐户会自动过期
  • 简单而有效的错误处理
  • 使用phpass进行哈希处理(并在数据库中哈希自动登录代码)
  • 不使用安全性问题
  • 用户和个人资料的分离非常好
  • 围绕失败的登录尝试的非常合理的安全模型(针对僵尸程序和DoS攻击的良好保护)

(次要)缺点

  • 丢失的密码未在数据库中散列
  • 包括一个本机(较差)的验证码,对那些不想依赖(由Google拥有)reCAPTCHA服务的用户来说非常好,但是它确实不够安全
  • 联机文档非常稀疏(此处的小问题,因为代码的文档很好且直观)

在此处下载Tank Auth


原始答案:

我也已经实施了自己的工具(目前在工作几周后完成了约80%)。我首先尝试了所有其他方法;FreakAuth Light,DX Auth,Redux,SimpleLogin,SimpleLoginSecure,pc_user,Fresh Powered等。IMO,它们都没有达到标准的水平,或者它们缺乏基本功能,天生不安全,或者太膨胀而无法满足我的口味。

实际上,当我进行测试时(刚过完新年),我对CodeIgniter的所有身份验证库进行了详细的汇总。FWIW,我将与您分享:

DX认证

优点

  • 功能齐全
  • 占用空间适中(超过25个文件),但感觉很苗条
  • 出色的文档资料,尽管其中一些用英语略有损坏
  • 语言文件支持
  • 支持reCAPTCHA
  • 与CI的验证系统挂钩
  • 激活电子邮件
  • 未激活的帐户会自动过期
  • 建议使用grc.com盐(对于PRNG来说还不错)
  • 禁止使用存储的“原因”字符串
  • 简单而有效的错误处理

缺点

  • 仅允许用户“重置”丢失的密码(而不是让他们在重新激活时选择一个新密码)
  • 自制的伪事件模型-意图良好,但未实现目标
  • 用户表中的两个密码字段,样式错误
  • 使用两个单独的用户表(一个用于“临时”用户-模棱两可和冗余)
  • 使用可能不安全的md5哈希
  • 失败的登录尝试仅由IP存储,而不由用户名存储-不安全!
  • 自动登录密钥未在数据库中散列-与以明文存储密码一样不安全!
  • 角色系统是一个完整的混乱:具有硬编码角色名称的is_admin函数,is_role是一个完整的混乱,check_uri_permissions是一个混乱,整个权限表是一个坏主意(URI可以更改并使页面不受保护;权限应始终准确存储敏感逻辑所在的位置)。破坏者!
  • 包括本地(较差)的验证码
  • reCAPTCHA功能界面杂乱

FreakAuth光

优点

  • 功能齐全
  • 大部分文件记录良好
  • 用户和个人资料数据的分离很不错
  • 与CI的验证系统挂钩
  • 激活电子邮件
  • 语言文件支持
  • 积极开发

缺点

  • 感觉有点肿(50多个文件)
  • 但是它缺少自动cookie登录(!)
  • 不支持使用用户名和电子邮件登录
  • 似乎UTF-8字符有问题
  • 需要大量自动加载(妨碍性能)
  • 糟糕的微管理配置文件
  • 糟糕的视图-控制器分离,视图中有很多程序逻辑,并且将输出硬编码到控制器中。破坏者!
  • 包含的视图中的HTML代码不良
  • 包括不合格的验证码
  • 注释调试回声随处可见
  • 强制使用特定的文件夹结构
  • 强制使用特定的Ajax库(可以切换,但不应该放在第一位)
  • 没有最大登录尝试限制-非常不安全!破坏者!
  • 劫机表格验证
  • 使用可能不安全的md5哈希

pc_user

优点

  • 占地面积小,功能强大
  • 轻巧,无肿胀(3个文件)
  • 优雅的自动Cookie登录
  • 带有可选的测试实现(不错的触摸)

缺点

  • 使用旧的CI数据库语法(不太安全)
  • 不加入CI的验证系统
  • 某种类型的直觉状态(角色)系统(索引倒置-不切实际)
  • 使用可能不安全的sha1哈希

新鲜动力

优点

  • 占用空间小(6个文件)

缺点

  • 缺乏很多基本功能。破坏者!
  • 一切都是硬编码的。破坏者!

Redux /离子验证

根据CodeIgniter Wiki的说法,Redux已经停产,但是Ion Auth分支变得很强大:https//github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth是一个功能强大的库,不会过于繁重或不足。在大多数情况下,其功能集将更能满足项目的需求。

优点

  • 轻巧且易于与CodeIgniter集成
  • 支持直接从图书馆发送电子邮件
  • 在线记录良好,活跃的开发人员/用户社区
  • 易于实施到项目中

缺点

  • 比其他模式更复杂的数据库模式
  • 文档缺少某些方面的细节

简单登录安全

优点

  • 微小的足迹(4个文件)
  • 简约,绝对没有膨胀
  • 使用phpass进行哈希处理(出色)

缺点

  • 仅登录,注销,创建和删除
  • 缺乏很多基本功能。破坏者!
  • 不仅仅是图书馆的起点

不要误会我的意思我并不是要不尊重上述任何一个库;他们的开发人员所取得的成就以及他们每个人的成就都给我留下了深刻的印象,而且我并没有重用他们的一些代码来构建自己的代码。我的意思是,有时在这些项目中,重点从基本的“需要实现”(例如硬安全实践)转移到较软的“必须实现”,这就是我希望解决的问题。

因此:回到基础。

CodeIgniter的身份验证正确完成

这是身份验证库中我的MINIMAL必需的功能列表。它也恰好是我自己图书馆的功能列表的一个子集;)

  1. 微小的空间和可选的测试实现
  2. 完整文件
  3. 无需自动加载。及时加载库以提高性能
  4. 语言文件支持;没有硬编码的字符串
  5. 支持reCAPTCHA,但可选
  6. 推荐的TRUE随机盐生成(例如,使用random.org或random.irb.hr)
  7. 支持第三方登录的可选加载项(OpenID,Facebook Connect,Google帐户等)
  8. 使用用户名或电子邮件登录
  9. 用户和个人资料的分离
  10. 激活电子邮件和密码丢失
  11. 自动cookie登录功能
  12. 可配置的phpass进行哈希处理(当然要加盐!)
  13. 散列密码
  14. 散列自动登录代码
  15. 散列丢失的密码
  16. 与CI的验证系统挂钩
  17. 没有安全问题!
  18. 在服务器端强制实施强密码策略,并带有可选的客户端(Javascript)验证程序
  19. 通过针对字典和DoS攻击的最佳实践,增强了尝试登录失败的最大次数!
  20. 所有数据库访问都通过准备(绑定)语句完成!

注意:这最后几点并不是您的Web应用程序不需要的超高安全性。如果身份验证库100%不满足这些安全标准,请不要使用它!

不负责任的编码员最近的备受关注的例子使他们无法使用软件:#17是莎拉·佩林(Sarah Palin)的AOL电子邮件在总统大选期间被黑客入侵的方式;当布兰妮·斯皮尔斯,巴拉克·奥巴马,福克斯新闻等人的Twitter帐户遭到黑客入侵时,罪魁祸首是#18和#19的罪魁祸首。仅在排名第20的情况下,2008年,中国黑客就通过一次自动黑客攻击从7万多个韩国网站中窃取了900万条个人信息。

这些攻击不是脑外科手术。如果您将后门敞开,则不要通过螺栓固定前部来使自己陷入一种虚假的安全感。而且,如果您对编码足够认真,可以选择最佳实践框架(如CodeIgniter),则应归功于自己,至少可以正确地完成最基本的安全措施。


<rant>

基本上是这样:我不在乎 auth库是否提供了很多功能,高级角色管理,PHP4兼容性,漂亮的CAPTCHA字体,国家/地区表,完整的管理面板,铃声和口哨声-如果该库确实使不遵循最佳做法会使我的网站的安全性降低。这是一个身份验证程序包;它需要做一件事:身份验证。如果做不到这一点,那实际上是弊大于利。

</ rant>

/詹斯·罗兰


1
我仍然处于困境之中,遇到了一个令人讨厌的架构问题,不得不选择一起破解一个快速的解决方法(该方法可以很好地工作,但要承受紧密的耦合),或者坐下来认真思考如何正确地做。我选择了后者,但仍然没有破解:D
詹斯·罗兰

2
Jens,您可能想看看Tank Auth,它似​​乎是为回应您的(出色)帖子而创建的:codeigniter.com/forums/viewthread/110993
Richard M

8
您可以更新此帖子并与Ion-Auth(源自dx-auth)进行比较吗?在这一点上,似乎ion-auth是最新的,并且比tank-auth更活跃。我想从安全角度了解它是否与Tank-auth一样好,因为它具有一些可能有用的附加功能。
维杰

1
所有这些库都使用mysql ..但是我使用的是MongoDb,它是一个noSql数据库。是否有适用于MoongoDB的库?我尝试将上面的一个库转换成要插入MongoDB而不是MySql的库,但是它变得太复杂了,想知道一个已经做到这一点的库
Ninja

2
@Lykos:可以肯定-用户数据将是特定于auth的数据,例如UserID,UserName,Email,PasswordHash,LastLoginTime等。配置文件数据应存储在单独的DB表中,并且可以是任何东西,具体取决于特定的应用程序。这可以包括生日,性别,家乡,声誉得分等。通过这种方式,应用程序开发人员可以按照自己喜欢的任何方式修改ProfileData表,而不必担心身份验证系统突然崩溃。
詹斯·罗兰

58

请注意,Jens Roland的“综合清单”不包括用户角色。如果您有兴趣分配其他用户角色(例如admin / user或admin / editor / user),则这些库允许您这样做:

  • Ion_Auth(重写Redux)
  • Redux
  • 后端专业版

Tank_Auth(Jens列表中的上面#1)没有用户角色。我意识到这不完全是身份验证的一部分,但是

  • 身份验证和角色管理都在页面加载时处理
  • 两者都涉及安全性
  • 两者都可以使用相同的表/模型。
  • 两者都可以设置为加载到控制器构造函数中(甚至自动加载)

如果需要的话,拥有一个库来处理这两个库很有意义。因此,我从Tank_Auth切换到Ion_Auth。


嗯,知道,这真是太好了-将所有方面都集成到一个库中,让它们保持简单和实用是很高兴的。出于这个原因,将不得不研究Ion_Auth!谢谢伯顿!
Edd Twilbeck'7

4
当然,这是个好主意,角色管理(通常是授权)是许多站点的核心部分,与身份验证系统紧密相关。尽管如此,我还是会选择一个安全的身份验证系统,该系统具有简单的角色管理或不存在的角色管理,而不是每天都具有高级内置角色管理的易受攻击的身份验证系统。
詹斯·罗兰

Ion_Auth可与CI 2.1和DataMapper ORM很好地配合使用
user482594

37

Ion_auth!看起来非常有前途,占地面积小!我喜欢..

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


Ion Auth对我也很好,可以满足我的所有需求,而我却不需要任何东西(例如秘密问题之类的东西)。
SolidSmile 2010年

1
在使用,功能和轻巧性方面,Ion Auth看起来像当前的领导者。
pbreitenbach

5
我已经尝试了Tank Auth和Ion Auth,并且可以说Tank Auth代码比Ion Auth更清晰,更易于理解和易于扩展。另一方面,Ion Auth支持“角色”。
乔纳森

30

我是Redux Auth的开发人员,您提到的一些问题已在版本2 Beta中得到修复。您也可以使用示例应用程序从官方网站上下载此文件。

  • 需要自动加载(妨碍性能)
  • 使用本质上不安全的“安全问题”概念。破坏者!

现在不使用安全性问题,并且已建立了一个更简单的被忘记的密码系统。

  • 返回类型有点像是真,假,错误和成功代码

这在版本2中已修复,并返回布尔值。我和你一样讨厌大杂烩。

  • 不加入CI的验证系统

该示例应用程序使用CI的验证系统。

  • 不允许用户重新发送“丢失的密码”代码

工作正在进行中

我还实现了其他一些功能,例如电子邮件视图,这使您可以选择在电子邮件中使用CodeIgniter帮助程序。

这项工作仍在进行中,因此,如果还有其他建议,请继续提出。

-爆米花

附注:感谢您推荐Redux。


1
噢,马修(Mathew),谢谢您抽出宝贵时间回答我的帖子。Beta版听起来非常有趣-我相信您已经注意到,Redux在我的综述中已经非常接近将其正确处理,因此我将立即对其进行研究。
詹斯·罗兰

只需快速浏览一下CI论坛主题和路线图。看起来不错-就“动态”盐而言,我建议串联(注册日期)。(配置文件哈希键)。(代码或密码)以阻止彩虹表和被盗数据库上的暴力破解
Jens Roland 2009年

另外,我对auth最佳做法(stackoverflow.com/questions/549/…)和僵尸网络限制(stackoverflow.com/questions/479233/…)有一些想法,您可能想在此工作
Jens Roland 2009年

14

我遇到了Flexi Auth(http://haseydesign.com/flexi-auth/)。它看起来非常有前途,我已经开始使用它。它具有出色的功能。与CI完全集成,并且带有两个不同的库文件,其中一个库文件的所有功能都很繁重,另一个库文件仅包含验证。

最好的办法之一是,新注册的成员可以在网站上获得给定时间的临时访问权,直到他们单击电子邮件中的链接并激活为止。


感谢您的链接。它还具有Flexi Cart haseydesign.com/flexi-cart的另一个良好功能。
维尔

13

也许您会发现适合您需求的Redux。这绝不算多余,并且只包含我们大多数人所需要的裸功能。开发人员和贡献者对贡献什么代码非常严格。

这是官方页面


1
当前版本是否支持最新版本的Code Igniter?似乎很久没有更新了。否则我会喜欢。
GavinR

我在生产站点中将Redux与最新的CI版本一起使用。它非常轻巧,就像CI一样,并且非常可定制。
GloryFish

1
Redux的维护时间更长,请参见此讨论。codeigniter.com/forums/viewthread/145342
像素开发商

Ion Auth基于Redux Auth 2,这是我要使用的一种。PyroCMS也使用它。 github.com/benedmunds/CodeIgniter-Ion-Auth
罗伯特·奥迪

8

Ion_Auth击败tank_auth的主要原因是两个原因,即用户角色和文档,tank_auth中缺少这两个原因。



4

也看看BackendPro

最终,您可能最终会写一些自定义的东西,但是从DX Auth,Freak Auth,BackendPro等中借用概念并没有错。

我对打包应用程序的经验是它们特定于某些结构,并且在将它们集成到我自己的应用程序中而又不需要黑客的情况下遇到了问题,然后,如果预打包程序有更新,则必须将它们迁移到其中。

我还在CI代码中使用了Smarty和ADOdb,因此无论最终我将进行哪些重大代码更改,我都将继续使用。


3

Tank Auth看起来不错,但文档只是有关安装方法的一页说明,并且快速介绍了每个PHP文件。至少经过大量Google搜寻后,我才能找到所有这些。人们在说Tank Auth的文献充分时,上面的意思是该代码被很好地注释了。很好,但是与文档不同。拥有一些有关如何将Tank Auth功能与您的现有代码集成的文档,将是非常不错的。


3

我正在尝试Ion_Auth并感谢,顺便说一句...

SimpleLoginSecure 使身份验证简单而安全。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.