PHP身份验证-成员区与公共页面上的额外内容


PHP authentication - members area versus extra content on public page

我正在尝试为一个正在开发的站点想出我的用户身份验证系统,并且已经阅读了许多关于堆栈溢出和其他地方的帖子来了解这个问题。我发现了几个选项,我想知道这个是否看起来像一个不错的起点:

http://php.about.com/od/finishedphp1/ss/php_login_code_6.htm

它似乎加密了密码,避免了一些明显的缺陷。

也,也许是一个愚蠢的问题,但我想使用认证有两个原因:1. 在其他公共页面上为用户提供一些额外的功能。(想想页面顶部的"Hello [username]")。
2. 提供用户访问私有页面。

这两种类型的应用程序(登录=在公共页面上添加的东西与登录=访问私有页面)依赖于相同的身份验证,对吗?

换句话说,无论我想做一个还是另一个,或者两者都不应该影响我对身份验证的看法,对吗?

请让我知道,如果我是通过使用about.com教程的麻烦....

提前感谢。

后续编辑:好吧,about。com教程有一些漏洞。我在下面找到了一个更完整的系统,它似乎使用了SHA1加密。这也有一个新用户的电子邮件验证和其他一些不错的功能。乍一看,这似乎是一条可靠的路线吗?

http://www.unlimitedtree.com/topic/1503-tutadvanced-login-member-system-php-tutorial/

是的,你是在自找麻烦。以下是我避免使用about.com方法的几个原因:

  • 用户名和密码存储在客户端。你不会想这么做的。首先,如果恶意攻击者访问了cookie,他可以使用id和密码哈希来接管该帐户。第二:有大量的数据集被称为彩虹表,它允许恶意攻击者找出给定哈希的结果是哪个字符串(=密码)。这意味着,如果你没有一个长/复杂的密码,有人可能会使用彩虹表得到你的明文密码,并尝试它在这个和其他网站你注册到。
  • 变量$username是不检查和不过滤的。Hello SQL Injection.
  • 使用简单的md5()函数加密密码。MD5使您面临哈希冲突的风险。现在你应该使用更好的散列函数,比如SHA-1,并使用salt。

安全是一个复杂的话题。我建议您使用已建立的框架提供的经过良好测试的身份验证和授权解决方案。也考虑一下OpenID。

几个PHP框架和它们的认证组件:

  • Apache Zeta Components(以前的eZ Components): Authentication
  • CakePHP: Authentication and Authorization
  • FLOW3: Security (Authentication and Authorization)
  • Symfony: Security (Authentication and Authorization)
  • Zend框架:Zend_Auth和Zend_Acl

关于你的问题:

换句话说,无论我想做一个还是另一个,或者两者都不应该影响我对身份验证的看法,对吗?

是的。您必须区分AuthenticationAuthorization。前者可以帮助您确定用户是谁,后者可以帮助您找出允许用户执行的操作。阅读这篇简短的介绍来了解这个话题。