我应该如何为CodeIgniter选择身份验证库?

Gav*_*inR 392 php authentication codeigniter

我看到有几个.哪些是维护和易于使用?它们的优缺点是什么?

Jen*_*and 465

更新(2010年5月14日):

事实证明,俄罗斯开发人员Ilya Konyukhov在阅读完这篇文章后拿起了这个手套,并根据下面的建议和要求为DX Auth创建了一个新的auth库.

由此产生的Tank Auth看起来像是OP问题的答案.我将在这里出去,并将Tank Auth称为CodeIgniter的最佳身份验证库.它是一个坚如磐石的图书馆,拥有你需要的所有功能,没有你没有的膨胀:

Tank Auth

优点

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

(次要)缺点

  • 丢失的密码代码不会在DB中进行哈希处理
  • 包括一个原生(差)CAPTCHA,这对那些不想依赖(谷歌拥有的)reCAPTCHA服务的人来说很不错,但它确实不够安全
  • 非常稀疏的在线文档(这里的小问题,因为代码很好地记录和直观)

在这里下载Tank Auth


原始答案:

我也实现了自己的(目前大约80%在完成几周后完成).我先尝试了所有其他人; FreakAuth Light,DX Auth,Redux,SimpleLogin,SimpleLoginSecure,pc_user,Fresh Powered等等.他们都没有达到标准,IMO,要么他们缺乏基本功能,本身就是不安全,或者根据我的口味过于臃肿.

实际上,当我测试它们时(在新年之后),我对CodeIgniter的所有认证库进行了详细的综述.FWIW,我会和你分享:

DX Auth

优点

  • 非常全功能
  • 中等尺寸(25个以上的文件),但设法感觉非常苗条
  • 优秀的文档,虽然有些文档略显破碎
  • 语言文件支持
  • reCAPTCHA支持
  • 陷入CI的验证系统
  • 激活电子邮件
  • 未激活的帐户会自动过期
  • 建议grc.com使用盐(对于PRNG来说不错)
  • 禁止使用存储的"原因"字符串
  • 简单而有效的错误处理

缺点

  • 只允许用户"重置"丢失的密码(而不是让他们在重新激活时选择一个新密码)
  • Homebrew伪事件模型 - 善意,但错过了标记
  • 用户表中的两个密码字段,样式不好
  • 使用两个单独的用户表(一个用于'临时'用户 - 模糊和冗余)
  • 使用可能不安全的md5散列
  • 登录尝试失败仅由IP存储,而不是由用户名存储 - 不安全!
  • 自动登录密钥没有在数据库中进行散列 - 实际上与以明文形式存储密码一样不安全!
  • 角色系统是一个完整的混乱:is_admin函数与硬编码的角色名称,is_role完全混乱,check_uri_permissions是一个烂摊子,整个权限表是一个坏主意(URI可以更改和呈现页面不受保护;权限应始终准确存储敏感逻辑在哪里).因素在于!
  • 包括本地(差)CAPTCHA
  • reCAPTCHA功能界面很乱

FreakAuth Light

优点

  • 非常全功能
  • 大多数文档都很好
  • 分离用户和配置文件数据是一个不错的选择
  • 陷入CI的验证系统
  • 激活电子邮件
  • 语言文件支持
  • 积极发展

缺点

  • 感觉有点臃肿(50多个文件)
  • 然而它缺乏自动cookie登录(!)
  • 不支持使用用户名和电子邮件登录
  • 似乎有UTF-8字符的问题
  • 需要大量自动加载(阻碍性能)
  • 糟糕的微管理配置文件
  • 可怕的视图 - 控制器分离,视图中有大量程序逻辑,输出硬编码到控制器中.因素在于!
  • 包含的视图中的HTML代码不佳
  • 包括不合标准的CAPTCHA
  • 调试回调无处不在
  • 强制特定的文件夹结构
  • 强制一个特定的Ajax库(可以切换,但不应该在那里首先)
  • 登录尝试没有最大限制 - 非常不安全!因素在于!
  • 劫持形式验证
  • 使用可能不安全的md5散列

pc_user

优点

  • 其小巧的外形设置良好的功能
  • 轻量级,无膨胀(3档)
  • 优雅的自动cookie登录
  • 附带可选的测试实现(很好的触摸)

缺点

  • 使用旧的CI数据库语法(不太安全)
  • 不会挂钩CI的验证系统
  • 有点不直观的状态(角色)系统(索引颠倒 - 不切实际)
  • 使用可能不安全的sha1散列

新鲜动力

优点

  • 占地面积小(6档)

缺点

  • 缺乏很多基本功能.因素在于!
  • 一切都是硬编码的.因素在于!

Redux/Ion Auth

根据CodeIgniter维基,Redux已经停产,但Ion Auth前叉非常强大:https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth是一个功能齐全的图书馆,没有过重或过于先进.在大多数情况下,其功能集将满足项目的要求.

优点

  • 轻巧,易于与CodeIgniter集成
  • 支持直接从库中发送电子邮件
  • 良好的在线记录和良好的活跃开发/用户社区
  • 很容易实现到项目中

缺点

  • 比其他一些更复杂的DB模式
  • 文档在某些方面缺乏细节

SimpleLoginSecure

优点

  • 占地面积小(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攻击的BEST PRACTICES对策强制执行最大失败登录尝试次数!
  20. 通过准备(绑定)语句完成所有数据库访问!

注意:最后几点不是您的Web应用程序不需要的超高安全性过度杀伤.如果身份验证库100%不符合这些安全标准,请勿使用它!

最近高调的不负责任的编码员将他们从软件中删除的例子:#17是莎拉佩林的AOL电子邮件在总统竞选期间被黑客入侵的原因; 最近,当布兰妮斯皮尔斯,巴拉克奥巴马,福克斯新闻和其他人的推特账号遭到黑客攻击时,#18和#19的讨厌组合成了罪魁祸首; 仅20年就是中国黑客在2008年的一次自动黑客攻击中,从70,000多个韩国网站中窃取了900万条个人信息.

这些攻击不是脑部手术.如果你将后门敞开,你不应该通过用螺栓固定前部来欺骗自己.此外,如果您对编码选择像CodeIgniter这样的最佳实践框架非常认真,那么您应该至少自己完成最基本的安全措施.


<咆哮>

基本上,它是这样的:我不关心 auth库是否提供了许多功能,高级角色管理,PHP4兼容性,漂亮的CAPTCHA字体,国家表,完整的管理面板,铃声和口哨 - 如果库真的使不遵循最佳做法,我的网站不太安全.这是一个身份验证包; 它需要做一件事:认证.如果它没有做到这一点,它实际上弊大于利.

</咆哮>

/ Jens Roland

  • 你能否更新这篇文章并与[Ion-Auth](http://github.com/benedmunds/CodeIgniter-Ion-Auth)(源自dx-auth)进行比较?在这个时间点看来,ion-auth似乎更新,并且活动然后是tank-auth.我想从安全角度知道它是否与Tank-auth一样好,因为它有一些可能有用的附加功能. (8认同)
  • Jens,你可能想看看Tank Auth,它似​​乎是为了回应你的(优秀)帖子而创建的:http://codeigniter.com/forums/viewthread/110993/ (2认同)
  • @Lykos:当然 - 用户数据将是特定于身份验证的数据,例如UserID,UserName,Email,PasswordHash,LastLoginTime等.配置文件数据应存储在单独的数据库表中,可以是任何内容,具体取决于具体的应用程序.这可能包括生日,性别,家乡,声誉评分等.这样,应用程序开发人员可以以他们喜欢的任何方式修改ProfileData表,而不必担心auth系统突然崩溃. (2认同)

Bur*_*ent 58

请注意,Jens Roland的"综合列表"不包括用户角色.如果您对分配不同的用户角色感兴趣(例如admin/user或admin/editor/user),这些库允许:

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

Tank_Auth(Jens列表中的#1以上)没有用户角色.我意识到这不是认证的一部分,但是从那以后

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

如果你需要的话,让一个库同时处理它会很有意义.因为这个原因,我正在切换到Tank_Auth的Ion_Auth.

  • 当然,这是一个好点,角色管理(一般授权)是许多站点的核心部分,与认证系统密切相关.尽管如此,我还是会选择一个安全的身份验证系统,通过简单或不存在的角色管理来管理易受攻击的身份验证系统,并且每天都有高级内置角色管理. (4认同)

Mar*_*rko 37

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

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

  • 我已经尝试过Tank Auth和Ion Auth,我可以说Tank Auth代码比Ion Auth更清洁,更容易理解,更容易扩展.另一方面,Ion Auth支持"角色". (5认同)

小智 30

我是Redux Auth的开发人员,您提到的一些问题已在版本2测试版中得到修复.您也可以通过示例应用程序从官方网站上下载.

  • 需要自动加载(阻碍性能)
  • 使用本质上不安全的"安全问题"概念.因素在于!

现在没有使用安全问题,并且已经建立了一个更简单的忘记密码系统.

  • 返回类型有点像真,假,错误和成功代码的大杂烩

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

  • 不会挂钩CI的验证系统

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

  • 不允许用户重新发送"丢失密码"代码

工作正在进行中

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

它仍然是一项正在进行的工作,所以如果有任何更多的建议,请让它们继续.

-爆米花

Ps:感谢您推荐Redux.


Sut*_*ala 14

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

其中一个最好的是新注册的会员在网站上获得一段时间的临时访问权限,直到他们点击他们的电子邮件中的链接并激活.


Fil*_*vić 13

也许你会发现Redux适合你的需求.它没有矫枉过正,只有我们大多数人需要的裸机功能.开发人员和贡献者对所贡献的代码非常严格.

这是官方页面


小智 8

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


小智 6

我使用DX Auth的定制版本.我发现它使用起来很简单,非常容易修改,它有一个与Code Igniter非常相似的用户指南(有很好的例子).