我看有几个。哪些维护且易于使用?他们的优点和缺点是什么?
11 回答
更新(2010 年 5 月 14 日):
事实证明,俄罗斯开发人员 Ilya Konyukhov 在阅读本文后拿起了挑战,并根据以下建议和要求为基于 DX Auth 的 CI 创建了一个新的身份验证库。
由此产生的Tank Auth看起来像是 OP 问题的答案。我将在这里冒险并称 Tank Auth 为当今可用的 CodeIgniter 的最佳身份验证库。这是一个坚如磐石的库,具有您需要的所有功能,并且没有您不需要的臃肿:
坦克认证
优点
- 全功能
- 考虑到功能集的精益足迹(20 个文件)
- 非常好的文档
- 简洁优雅的数据库设计(仅 4 个 DB 表)
- 大多数功能都是可选的并且易于配置
- 语言文件支持
- 支持 reCAPTCHA
- 与 CI 的验证系统挂钩
- 激活电子邮件
- 使用电子邮件、用户名或两者登录(可配置)
- 未激活帐户自动过期
- 简单而有效的错误处理
- 使用 phpass 进行散列(也散列数据库中的自动登录代码)
- 不使用安全问题
- 用户和配置文件数据的分离非常好
- 围绕失败登录尝试的非常合理的安全模型(对机器人和 DoS 攻击的良好保护)
(次要)缺点
- 丢失的密码代码不会在 DB 中散列
- 包括一个本地(差)验证码,这对于那些不想依赖(谷歌拥有的)reCAPTCHA 服务的人来说很好,但它确实不够安全
- 非常稀少的在线文档(这里的小问题,因为代码记录良好且直观)
原答案:
我也实现了自己的(目前大约 80% 经过几周的工作完成)。我先尝试了所有其他方法;FreakAuth Light、DX Auth、Redux、SimpleLogin、SimpleLoginSecure、pc_user、Fresh Powered 等等。它们都达不到标准,IMO,要么缺乏基本功能,要么天生不安全,要么太臃肿,不符合我的口味。
实际上,当我测试 CodeIgniter 的所有身份验证库时(就在新年之后),我对它们进行了详细的汇总。FWIW,我将与您分享:
DX 认证
优点
- 功能很全
- 中等占用空间(超过 25 个文件),但感觉很苗条
- 优秀的文档,虽然有些是英文略显蹩脚的
- 语言文件支持
- 支持 reCAPTCHA
- 与 CI 的验证系统挂钩
- 激活电子邮件
- 未激活帐户自动过期
- 建议 grc.com 使用盐(对于 PRNG 来说还不错)
- 禁止使用存储的“原因”字符串
- 简单而有效的错误处理
缺点
- 只允许用户“重置”丢失的密码(而不是让他们在重新激活时选择一个新密码)
- Homebrew 伪事件模型 - 善意,但未达标
- 用户表中有两个密码字段,样式不好
- 使用两个单独的用户表(一个用于“临时”用户 - 模棱两可且冗余)
- 使用可能不安全的 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 集成
- 支持直接从图书馆发送电子邮件
- 有据可查的在线和良好的活跃开发/用户社区
- 易于实施到项目中
缺点
- 比其他一些更复杂的数据库模式
- 文档在某些领域缺乏细节
SimpleLoginSecure
优点
- 占地面积小(4 个文件)
- 极简主义,绝对不臃肿
- 使用 phpass 进行散列(优秀)
缺点
- 仅登录、注销、创建和删除
- 缺少很多基本功能。破坏者!
- 比图书馆更多的起点
不要误会我的意思:我并不是要不尊重上述任何图书馆;我对他们的开发人员所取得的成就以及他们每个人所取得的成就印象深刻,而且我并没有放弃重用他们的一些代码来构建我自己的代码。我的意思是,有时在这些项目中,重点从基本的“必备”(例如硬安全实践)转移到更软的“必备”,这就是我希望解决的问题.
因此:回归基础。
CodeIgniter 的身份验证正确完成
这是我的身份验证库中所需的最小功能列表。它也恰好是我自己图书馆功能列表的一个子集;)
- 具有可选测试实施的小尺寸
- 完整的文档
- 无需自动加载。即时加载库以提高性能
- 语言文件支持;没有硬编码的字符串
- 支持 reCAPTCHA 但可选
- 推荐的 TRUE 随机盐生成(例如使用 random.org 或 random.irb.hr)
- 支持 3rd 方登录的可选附加组件(OpenID、Facebook Connect、Google 帐户等)
- 使用用户名或电子邮件登录
- 分离用户和个人资料数据
- 用于激活和丢失密码的电子邮件
- 自动cookie登录功能
- 用于散列的可配置 phpass(当然要适当加盐!)
- 密码散列
- 自动登录代码的散列
- 散列丢失的密码代码
- 与 CI 的验证系统挂钩
- 没有安全问题!
- 强制的强密码策略服务器端,带有可选的客户端 (Javascript) 验证器
- 使用针对字典和 DoS 攻击的最佳实践对策强制登录尝试失败的最大次数!
- 所有数据库访问都是通过准备好的(绑定的)语句完成的!
注意:最后几点并不是您的 Web 应用程序不需要的超高安全性矫枉过正。如果身份验证库不能 100% 满足这些安全标准,请不要使用它!
最近备受瞩目的不负责任的程序员将他们排除在软件之外的例子:#17 是 Sarah Palin 的 AOL 电子邮件在总统竞选期间被黑客入侵的原因;最近,当布兰妮斯皮尔斯、巴拉克奥巴马、福克斯新闻和其他人的推特账户被黑客入侵时,#18 和 #19 的令人讨厌的组合是罪魁祸首;仅 #20 就是中国黑客如何在 2008 年的一次自动黑客攻击中成功地从 70,000 多个韩国网站窃取了 900 万条个人信息。
这些攻击不是脑部手术。如果你让你的后门敞开着,你不应该通过栓上前门来欺骗自己,从而产生一种虚假的安全感。此外,如果您对编码足够认真,可以选择像 CodeIgniter 这样的最佳实践框架,那么您应该至少正确完成最基本的安全措施。
<咆哮>
基本上,它是这样的:我不在乎一个 auth 库是否提供了一堆功能、高级角色管理、PHP4 兼容性、漂亮的 CAPTCHA 字体、国家表、完整的管理面板、花里胡哨——如果这个库真的让由于不遵循最佳实践,我的网站的安全性降低。这是一个认证包;它需要正确地做一件事:身份验证。如果它没有做到这一点,它实际上弊大于利。
</rant>
/延斯·罗兰
请注意,Jens Roland 的“综合列表”不包括用户角色。如果您有兴趣分配不同的用户角色(如 admin/user 或 admin/editor/user),这些库允许:
- Ion_Auth(重写 Redux)
- 还原
- 后端专业版
Tank_Auth(Jens 列表中的第一名)没有用户角色。我意识到这不完全是身份验证的一部分,但因为
- 身份验证和角色管理都在页面加载时处理
- 两者都涉及安全
- 相同的表/模型可用于两者。
- 两者都可以设置为在控制器构造函数中加载(甚至自动加载)
如果您需要,拥有一个库来处理两者是很有意义的。因此,我从 Tank_Auth 切换到 Ion_Auth。
离子认证!看起来很有前途,而且占地面积小!我喜欢..
我是 Redux Auth 的开发人员,您提到的一些问题已在版本 2 beta 中得到修复。您也可以使用示例应用程序从官方网站下载此内容。
- 需要自动加载(阻碍性能)
- 使用“安全问题”的固有不安全概念。破坏者!
现在不使用安全问题,并且已经建立了一个更简单的忘记密码系统。
- 返回类型有点像真、假、错误和成功代码的大杂烩
这在版本 2 中已修复并返回布尔值。我和你一样讨厌大杂烩。
- 不与 CI 的验证系统挂钩
示例应用程序使用 CI 的验证系统。
- 不允许用户重新发送“丢失的密码”代码
工作正在进行中
我还实现了一些其他功能,例如电子邮件视图,这使您可以选择在电子邮件中使用 CodeIgniter 助手。
它仍在进行中,所以如果有更多建议,请继续提出。
-爆米花
Ps:感谢推荐 Redux。
我遇到过 Flexi Auth ( http://haseydesign.com/flexi-auth/ )。它看起来很有前途,我已经开始使用它了。它具有奇妙的功能。与 CI 完全集成,并带有两个不同的库文件,其中一个非常重载所有功能,另一个仅包含验证。
最好的方法之一是新注册的会员可以在给定的时间内在网站上获得临时访问权限,直到他们点击电子邮件中的链接并激活。
Ion_Auth 击败 tank_auth 主要有两个原因,用户角色和文档,tank_auth 缺少这两个。
我使用自定义版本的DX Auth。我发现它使用简单,非常容易修改,并且它有一个与 Code Igniter 非常相似的用户指南(带有很好的示例) 。
也看看BackendPro
最终,您可能最终会编写一些自定义的东西,但是从 DX Auth、Freak Auth、BackendPro 等借用概念并没有错。
我对打包应用程序的体验是它们特定于某些结构,并且我在将它们集成到我自己的应用程序中而不需要破解时遇到了问题,然后如果预包有更新,我必须将它们迁移进去。
我还在我的 CI 代码中使用 Smarty 和 ADOdb,所以无论如何我最终都会对代码进行重大更改。
Tank Auth 看起来不错,但文档只是如何安装的一页说明,以及每个 PHP 文件的快速运行。至少这就是我在大量谷歌搜索后发现的全部。当人们说 Tank Auth 有据可查时,也许上面的意思是代码有很好的注释。这是一件好事,但与文档不同。如果有一些关于如何将 Tank Auth 的功能与现有代码集成的文档,那就太好了。
我正在尝试 Ion_Auth 并感谢它,顺便说一句......
SimpleLoginSecure 使身份验证简单而安全。