安全的PHP登录系统?

Posted

技术标签:

【中文标题】安全的PHP登录系统?【英文标题】:secure PHP login system? 【发布时间】:2011-04-04 15:22:07 【问题描述】:

我一直在开发基于 php 的 CMS,用于我的机器人团队的网站。当然,还有很多其他平台,但其中有什么乐趣?

不过,说真的,我们确实获得了额外的积分,因为我们能够说我们所做的不仅仅是为 Drupal 或 WP 制作模板。这有点无关,但我希望有一天能够将 CMS 作为 FOSS 发布,但它肯定必须成熟并且更安全。但我离题了。

我已经到了开发这个系统的地步,我需要一个登录系统。这引起的挫败感超出了我的预期。在安全方面我可以很细致,这也不是什么例外。问题是,我知道如何处理数据库安全(不信任任何用户输入,将密码存储为带有随机盐的散列等),但我缺乏构建良好客户端-服务器系统的知识。这方面的几个问题:使用会话变量有多安全?在这方面如何正确实现会话变量?会话 cookie 是否应该在每次浏览时重新生成?使用 cookie 让用户在任何时间都保持登录时,您放弃了很多安全性,但是实现这种系统的最佳做法是什么?

一个很好的关于这个主题的教程也会有很大的帮助。

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

如果您想真正了解有关问题/解决方案的更多信息,而不是复制/粘贴其他人的代码,请查看这篇文章。

http://jaspan.com/improved_persistent_login_cookie_best_practice

持久性 cookie 管理的优秀资源,虽然没有提供代码,但它为您提供了创建更安全登录系统的良好基础/概念。

当然,最安全的 PHP 登录系统是没有持久登录功能的系统,因为用户凭据永远不会存储在服务器之外的任何地方。

【讨论】:

哇,我读了那篇文章,那个页面真的很有趣! +1 顺便说一句,您应该指出问题的实际解决方案已接近尾声,但最好先阅读信息以了解为什么它更安全。 你刚刚为我完成了它;)文章的第一部分介绍了在其他地方写的文章的基础知识,然后该人在本文后面对其进行了扩展。 提供的链接不是改进。阅读***.com/questions/549/… 了解更多信息。可悲的是,我的投票无法撤消【参考方案2】:

erm,解释所有问题将填满一本大书 - 没关系解决问题。

《白痴指南》的摘要执行摘要的读者文摘版本是:

使用 SSL 确保为会话 cookie 设置了安全和 httponly 标志(继续阅读会话劫持、MITM 攻击) 在登录时重新生成会话 ID(继续阅读会话固定)并注销 在身份验证和授权系统上实现抽象层 在这两个组件上分别实现一个抽象层 实施每页授权检查 如果您需要根据可见性/访问权限对数据进行分区,请提前确定

【讨论】:

【参考方案3】:

使用一些已经存在的库,例如http://freakauth.4webby.com/ 为什么要重新发明***!

【讨论】:

【参考方案4】:

嗯,在这里可以找到很多信息:

The definitive guide to form-based website authentication

点击该页面上的一些链接,将提高您对安全和登录问题/问题/问题/解决方案/...的了解。

【讨论】:

以上是关于安全的PHP登录系统?的主要内容,如果未能解决你的问题,请参考以下文章

我的“记住我”php 登录系统有多安全? [关闭]

WebSockets + PHP(棘轮)登录系统

PHP登录系统:记住我(持久cookie)[重复]

如何在 PHP 中安全地实现“记住我”按钮(持久登录)

Laravel笔记-自定义登录中新增登录5次失败锁账户功能(提高系统安全性)

Laravel笔记-自定义登录中新增登录5次失败锁账户功能(提高系统安全性)