关于php:我应该如何为CodeIgniter选择一个身份验证库?

How should I choose an authentication library for CodeIgniter?

我看到有一些。哪些是维护和易于使用的?他们的利弊是什么?


更新(2010年5月14日):

事实证明,俄罗斯开发商Ilya Konyukhov在阅读本文后接受了挑战,并根据下面的建议和要求,基于DX AUTH为CI创建了一个新的AUTH库。

结果得到的坦克认证看起来像是OP问题的答案。我将在这里冒险,把Tank-Auth称为当今最好的代码点火器认证库。这是一个非常可靠的库,它具有您所需要的所有功能,并且没有您不需要的膨胀:

坦克认证

Pros

  • Full featured
  • Lean footprint (20 files) considering the feature set
  • Very good documentation
  • Simple and elegant database design (just 4 DB tables)
  • Most features are optional and easily configured
  • Language file support
  • reCAPTCHA supported
  • Hooks into CI's validation system
  • Activation emails
  • Login with email, username or both (configurable)
  • Unactivated accounts auto-expire
  • Simple yet effective error handling
  • Uses phpass for hashing (and also hashes autologin codes in the DB)
  • Does not use security questions
  • Separation of user and profile data is very nice
  • Very reasonable security model around failed login attempts (good protection against bots and DoS attacks)

(Minor) Cons

  • Lost password codes are not hashed in DB
  • Includes a native (poor) CAPTCHA, which is nice for those who don't want to depend on the (Google-owned) reCAPTCHA service, but it really isn't secure enough
  • Very sparse online documentation (minor issue here, since the code is nicely documented and intuitive)

在此处下载tank auth

原始答案:

我也实现了我自己的(目前大约80%在工作几周后完成)。我首先尝试了所有其他的方法:freakauth light、dx auth、redux、simplelogin、simpleloginsecure、pc_user、fresh powered等等。在我看来,他们都没有达到标准,要么缺乏基本的特征,内在的不安全感,要么过于膨胀,不合我的口味。

实际上,我在测试代码点火器的所有身份验证库时(就在新年之后),对它们进行了详细的汇总。我会和你分享:

DX认证

Pros

  • Very full featured
  • Medium footprint (25+ files), but manages to feel quite slim
  • Excellent documentation, although some is in slightly broken English
  • Language file support
  • reCAPTCHA supported
  • Hooks into CI's validation system
  • Activation emails
  • Unactivated accounts auto-expire
  • Suggests grc.com for salts (not bad for a PRNG)
  • Banning with stored 'reason' strings
  • Simple yet effective error handling

Cons

  • Only lets users 'reset' a lost password (rather than letting them pick a new one upon reactivation)
  • Homebrew pseudo-event model - good intention, but misses the mark
  • Two password fields in the user table, bad style
  • Uses two separate user tables (one for 'temp' users - ambiguous and redundant)
  • Uses potentially unsafe md5 hashing
  • Failed login attempts only stored by IP, not by username - unsafe!
  • Autologin key not hashed in the database - practically as unsafe as storing passwords in cleartext!
  • Role system is a complete mess: is_admin function with hard-coded role names, is_role a complete mess, check_uri_permissions is a mess, the whole permissions table is a bad idea (a URI can change and render pages unprotected; permissions should always be stored exactly where the sensitive logic is). Dealbreaker!
  • Includes a native (poor) CAPTCHA
  • reCAPTCHA function interface is messy

号弗雷卡思灯

Pros

  • Very full featured
  • Mostly quite well documented code
  • Separation of user and profile data is a nice touch
  • Hooks into CI's validation system
  • Activation emails
  • Language file support
  • Actively developed

Cons

  • Feels a bit bloated (50+ files)
  • And yet it lacks automatic cookie login (!)
  • Doesn't support logins with both username and email
  • Seems to have issues with UTF-8 characters
  • Requires a lot of autoloading (impeding performance)
  • Badly micromanaged config file
  • Terrible View-Controller separation, with lots of program logic in views and output hard-coded into controllers. Dealbreaker!
  • Poor HTML code in the included views
  • Includes substandard CAPTCHA
  • Commented debug echoes everywhere
  • Forces a specific folder structure
  • Forces a specific Ajax library (can be switched, but shouldn't be there in the first place)
  • No max limit on login attempts - VERY unsafe! Dealbreaker!
  • Hijacks form validation
  • Uses potentially unsafe md5 hashing

号PC用户

Pros

  • Good feature set for its tiny footprint
  • Lightweight, no bloat (3 files)
  • Elegant automatic cookie login
  • Comes with optional test implementation (nice touch)

Cons

  • Uses the old CI database syntax (less safe)
  • Doesn't hook into CI's validation system
  • Kinda unintuitive status (role) system (indexes upside down - impractical)
  • Uses potentially unsafe sha1 hashing

号新鲜动力

Pros

  • Small footprint (6 files)

Cons

  • Lacks a lot of essential features. Dealbreaker!
  • Everything is hard-coded. Dealbreaker!

号还原身份验证

根据codeigner wiki的说法,Redux已经停止使用,但Ion认证分支正在发展壮大:https://github.com/benedmunds/codeigner-ion-auth

离子认证是一个功能完善的图书馆,没有它是过于沉重或不先进。在大多数情况下,它的特性集将不仅仅满足项目的需求。

Pros

  • Lightweight and simple to integrate with CodeIgniter
  • Supports sending emails directly from the library
  • Well documented online and good active dev/user community
  • Simple to implement into a project

Cons

  • More complex DB schema than some others
  • Documentation lacks detail in some areas

号简单逻辑安全

Pros

  • Tiny footprint (4 files)
  • Minimalistic, absolutely no bloat
  • Uses phpass for hashing (excellent)

Cons

  • Only login, logout, create and delete
  • Lacks a lot of essential features. Dealbreaker!
  • More of a starting point than a library

别误会我:我不是有意不尊重上面提到的任何一个库;我对他们的开发人员所取得的成就和他们每个人所取得的成就印象深刻,我也不超过重用他们的一些代码来构建自己的库。我要说的是,有时在这些项目中,重点从基本的"需要拥有"(如硬安全实践)转移到更软的"好拥有",这就是我希望补救的。

因此:回到基础。

对代码点火器的认证完成正确

这是我从身份验证库中所需的最小功能列表。它也恰好是我自己的库功能列表的一个子集;)

  • Tiny footprint with optional test implementation
  • Full documentation
  • No autoloading required. Just-in-time loading of libraries for performance
  • Language file support; no hard-coded strings
  • reCAPTCHA supported but optional
  • Recommended TRUE random salt generation (e.g. using random.org or random.irb.hr)
  • Optional add-ons to support 3rd party login (OpenID, Facebook Connect, Google Account, etc.)
  • Login using either username or email
  • Separation of user and profile data
  • Emails for activation and lost passwords
  • Automatic cookie login feature
  • Configurable phpass for hashing (properly salted of course!)
  • Hashing of passwords
  • Hashing of autologin codes
  • Hashing of lost password codes
  • Hooks into CI's validation system
  • NO security questions!
  • Enforced strong password policy server-side, with optional client-side (Javascript) validator
  • Enforced maximum number of failed login attempts with BEST PRACTICES countermeasures against both dictionary and DoS attacks!
  • All database access done through prepared (bound) statements!
  • 注意:最后几点并不是您的Web应用程序不需要的超高安全性过度杀伤力。如果认证库不满足这些安全标准100%,则不要使用它!

    最近备受关注的不负责任的编码人员将他们排除在他们的软件之外的例子有:17是莎拉·佩林的美国在线电子邮件在总统竞选期间被黑客攻击的原因;18和19的恶意组合是最近布兰妮·斯皮尔斯、巴拉克·奥巴马、福克斯新闻和其他人的推特账户被黑客攻击的罪魁祸首;20单独是中国人的原因。2008年,在一次自动化黑客攻击中,SE黑客成功地从7万多个韩国网站上窃取了900万条个人信息。

    这些攻击不是脑部手术。如果你把后门敞开着,你就不应该把前面的门闩闩上,让自己陷入一种虚假的安全感。此外,如果您对编码的重视程度足以选择一个最佳实践框架,比如CodeIgniter,那么您至少应该让自己正确地完成最基本的安全措施。

    <咆哮>

    基本上,我不在乎授权库是否提供了一系列功能、高级角色管理、php4兼容性、漂亮的captcha字体、国家表、完整的管理面板、铃声和口哨——如果库不遵循最佳实践,实际上会降低我的站点的安全性。它是一个认证包;它需要做一件正确的事情:认证。如果它不能做到这一点,那实际上是弊大于利。

    【咆哮】

    /詹斯罗兰


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

    • Ion_Auth(重写Redux)
    • 雷杜
    • 后端专业版

    tank_auth(在jens的列表中为1)没有用户角色。我意识到它不完全是认证的一部分,但是自从

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

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


    离子认证!看起来很有前途,占地面积很小!我喜欢。。

    http://github.com/benedmunds/codeigner-ion-auth


    我是ReduxAuth的开发人员,您提到的一些问题已经在版本2测试版中解决了。你也可以从官方网站下载这个应用程序的样本。

    • Requires autoloading (impeding performance)
    • Uses the inherently unsafe concept of 'security questions'. Dealbreaker!

    安全问题现在不再使用,一个更简单的忘记密码系统已经就位。

    • Return types are a bit of a hodgepodge of true, false, error and success codes

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

    • Doesn't hook into CI's validation system

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

    • Doesn't allow a user to resend a 'lost password' code

    正在进行的工作

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

    这仍然是一项正在进行的工作,所以如果有更多的建议,请让他们来。

    -爆米花

    附:谢谢你推荐Redux。


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

    其中一个最好的方法是,新注册的成员在给定的时间内在网站上获得临时访问权,直到他们从电子邮件中单击链接并激活。


    也许你会发现Redux适合你的需求。它没有过度杀戮,而且只包含了我们大多数人所需要的简单功能。开发人员和贡献者对代码的贡献非常严格。

    这是官方网页


    离子认证击败坦克认证主要有两个原因,用户角色和文档,这两个是从坦克认证丢失。


    我使用一个自定义版本的dx auth。我发现它使用简单,修改非常容易,它有一个与代码点火器非常相似的用户指南(有很多例子)。


    还可以看看BackendPro

    最终你可能会写一些定制的东西,但是从dx-auth、freak-auth、backendpro等中借用概念没有什么错。

    我对打包应用程序的经验是,它们是特定于某些结构的,我在将它们集成到自己的应用程序中时遇到了问题,不需要进行黑客攻击,那么如果预打包有更新,我必须将它们迁移到中。

    我在我的CI代码中也使用了smarty和adodb,所以不管我最后做什么,我都会做一些重要的代码更改。


    我正在尝试离子认证并感谢它,顺便说一句…

    简单逻辑安全使身份验证变得简单和安全。


    tank auth看起来不错,但是文档只是一个关于如何安装的单页解释,加上每个php文件的快速运行。至少这是我通过谷歌搜索找到的。也许当人们说tank auth有很好的文档记录时,上面的意思是代码注释得很好。这是件好事,但与文档不同。如果有一些关于如何将tank auth的特性与现有代码集成的文档,那就太好了。