我看到有几个。哪些维护且易于使用?他们的优缺点是什么?
我看到有几个。哪些维护且易于使用?他们的优缺点是什么?
Answers:
事实证明,俄罗斯开发人员Ilya Konyukhov在阅读完此书后,按照以下建议和要求,根据DX Auth为CI创建了新的身份验证库。
由此产生的Tank Auth看起来像是OP的问题的答案。我将在这里大步向前,将Tank Auth称为当今可用的CodeIgniter最佳身份验证库。这是一个坚如磐石的库,它具有您需要的所有功能,没有您不需要的东西:
优点
- 全功能
- 考虑功能集的精益足迹(20个文件)
- 很好的文档
- 简单优雅的数据库设计(仅4个DB表)
- 大多数功能是可选的,易于配置
- 语言文件支持
- 支持reCAPTCHA
- 与CI的验证系统挂钩
- 激活电子邮件
- 使用电子邮件和/或用户名登录(可配置)
- 未激活的帐户会自动过期
- 简单而有效的错误处理
- 使用phpass进行哈希处理(并在数据库中哈希自动登录代码)
- 不使用安全性问题
- 用户和个人资料的分离非常好
- 围绕失败的登录尝试的非常合理的安全模型(针对僵尸程序和DoS攻击的良好保护)
(次要)缺点
- 丢失的密码未在数据库中散列
- 包括一个本机(较差)的验证码,对那些不想依赖(由Google拥有)reCAPTCHA服务的用户来说非常好,但是它确实不够安全
- 联机文档非常稀疏(此处的小问题,因为代码的文档很好且直观)
原始答案:
我也已经实施了自己的工具(目前在工作几周后完成了约80%)。我首先尝试了所有其他方法;FreakAuth Light,DX Auth,Redux,SimpleLogin,SimpleLoginSecure,pc_user,Fresh Powered等。IMO,它们都没有达到标准的水平,或者它们缺乏基本功能,天生不安全,或者太膨胀而无法满足我的口味。
实际上,当我进行测试时(刚过完新年),我对CodeIgniter的所有身份验证库进行了详细的汇总。FWIW,我将与您分享:
优点
- 功能齐全
- 占用空间适中(超过25个文件),但感觉很苗条
- 出色的文档资料,尽管其中一些用英语略有损坏
- 语言文件支持
- 支持reCAPTCHA
- 与CI的验证系统挂钩
- 激活电子邮件
- 未激活的帐户会自动过期
- 建议使用grc.com盐(对于PRNG来说还不错)
- 禁止使用存储的“原因”字符串
- 简单而有效的错误处理
缺点
- 仅允许用户“重置”丢失的密码(而不是让他们在重新激活时选择一个新密码)
- 自制的伪事件模型-意图良好,但未实现目标
- 用户表中的两个密码字段,样式错误
- 使用两个单独的用户表(一个用于“临时”用户-模棱两可和冗余)
- 使用可能不安全的md5哈希
- 失败的登录尝试仅由IP存储,而不由用户名存储-不安全!
- 自动登录密钥未在数据库中散列-与以明文存储密码一样不安全!
- 角色系统是一个完整的混乱:具有硬编码角色名称的is_admin函数,is_role是一个完整的混乱,check_uri_permissions是一个混乱,整个权限表是一个坏主意(URI可以更改并使页面不受保护;权限应始终准确存储敏感逻辑所在的位置)。破坏者!
- 包括本地(较差)的验证码
- reCAPTCHA功能界面杂乱
优点
- 功能齐全
- 大部分文件记录良好
- 用户和个人资料数据的分离很不错
- 与CI的验证系统挂钩
- 激活电子邮件
- 语言文件支持
- 积极开发
缺点
- 感觉有点肿(50多个文件)
- 但是它缺少自动cookie登录(!)
- 不支持使用用户名和电子邮件登录
- 似乎UTF-8字符有问题
- 需要大量自动加载(妨碍性能)
- 糟糕的微管理配置文件
- 糟糕的视图-控制器分离,视图中有很多程序逻辑,并且将输出硬编码到控制器中。破坏者!
- 包含的视图中的HTML代码不良
- 包括不合格的验证码
- 注释调试回声随处可见
- 强制使用特定的文件夹结构
- 强制使用特定的Ajax库(可以切换,但不应该放在第一位)
- 没有最大登录尝试限制-非常不安全!破坏者!
- 劫机表格验证
- 使用可能不安全的md5哈希
优点
- 占地面积小,功能强大
- 轻巧,无肿胀(3个文件)
- 优雅的自动Cookie登录
- 带有可选的测试实现(不错的触摸)
缺点
- 使用旧的CI数据库语法(不太安全)
- 不加入CI的验证系统
- 某种类型的直觉状态(角色)系统(索引倒置-不切实际)
- 使用可能不安全的sha1哈希
优点
- 占用空间小(6个文件)
缺点
- 缺乏很多基本功能。破坏者!
- 一切都是硬编码的。破坏者!
根据CodeIgniter Wiki的说法,Redux已经停产,但是Ion Auth分支变得很强大:https://github.com/benedmunds/CodeIgniter-Ion-Auth
Ion Auth是一个功能强大的库,不会过于繁重或不足。在大多数情况下,其功能集将更能满足项目的需求。
优点
- 轻巧且易于与CodeIgniter集成
- 支持直接从图书馆发送电子邮件
- 在线记录良好,活跃的开发人员/用户社区
- 易于实施到项目中
缺点
- 比其他模式更复杂的数据库模式
- 文档缺少某些方面的细节
优点
- 微小的足迹(4个文件)
- 简约,绝对没有膨胀
- 使用phpass进行哈希处理(出色)
缺点
- 仅登录,注销,创建和删除
- 缺乏很多基本功能。破坏者!
- 不仅仅是图书馆的起点
不要误会我的意思:我并不是要不尊重上述任何一个库;他们的开发人员所取得的成就以及他们每个人的成就都给我留下了深刻的印象,而且我并没有重用他们的一些代码来构建自己的代码。我的意思是,有时在这些项目中,重点从基本的“需要实现”(例如硬安全实践)转移到较软的“必须实现”,这就是我希望解决的问题。
因此:回到基础。
这是身份验证库中我的MINIMAL必需的功能列表。它也恰好是我自己图书馆的功能列表的一个子集;)
- 微小的空间和可选的测试实现
- 完整文件
- 无需自动加载。及时加载库以提高性能
- 语言文件支持;没有硬编码的字符串
- 支持reCAPTCHA,但可选
- 推荐的TRUE随机盐生成(例如,使用random.org或random.irb.hr)
- 支持第三方登录的可选加载项(OpenID,Facebook Connect,Google帐户等)
- 使用用户名或电子邮件登录
- 用户和个人资料的分离
- 激活电子邮件和密码丢失
- 自动cookie登录功能
- 可配置的phpass进行哈希处理(当然要加盐!)
- 散列密码
- 散列自动登录代码
- 散列丢失的密码
- 与CI的验证系统挂钩
- 没有安全问题!
- 在服务器端强制实施强密码策略,并带有可选的客户端(Javascript)验证程序
- 通过针对字典和DoS攻击的最佳实践,增强了尝试登录失败的最大次数!
- 所有数据库访问都通过准备(绑定)语句完成!
注意:这最后几点并不是您的Web应用程序不需要的超高安全性。如果身份验证库100%不满足这些安全标准,请不要使用它!
不负责任的编码员最近的备受关注的例子使他们无法使用软件:#17是莎拉·佩林(Sarah Palin)的AOL电子邮件在总统大选期间被黑客入侵的方式;当布兰妮·斯皮尔斯,巴拉克·奥巴马,福克斯新闻等人的Twitter帐户遭到黑客入侵时,罪魁祸首是#18和#19的罪魁祸首。仅在排名第20的情况下,2008年,中国黑客就通过一次自动黑客攻击从7万多个韩国网站中窃取了900万条个人信息。
这些攻击不是脑外科手术。如果您将后门敞开,则不要通过螺栓固定前部来使自己陷入一种虚假的安全感。而且,如果您对编码足够认真,可以选择最佳实践框架(如CodeIgniter),则应归功于自己,至少可以正确地完成最基本的安全措施。
<rant>
基本上是这样:我不在乎 auth库是否提供了很多功能,高级角色管理,PHP4兼容性,漂亮的CAPTCHA字体,国家/地区表,完整的管理面板,铃声和口哨声-如果该库确实使不遵循最佳做法会使我的网站的安全性降低。这是一个身份验证程序包;它需要做一件事:身份验证。如果做不到这一点,那实际上是弊大于利。
</ rant>
/詹斯·罗兰
请注意,Jens Roland的“综合清单”不包括用户角色。如果您有兴趣分配其他用户角色(例如admin / user或admin / editor / user),则这些库允许您这样做:
Tank_Auth(Jens列表中的上面#1)没有用户角色。我意识到这不完全是身份验证的一部分,但是
如果需要的话,拥有一个库来处理这两个库很有意义。因此,我从Tank_Auth切换到Ion_Auth。
Ion_auth!看起来非常有前途,占地面积小!我喜欢..
我是Redux Auth的开发人员,您提到的一些问题已在版本2 Beta中得到修复。您也可以使用示例应用程序从官方网站上下载此文件。
- 需要自动加载(妨碍性能)
- 使用本质上不安全的“安全问题”概念。破坏者!
现在不使用安全性问题,并且已建立了一个更简单的被忘记的密码系统。
- 返回类型有点像是真,假,错误和成功代码
这在版本2中已修复,并返回布尔值。我和你一样讨厌大杂烩。
- 不加入CI的验证系统
该示例应用程序使用CI的验证系统。
- 不允许用户重新发送“丢失的密码”代码
工作正在进行中
我还实现了其他一些功能,例如电子邮件视图,这使您可以选择在电子邮件中使用CodeIgniter帮助程序。
这项工作仍在进行中,因此,如果还有其他建议,请继续提出。
-爆米花
附注:感谢您推荐Redux。
我遇到了Flexi Auth(http://haseydesign.com/flexi-auth/)。它看起来非常有前途,我已经开始使用它。它具有出色的功能。与CI完全集成,并且带有两个不同的库文件,其中一个库文件的所有功能都很繁重,另一个库文件仅包含验证。
最好的办法之一是,新注册的成员可以在网站上获得给定时间的临时访问权,直到他们单击电子邮件中的链接并激活为止。
我使用DX Auth的定制版本。我发现它简单易用,非常容易修改,并且它的用户指南(带有出色的示例)与Code Igniter的非常相似。
也看看BackendPro
最终,您可能最终会写一些自定义的东西,但是从DX Auth,Freak Auth,BackendPro等中借用概念并没有错。
我对打包应用程序的经验是它们特定于某些结构,并且在将它们集成到我自己的应用程序中而又不需要黑客的情况下遇到了问题,然后,如果预打包程序有更新,则必须将它们迁移到其中。
我还在CI代码中使用了Smarty和ADOdb,因此无论最终我将进行哪些重大代码更改,我都将继续使用。