php - ci框架 - 我应该如何为CodeIgniter选择一个认证库?




authentication (8)

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


更新(2010年5月14日):

事实证明,俄罗斯开发人员Ilya Konyukhov在阅读完这本书后拿起了这本书,并根据下面的建议和要求为基于DX Auth的CI创建了一个新的auth库。

由此产生的坦克认证看起来像是OP的问题的答案。 我要在这里出去,并将Tank Auth称为CodeIgniter今天提供的最佳认证库。 这是一个坚如磐石的图书馆,它具有您所需要的所有功能,而且您无法获得所有功能:

坦克认证

优点

  • 全功能
  • 精益足迹(20个文件)考虑功能集
  • 非常好的文档
  • 简单而优雅的数据库设计(只有4个DB表格)
  • 大多数功能都是可选的并且易于配置
  • 语言文件支持
  • reCAPTCHA支持
  • 连接到CI的验证系统
  • 激活电子邮件
  • 用电子邮件,用户名或两者登录(可配置)
  • 未激活的帐户自动失效
  • 简单而有效的错误处理
  • 使用phpass进行哈希(并在数据库中哈希自动编码)
  • 不使用安全问题
  • 用户和配置文件数据的分离非常好
  • 失败的登录尝试周围的非常合理的安全模式(良好的防范机器人和DoS攻击)

(次要)缺点

  • 丢失的密码不在数据库中散列
  • 包括一个本地(可怜的)CAPTCHA,这对那些不想依赖(Google拥有的)reCAPTCHA服务的人来说很不错,但它确实不够安全
  • 非常稀少的在线文档(这里的小问题,因为代码有很好的文档记录和直观)

在这里下载Tank Auth

原始答案:

我也实施了自己的项目(目前在工作几周后完成了大约80%)。 我先尝试了所有其他人; FreakAuth Light,DX Auth,Redux,SimpleLogin,SimpleLoginSecure,pc_user,Fresh Powered等等。 他们都没有达到标准,国际海事组织,要么他们缺乏基本特征,本质上不安全,或为我的口味太臃肿。

实际上,我在测试CodeIgniter时(仅在新年之后)对CodeIgniter的所有身份验证库进行了详细综述。 FWIW,我会与你分享:

DX认证

优点

  • 非常全功能
  • 中等足迹(超过25个文件),但设法感觉很渺茫
  • 优秀的文档,虽然有些英文稍微有些破碎
  • 语言文件支持
  • reCAPTCHA支持
  • 连接到CI的验证系统
  • 激活电子邮件
  • 未激活的帐户自动失效
  • 建议grc.com用盐(对PRNG不坏)
  • 禁止使用存储的“原因”字符串
  • 简单而有效的错误处理

缺点

  • 只允许用户“重置”丢失的密码(而不是让他们在重新激活时选择新密码)
  • 自制伪事件模型 - 善意,但错过了商标
  • 用户表中有两个密码字段,样式不合适
  • 使用两个单独的用户表(一个用于“临时”用户 - 模糊和冗余)
  • 使用潜在的不安全的md5哈希
  • 失败的登录尝试仅通过IP存储,而不是通过用户名 - 不安全!
  • 自动登录密钥不在数据库中散列 - 实际上与以明文方式存储密码一样不安全!
  • 角色系统是一个完整的混乱:具有硬编码角色名称的is_admin函数,is_role完全混乱,check_uri_permissions是一团糟,整个权限表是一个坏主意(URI可以更改并且页面不受保护;权限应该始终准确存储敏感逻辑在哪里)。 因素在于!
  • 包括一个本地(可怜的)CAPTCHA
  • reCAPTCHA功能界面凌乱

怪物之光

优点

  • 非常全功能
  • 大部分文档很好的代码
  • 分离用户和个人资料数据是一个很好的接触
  • 连接到CI的验证系统
  • 激活电子邮件
  • 语言文件支持
  • 积极开发

缺点

  • 感觉有点臃肿(50多个文件)
  • 但它没有自动cookie登录(!)
  • 不支持用户名和电子邮件登录
  • 似乎有UTF-8字符的问题
  • 需要大量自动加载(阻碍性能)
  • 微不足道的配置文件
  • 可怕的View-Controller分离,在视图中有许多程序逻辑,输出硬编码到控制器中。 因素在于!
  • 包含的视图中的HTML代码很差
  • 包括不合格的CAPTCHA
  • 评论调试回声随处可见
  • 强制一个特定的文件夹结构
  • 强制一个特定的Ajax库(可以切换,但不应该在那里)
  • 登录尝试没有最大限制 - 非常不安全! 因素在于!
  • 劫持表单验证
  • 使用潜在的不安全的md5哈希

pc_user

优点

  • 它的小脚印具有良好的功能
  • 轻量级,没有膨胀(3个文件)
  • 优雅的自动cookie登录
  • 附带可选的测试实施(很好的触摸)

缺点

  • 使用旧的CI数据库语法(不太安全)
  • 不挂钩到CI的验证系统
  • 有点不直观的地位(角色)系统(索引颠倒 - 不切实际)
  • 使用潜在的不安全sha1哈希

新鲜的动力

优点

  • 占地面积小(6个文件)

缺点

  • 缺乏很多必要的功能。 因素在于!
  • 一切都是硬编码的。 因素在于!

Redux / Ion Auth

根据CodeIgniter wiki ,Redux已经停止使用,但Ion Auth分支变得越来越强大: https://github.com/benedmunds/CodeIgniter-Ion-Authhttps://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth是一个功能完善的图书馆,没有过度沉重或欠缺。 在大多数情况下,其功能集不仅仅满足项目需求。

优点

  • 轻量级且易于与CodeIgniter集成
  • 支持直接从图书馆发送电子邮件
  • 有良好的在线文档和良好的活跃开发/用户社区
  • 很容易实施到一个项目中

缺点

  • 比其他一些更复杂的数据库模式
  • 文档在某些领域缺乏细节

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. 通过BEST PRACTICES对付字典和DoS攻击的措施 ,强制实施失败登录尝试的最大次数!
  20. 所有数据库访问都通过准备(绑定)语句完成!

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

最近备受瞩目的不负责任的编码员将他们从软件中排除出去的例子:#17是Sarah Palin的AOL邮件在总统竞选期间如何被黑客攻击; 当Britney Spears,Barack Obama,Fox News等人的Twitter帐号被黑客入侵时,#18和#19的恶意组合最近是罪魁祸首。 而仅有#20就是中国黑客在2008年以一次自动黑客攻击方式从70多万韩国网站窃取900万件个人信息的方式。

这些攻击不是脑部手术。 如果你把后门敞开的话,你不应该用螺栓把前面的部分弄虚作假。 而且,如果你对编码选择CodeIgniter这样的最佳实践框架感到非常认真,那么你应该对自己负责,至少要让最基本的安全措施正确完成。

<咆哮>

基本上,它是这样的: 我不关心 auth库是否提供了一系列功能,高级角色管理,PHP4兼容性,漂亮的CAPTCHA字体,国家表格,完整的管理面板,花里胡哨的功能 - 如果库实际上使我的网站由于没有遵循最佳实践而不太安全 。 这是一个认证包; 它需要做一件事:身份验证。 如果它没有这样做,那实际上会造成更多的伤害。

</咆哮>

/延斯罗兰


Ion_Auth主要出于两个原因,用户角色和文档,tank_auth中缺少这两个。


也看看BackendPro

最终,你最终可能会写一些自定义的东西,但从DX Auth,Freak Auth,BackendPro等借用概念没有任何问题。

我对打包应用程序的经验是,它们是特定于某些结构的,我在将它们集成到自己的应用程序时不会遇到问题,因此如果预包装有更新,我必须将它们迁移到其中。

我也在我的CI代码中使用Smarty和ADOdb,所以无论我总是最终做出重大代码更改。


也许你会发现Redux适合你的需求。 这不是矫枉过正,而是完全满足我们大多数人所需要的裸露功能。 开发者和贡献者对代码的贡献非常严格。

这是官方网页



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

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

现在不使用安全问题,并且已经设置了一个更简单的被遗忘的密码系统。

  • 返回类型是真实,错误,错误和成功代码的大杂烩

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

  • 不挂钩到CI的验证系统

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

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

工作正在进行中

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

这仍然是一项进展中的工作,所以如果有任何更多的建议,请让他们来。

-爆米花

Ps:感谢您推荐Redux。


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

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


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

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

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

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

如果你需要它,有一个库可以同时处理这两个库,这是很有意义的。 因为这个,我从Tank_Auth切换到Ion_Auth。





authentication