18

我的网站 ( colemansystems.psm2.co.uk ) 上已经有一个高级用户登录/注册系统。但是,我想向新用户发送一封电子邮件,以验证他们的电子邮件地址。如果他们没有点击链接,他们将无法访问他们的帐户。我对PHP和MySQL有半经验,所以请深入解释。

编辑:我用于verify.php文件的代码(用户使用 GET(例如,verify.php?d=51773199320)单击的链接)

$secret = $_GET['d'];
$result = mysql_query("SELECT valid FROM users WHERE secret=$secret");
while ($row = mysql_fetch_array($result))
{
    $valid = $row['valid'];
}
if ($valid == "") {
    echo"There seems to be a problem with the verification code.<br><br><br><br><br>";
}
elseif ($valid == "1")
{
    echo"Your account is already verified.<br><br><br><br><br>";
}
else
{
    mysql_query("UPDATE users SET valid = '1' WHERE secret=$secret");  
    echo "Thank you, your account is now verified and you are free to use the exclusive features!<br><br><br><br><br><br>";
}

这安全吗?

4

3 回答 3

31

最简单的方法是根本不注册未经验证的用户。

向他们询问一个电子邮件地址,然后发送电子邮件,其中包含一个链接,该链接包含用哈希密封的该地址。收到此链接后,您可以开始注册过程。

像这样的东西

$secret = "35onoi2=-7#%g03kl";
$email = urlencode($_POST['email']);
$hash = MD5($_POST['email'].$secret);
$link = "http://example.com/register.php?email=$email&hash=$hash";

并在register.php注册表中添加 2 个隐藏字段 - 电子邮件和哈希,存储它们从 GET 接收到的值。

最后,处理注册和检查,

if (md5($_POST['email'].$secret) == $_POST['hash']) {
    //Continue registration.
}
于 2010-09-25T18:31:53.437 回答
2

对谁最容易——用户、编码员、计算机?你在优化什么——按键的数量、代码的大小、用户体验?

最容易编码的可能是不安全的。在向其发送信件之前,您应该检查电子邮件地址的正确性。

于 2010-09-25T18:56:09.480 回答
0

注册后创建一个散列字符串并将其保存到临时用户表使用此代码将该散列字符串发送到用户电子邮件地址

if(isset($_POST['register']))
{
$email_id=$_POST['email'];
$pass=$_POST['password'];
$code=substr(md5(mt_rand()),0,15);
mysql_connect('localhost','root','');
mysql_select_db('sample');

$insert=mysql_query("insert into verify values('','$email','$pass','$code')");
$db_id=mysql_insert_id();

$message = "Your Activation Code is ".$code."";
$to=$email;
$subject="Activation Code For Talkerscode.com";
$from = 'your email';
$body='Your Activation Code is '.$code.' Please Click On This link <a href="verification.php">Verify.php?id='.$db_id.'&code='.$code.'</a>to activate your account.';
$headers = "From:".$from;
mail($to,$subject,$body,$headers);

echo "An Activation Code Is Sent To You Check You Emails";
} 

然后创建一个验证页面,然后

if(isset($_GET['id']) && isset($_GET['code']))
{
$id=$_GET['id'];
$code=$_GET['id'];
mysql_connect('localhost','root','');
mysql_select_db('sample');
$select=mysql_query("select email,password from verify where id='$id' and code='$code'");
if(mysql_num_rows($select)==1)
{
    while($row=mysql_fetch_array($select))
    {
        $email=$row['email'];
        $password=$row['password'];
    }
    $insert_user=mysql_query("insert into verified_user values('','$email','$password')");
    $delete=mysql_query("delete from verify where id='$id' and code='$code'");
 }
}

如果您有任何问题,这里有一个完整的教程http://talkerscode.com/webtricks/account-verification-system-through-email-using-php.php

于 2016-03-16T07:53:22.603 回答