当前位置: 首页 > 面试题库 >

如何为CodeIgniter选择身份验证库?

吕向荣
2023-03-14
问题内容

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


问题答案:

优点

  • 全功能
  • 考虑功能集的精益足迹(20个文件)
  • 很好的文档
  • 简单优雅的数据库设计(仅4个DB表)
  • 大多数功能是可选的,易于配置
  • 语言文件支持
  • 支持reCAPTCHA
  • 与CI的验证系统挂钩
  • 激活电子邮件
  • 使用电子邮件和/或用户名登录(可配置)
  • 未激活的帐户会自动过期
  • 简单而有效的错误处理
  • 使用phpass进行哈希处理(并在数据库中哈希自动登录代码)
  • 不使用安全性问题
  • 用户和个人资料的分离非常好
  • 围绕失败的登录尝试的非常合理的安全模型(针对僵尸程序和DoS攻击的良好保护)

(次要)缺点

  • 丢失的密码未在数据库中散列
  • 包含一个本机(较差)的验证码,对那些不想依赖(由Google拥有)reCAPTCHA服务的用户来说非常好,但是它确实不够安全
  • 联机文档非常稀疏(此处的次要问题,因为代码的文档很好且直观)

在此处下载Tank Auth

原始答案:

我也已经实施了自己的工具(目前在工作了几周后完成了大约80%的工作)。我首先尝试了所有其他方法;FreakAuth Light,DXAuth,Redux,SimpleLogin,SimpleLoginSecure,pc_user,FreshPowered等。IMO,它们都没有达到标准的水平,或者它们缺乏基本功能,天生不安全,或者太膨胀而无法满足我的口味。

实际上,当我测试它们时(在新年之后),我对CodeIgniter的所有身份验证库进行了详细的汇总。FWIW,我将与您分享:

DX认证

优点

  • 功能齐全
  • 占用空间适中(超过25个文件),但感觉非常苗条
  • 出色的文档资料,尽管其中一些用英语略有损坏
  • 语言文件支持
  • 支持reCAPTCHA
  • 与CI的验证系统挂钩
  • 激活电子邮件
  • 未激活的帐户会自动过期
  • 建议使用grc.com盐(对于PRNG来说还不错)
  • 禁止使用存储的“原因”字符串
  • 简单而有效的错误处理

缺点

  • 仅允许用户“重置”丢失的密码(而不是让他们在重新激活后选择一个新密码)
  • 自制的伪事件模型-意图良好,但未实现目标
  • 用户表中的两个密码字段,样式错误
  • 使用两个单独的用户表(一个用于“临时”用户-模棱两可和冗余)
  • 使用可能不安全的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 /离子验证

Ion Auth是一个功能强大的库,不会过于繁重或不足。在大多数情况下,其功能集将足以满足项目的需求。

优点

  • 轻巧且易于与CodeIgniter集成
  • 支持直接从图书馆发送电子邮件
  • 在线记录良好,活跃的开发人员/用户社区
  • 易于实施到项目中

缺点

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

简单登录安全

优点

  • 微小的足迹(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. 通过针对字典和DoS攻击的 BEST PRACTICES对策 ,提高了最大登录尝试失败次数!
  20. 所有数据库访问都通过准备(绑定)语句完成!

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

不负责任的编码员最近的备受关注的例子使他们没有使用软件:#17是总统竞选期间Sarah
Palin的AOL电子邮件被黑客入侵的方式;当布兰妮·斯皮尔斯,巴拉克·奥巴马,福克斯新闻等人的Twitter帐户遭到黑客入侵时,罪魁祸首是#18和#19的罪魁祸首。仅在排名第20的情况下,2008年,中国黑客就通过一次自动黑客攻击从7万多个韩国网站中窃取了900万个人信息。

这些攻击不是脑外科手术。如果您将后门敞开,则不要通过螺栓固定前部来使自己陷入虚假的安全感。而且,如果您对编码足够认真,可以选择最佳实践框架(如CodeIgniter),则应归功于自己,至少可以正确地完成
最基本的 安全措施。

基本上就是这样: 我不在乎
auth库是否提供了很多功能,高级角色管理,PHP4兼容性,漂亮的CAPTCHA字体,国家/地区表,完整的管理面板,铃声和口哨声-
如果该库确实使不遵循最佳做法 会使 我的网站的 安全性 降低。这是一个 身份验证 程序包;它需要做一件事:身份验证。如果做不到
这一点 ,那实际上是弊大于利。



 类似资料:
  • 我的问题是,我们有一组运行SiteMinder但非常糟糕的遗留代码。它允许IIS匿名并避免使用Active Directory。 我们正在重建此应用程序,并希望将SiteMinder与IIS和集成。净额4.0。我知道我可以构建自己的安全框架,无需用户名和密码即可完成所有工作(因为我们不希望SiteMinder提供),但我想知道是否有办法使用内置的Windows身份验证(窗体或Windows)与Si

  • 问题内容: 因此,我正在使用RESTeasy和Google App Engine开发REST Web服务。我的问题与GAE无关,但我提到它只是为了以防万一。碰巧的是,我自然需要保护自己的资源和我自己的用户(而不是Google的用户)。 REST Web服务的安全似乎是一个很有争议的主题,或者至少是一个非常“自由的”主题。REST对此没有施加任何标准。根据我在网络和文献上的研究,至少有3种方法适合我

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 问题内容: 问题: 如何向OkHTTP添加授权代理。 我知道OkHTTP的生成器确实支持代理,尽管我很难设置一个代理。 我有IP /端口/用户名/密码。 尽管我不知道如何将其转换为client.SetProxy()中可以使用的那些。 这似乎过于复杂,我似乎无法弄清楚。任何帮助,将不胜感激。 问题答案: 试试这个:

  • 我有一个用Java Spring写的应用程序运行在Wildfly 10上。我已经使用我的RootCA和客户端证书设置了基本的x509身份验证。 基于客户端的证书CN,我可以处理多个用户角色。 我想实现的是如何动态选择应该使用的客户端证书。访问https时会显示一个对话框(这是一个系统对话框——来自火狐)。但是这个对话框只显示一次,即使注销后,对话框也不会再次显示,最后一个客户端证书会自动选择。 即