我想使用
PHP和MysqL做一个简单的用户登录/注册系统.我不需要获取超出用户登录和登出所需的信息.我想确保系统安全.
我现在明白如何运作的方式是:
PHP脚本确保密码匹配,并且电子邮件是有效的地址,并且不在数据库中.
它将密码和随机盐一起散列,并将盐和结果散列的密码存储在数据库中. (是PHP的md5功能适合这个吗?我不太清楚这个部分如何工作.)
在数据库中存储电子邮件确认码,并将给定的电子邮件地址发送回包含该代码的网站以进行验证?
服务器在数据库中查找电子邮件并检索盐.然后用用户刚刚提供的密码对盐进行散列,看看它是否与数据库中的密码相匹配.
Is PHP’s md5 function suitable for this?
MD5不再被认为是安全的;考虑使用具有可变计算复杂度的bcrypt算法使用PHP的较新内置密码散列:PHP password_hash()
和password_verify()
.
How do I make the session persist after login. With a PHP session? A cookie? What should get stored in the cookie for remembering the user between visits?
理想情况下,您将使用PHP会话在单次访问期间维护状态,如果您想要“记住我的登录”选项,则可以使用包含足够信息的cookie来验证返回的用户并重新启动新会话.有关2004年关于登录Cookie的最佳做法的好文章:Persistent Login Cookie Best Practice.您可能也会对securely implementing “remember me” checkboxes的更现代化(2015)解决方案感兴趣.
除了这些,我认为任何你所描述的是好的.