English 中文(简体)
使用php和mysql的登录/注册系统[关闭]
原标题:Login/Registration System with php and mysql [closed]
Closed. This question needs to be more focused. It is not currently accepting answers.

想改进这个问题吗 通过编辑此文章更新问题,使其仅关注一个问题。

Closed last month.

我想使用PHP和mysql制作一个简单的用户登录/注册系统。除了用户登录和注销所需的信息之外,我不需要获取任何信息。我想确保系统是安全的。

我目前理解它应该如何工作的方式是:

注册

用户输入他们的电子邮件地址、密码和确认密码。

PHP脚本确保密码匹配,并且电子邮件是一个有效的地址,并且不在数据库中。

它将密码与随机salt一起散列,并将salt和散列后的密码存储在数据库中。(php的md5函数适合这个吗?我不太确定这个部分是如何工作的。)

在数据库中存储电子邮件确认代码,并向给定的电子邮件地址发送回包含该代码的网站的链接以进行验证?

登录

用户输入他们的电子邮件地址和密码。

服务器在数据库中查找电子邮件并检索salt。然后将salt与用户刚才提供的密码进行散列,看看它是否与数据库中的密码匹配。

如何在登录后保持会话。用PHP会话?饼干?应该在cookie中存储哪些内容,以便在访问之间记住用户?

我基本上只是想验证一下我所描述的过程是一种准确、安全的用户注册/登录方式。此外,还有哪些好的教程可以提供更多信息。

最佳回答

php的md5函数适用于此吗?

MD5不再被认为是安全的;考虑使用PHP较新的内置密码哈希和bcrypt算法,该算法具有可变的计算复杂度:PHPpassword_hash()password_verify()

如何在登录后保持会话。使用php会话?饼干?应该在cookie中存储哪些内容,以便在访问之间记住用户?

理想情况下,您将在一次访问期间使用PHP会话来维护状态,如果您希望有一个“记住我的登录”选项,您将使用一个cookie,其中包含足够的信息来验证返回的用户并重新启动新会话。这里有一篇2004年关于登录cookie最佳实践的好文章:持久登录Cookie最佳实践。您可能还对安全地实现“记住我”复选框

除此之外,我认为你所描述的一切都很好。

问题回答

关于一些遗漏的注意事项:

PHP会话通常已经使用cookie:会话ID存储为一个。

会话可能被劫持;你还应该采取措施减少这种可能性(从阅读“PHP:用存储为cookie的令牌阻止会话劫持?”和“防止会话劫持的最佳方法是什么?”)。

与劫持有关的是修复,其中攻击者选择会话ID。有两种方法可以解决此问题:设置session.use_only_cookies(PHP中的默认值>;=5.3),并在用户使用session_regenerate_id

另请参阅问题“PHP会话安全”和文章“PHP安全指南:会话”。

如果你想要现成的解决方案

php5中的用户蛋糕

非常安全。。并且稳定。

由于登录系统是网站不可或缺的一部分,如果它被黑客入侵,你就完蛋了。除非你这样做是出于教育目的,否则我建议你找一个由在该领域有经验的人创建的系统。你晚上会睡得很香的。

一个可靠的预构建登录系统的示例是tank-auth,它是为Code Igniter框架编写的。如果你决定自己编写,你可能想看看这个家伙是如何设计系统的,以获得重要内容的想法。

同样只是经验的一点,从头开始编写登录系统比学习代码点火器框架和安装tank auth需要更多的时间。

这里有一个建议:考虑使用一个现成的框架,它本质上提供了这样的功能。他们受到了考验。看看Kohana。它有一个负责身份验证的Auth模块。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签