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

Kev*_*vin 0 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/

Mat*_*eis 5

是的,你在寻找麻烦.有几个原因可以避免使用about.com方法:

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

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

一些PHP框架及其auth组件:

关于你的问题:

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

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