我知道有a few个.哪些是可维护且易于使用的?他们的优缺点是什么?

推荐答案

更新(2010年5月14日):

It turns out, the russian developer Ilya Konyukhov picked up the gauntlet after reading this and created a new auth library for CI based on DX认证, following the recommendations and requirements below.

And the resulting 100 is looking like the answer to the OP's question. I'm going to go out on a limb here and call 坦克身份验证 the best authentication library for CodeIgniter available today. It's a rock-solid library that has all the features you need and none of the bloat you don't:

坦克身份验证

专业人士

  • 功能齐全
  • 考虑到功能集,精简封装外形(20个文件)
  • 非常好的文档
  • 简单优雅的数据库设计(仅4个DB表)
  • 大多数功能都是可选的,易于配置
  • 语言文件支持
  • reCAPTCHA支持
  • 钩住CI的验证系统
  • 激活邮箱
  • 使用邮箱和/或用户名登录(可配置)
  • 未激活的帐户自动过期
  • 简单而有效的错误处理
  • 使用phpass进行散列(也对数据库中的自动登录代码进行散列)
  • 不使用安全问题
  • 用户和配置文件数据的分离非常好
  • 围绕失败的登录try 的非常合理的安全模型(针对僵尸和DoS攻击的良好保护)

(小调)缺点

  • 丢失的密码代码不会在数据库中进行散列
  • 包括一个原生的(差的)验证码,这对于那些不想依赖(谷歌所有的)reCAPTCHA服务的人来说很好,但是它确实不够安全
  • 非常稀疏的在线文档(这里的问题很小,因为代码有很好的文档记录和直观性)

Download 坦克身份验证 here


原始答案:

我也实现了自己的功能(目前大约80%是在几周的工作后完成的).我先把其他的都试过了;畸形光、DX认证、Redux、SimpleLogin、SimpleLoginSecurity、pc_用户、新动力等.他们都没有达到标准,IMO,他们要么缺乏基本特征,要么天生不安全,要么过于臃肿.

实际上,我在测试CodeIgniter的所有身份验证库时(新年刚过),对它们进行了详细的总结.FWIW,我将与你分享:

DX认证

专业人士

  • 功能齐全
  • 中等占地面积(25+个文件),但感觉相当苗条
  • 优秀的文档,尽管有些文档的英文稍有欠缺
  • 语言文件支持
  • reCAPTCHA支持
  • 钩住CI的验证系统
  • 激活邮箱
  • 未激活的帐户自动过期
  • 建议grc.盐的com(对PRNG来说不错)
  • 禁止使用存储的"Reason"字符串
  • 简单而有效的错误处理

缺点

  • 只允许用户"重置"丢失的密码(而不是让他们在重新激活时重新 Select 一个新密码)
  • brew 伪事件模型-用意良好,但没有切中要害
  • 用户表中有两个密码字段,样式不正确
  • 使用两个单独的用户表(一个用于"临时"用户-不明确和冗余)
  • 使用可能不安全的MD5哈希
  • 失败的登录try 仅由IP存储,不由用户名存储-不安全!
  • Autologin密钥没有在数据库中散列——实际上就像在明文中存储密码一样不安全!
  • 角色系统是一个完全混乱的系统:是带有硬编码角色名称的_admin函数,是_Role是一个完全混乱的系统,判断_uri _权限是一个混乱的系统,整个权限表是一个坏主意(一个uri可以更改并呈现不受保护的页面;权限应该始终准确地存储在敏感逻辑所在的位置).交易 destruct 者!
  • 包括本机(差)验证码
  • reCAPTCHA函数接口混乱

畸形光

专业人士

  • 功能齐全
  • 大部分都是文档记录得很好的代码
  • 分离用户和配置文件数据是一种不错的做法
  • 钩住CI的验证系统
  • 激活邮箱
  • 语言文件支持
  • 积极发展

缺点

  • 感觉有点臃肿(50多个文件)
  • 但它缺乏自动cookie登录(!)
  • 不支持同时使用用户名和邮箱登录
  • 似乎有UTF-8字符的问题
  • 需要大量自动加载(妨碍性能)
  • 管理不善的配置文件
  • 糟糕的视图-控制器分离,视图中有大量程序逻辑,输出硬编码到控制器中.交易 destruct 者!
  • 包含的视图中糟糕的HTML代码
  • 包括不合格的验证码
  • 到处都有回音
  • 强制特定的文件夹 struct
  • 强制使用特定的Ajax库(可以切换,但一开始就不应该存在)
  • 登录try 没有上限-非常不安全!交易 destruct 者!
  • 劫持表单验证
  • 使用可能不安全的MD5哈希

PC_USER

专业人士

  • 良好的功能集,占地面积小
  • 轻量级,无inflating (3个文件)
  • 优雅的自动cookie登录
  • 带有可选的测试实现(触感良好)

缺点

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

新动力

专业人士

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

缺点

  • 缺少很多基本功能.交易 destruct 者!
  • 一切都是硬编码的.交易 destruct 者!

Redux/Ion-Auth

根据the CodeIgniter wiki的说法,Redux已经停产,但Ion Auth fork表现强劲:https://github.com/benedmunds/CodeIgniter-Ion-Auth

ion Auth是一个功能齐全的库,不会过于繁重或不够先进.在大多数情况下,它的功能集将远远满足项目的需求.

专业人士

  • 重量轻,易于与CodeIgniter集成
  • 支持直接从库中发送邮箱
  • 记录良好的在线和良好的活跃开发人员/用户社区
  • 易于在项目中实现

缺点

  • 比其他一些更复杂的数据库模式
  • 文件在某些方面缺乏细节

简单安全

专业人士

  • 占用空间很小(4个文件)
  • 极简主义,绝对没有inflating
  • 使用phpass进行散列(非常好)

缺点

  • 仅登录、注销、创建和删除
  • 缺少很多基本功能.交易 destruct 者!
  • 与其说是图书馆,不如说是一个起点

Don't get me wrong:我不是有意不尊重上述任何一个图书馆;他们的开发人员所取得的成就以及他们各自取得的成就给我留下了深刻的印象,而我也很乐意重用他们的一些代码来构建自己的代码.我想说的是,有时在这些项目中,重点从基本的"需要有"(如硬安全实践)转移到更软的"好有",这就是我希望补救的.

因此:回归基本.

Authentication for CodeIgniter done right

下面是我从身份验证库中获得的功能的最低要求列表.它也恰好是我自己的图书馆功能列表的一个子集;)

  1. 通过可选的测试实施实现极小的占用空间
  2. 完整文档
  3. 无需自动加载.及时加载库以提高性能
  4. 语言文件支持; no hard-coded strings
  5. reCAPTCHA支持 but optional
  6. 推荐的真正随机盐生成(例如使用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攻击,强制执行最大失败登录try 次数BEST PRACTICES countermeasures次!
  20. 所有数据库访问都是通过准备(绑定)语句完成的!

注意:最后几点是not个超高安全性的过度使用,您的web应用程序不需要这些.If an authentication library doesn't meet these security standards 100%, DO NOT USE IT!

最近,不负责任的程序员将他们排除在软件之外的高调例子:#17是萨拉·佩林的美国在线邮箱在总统竞选期间如何被黑客入侵;#18和#19是最近布兰妮·斯皮尔斯(Britney Spears)、巴拉克·奥巴马(Barack Obama)、福克斯新闻(Fox News)和其他人的推特账户被黑客入侵的罪魁祸首;#20就是中国黑客如何在2008年的一次自动黑客攻击中从70.000多个韩国网站窃取了900多万条个人信息.

这些袭击不是脑部手术.如果你让后门敞开着,你不应该通过栓住前门来欺骗自己,让自己产生一种虚假的安全感.此外,如果你对编码非常认真,以至于 Select 了CodeIgniter这样的最佳实践框架,那么你至少应该做好最多basic项安全措施.


<;咆哮>;

基本上,它是这样的:I don't care如果一个auth库提供了一系列功能、高级角色管理、PHP4兼容性、漂亮的CAPTCHA字体、国家表格、完整的管理面板、铃铛和哨子——如果库不遵循最佳实践,真的让我的站点成为less secure.这是一个authentication包;它需要做一件正确的事情:身份验证.如果它不能做到这一点,实际上弊大于利.

</咆哮>;

/延斯·罗兰

Php相关问答推荐

如何在产品首页的产品标题下显示可变产品的自定义字段

文件大小在php下载读取文件中不可见

PHP 8.3类型类常数-关闭

Laravel中的通配符Undot数组

如何隐藏x轴图表上的值

PHP-转义字符串内的双反斜杠

WooCommerce在购买后多次重定向

使用随机生成器在MYSQL中创建唯一ID-定义一个数组来存储已知ID是否安全

对表示大小的值后缀进行自定义排序(XXS、XS、S、M、L、XL、XXL)

如果WooCommerce购物车在 checkout 时被清空,请重定向至store 页面

使用简码在 WooCommerce 我的帐户中显示一些用户数据

在 WooCommerce 更新结帐事件上动态更新自定义内容

如何使用 PHP 将带有图像的文本上传到 Linkedin?

如何在 Laravel 迁移中使用日期时间和天数?

在 WordPress 中将自定义帖子类型永久链接设置为 root

在 vue 自定义渲染器中访问变量

Windows 身份验证在 IIS 中验证什么?我可以在我的情况下禁用匿名身份验证吗?

在 Botiga 主题模板中添加复选框到政策行.Woocommerce

判断类别是否存在 Shopware 6

WooCommerce 按 ID 限制产品