18

私の Web サイト ( 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 に答える