关于使用PHP的网站上的会员登录;怎么想?

时间:2010-11-03 08:53:03

标签: php sql mysql html security

我有一个分类广告网站,我即将创建该网站的会员登录部分。

我不需要任何先进的东西,只是安全!

这就是我在功能方面所需要的:

  • 网站能够识别会员,因此他们无需再次登录(记住我)
  • 更改密码和个人资料
  • 注销页面删除“记住我”,以便网站无法识别下次访问“已登录”
  • 用户在登录时能够导航(类似于“记住我”功能的第一个功能)

这就是我的想法:

创建一个MySql(我使用MySql btw)表,其中包含用户名,密码等。

然后在PHP中创建一个“SESSION”并设置一个cookie来记住用户。 这个cookie里面会有这样的值:

    md5(IP.username.secret_word)

我在每个页面的顶部进行比较,以便用户实际上是同一个用户。

接下来我需要一个注销页面,我想只是删除这个cookie并销毁会话。应该够了吗?

对于仍然登录的功能,我将使用与第一个记住我相同的方法,即检查cookie。

在这之前我还需要考虑一下吗?

Sql注入,黑客攻击,安全漏洞?

这不是一家银行或需要很多安全保障的东西,但我知道要破解它并不容易。

我不确定的一件事是会话cookie。它与普通的cookie有什么不同吗?当我使用“记住”功能时,我应该设置这个cookie吗?

另外,最后一件事:如果说100个用户同时登录,则意味着100个会话正在运行,这会降低网站的性能吗? (猜是的)。

纠正我,给我一些关于如何做得最好的建议和信息?

由于

4 个答案:

答案 0 :(得分:3)

我的建议是避免尝试重新发明这个特定的轮子。良好的安全性 hard 可以做,但有一些优秀的库可供您完成这项工作,例如Zend Auth

答案 1 :(得分:0)

你应该看一下实现openID - http://openid.net/

答案 2 :(得分:0)

  

在这之前我还需要考虑一下吗?

     

Sql注入,黑客攻击,安全漏洞?

是。你真的希望我们解释如何避免所有这些吗?

  

MD5(IP.username.secret_word)

请勿以任何方式将客户端IP地址用作标识符。虽然您建议的方法不会被多个通过同一代理连接的用户破坏,但它对负载均衡代理群集后面的用户不起作用。

我当然建议为会话使用单独的cookie并“记住我”功能(前者应该是会话cookie,后者是长期到期,两者都只有HTTP)。原因应该是显而易见的。不要发明自己的方法来命名会话cookie - 它们是随机的原因。对于首选项,至少实现SSL上的登录页面,并在记住我的cookie上设置安全标志。 (这意味着在没有经过身份验证的会话中,您将不得不重定向到HTTPS页面以检查RemeberMe cookie。)

  

这意味着100个会话正在运行,这会降低网站的性能吗? (猜是)

是的,当然会 - 但差异会很小,以至于在达到10,000多个会话之前你将无法衡量它。

答案 3 :(得分:-1)

你快到了。

在放入数据库之前,只需加密(哈希)密码即可。当用户忘记密码时,你不能给他们原来的密码,所以为他们生成一个随机密码,然后让他们改变密码。

您可以在登录页面上使用SSL或其他安全上网方法。

您可以将登录限制为5分钟,CAPTCHA或类似的3次尝试,以防止自动机器人。

在数据库中记录IP,时间和登录尝试以及其他事项以供将来调查。

使用Mysqli或其他一些OOP方法进行数据库连接,并查询可能的注入攻击。