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

时间:2011-12-29 07:25:14

标签: php mysql authentication

我正在尝试为开发中的网站考虑我的用户身份验证系统,并已阅读堆栈溢出和其他地方的许多帖子以了解我的想法。我找到了几个选项,我想知道这个看起来是不是一个不错的起点:

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/

1 个答案:

答案 0 :(得分:5)

是的,你在寻找麻烦。我强烈要求避免使用about.com方法

  • 用户名和密码存储在客户端。你永远不会想那样做。第一:如果恶意攻击者获得对cookie的访问权限,他可以使用id和密码哈希来接管该帐户。第二:在野外有大量的数据集叫rainbow tables,允许恶意攻击者找出给定哈希中的哪个字符串(=密码)。这意味着如果您没有长/复杂的密码,有人可能会使用彩虹表来获取明文密码,并在您注册的此网站和其他网站上进行尝试。
  • 变量$ username未经检查且未经过滤使用。您好SQL Injection
  • 使用简单的md5()函数加密密码。 MD5会让您面临hash collisions的风险。现在你应该使用更好的哈希函数,比如SHA-1并使用salt

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

一些PHP框架及其auth组件:

关于你的问题:

  

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

是。您必须区分身份验证授权。前者可以帮助您识别用户是谁,后者可以帮助您找出允许用户执行的操作。阅读此简短introduction以了解该主题。