Самый простой способ получить ссылку для проверки электронной почты PHP

У меня уже есть продвинутая система входа / регистрации пользователя на моем сайте (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>";
}

Это безопасно?

 Your Common Sense26 сент. 2010 г., 20:29
не безопасно, потому что, по крайней мере, SQL инъекций
 OMG Ponies25 сент. 2010 г., 20:27
SO не предназначен для создания вещей для вас; сообщество для помощи, когда у вас есть проблемы.
 Your Common Sense27 сент. 2010 г., 06:57
Вы можете прочитать, что к чему, введя «sql инъекция» в поле поиска этого сайта или Google.
 ryryan26 сент. 2010 г., 20:33
Извините, что это? И как это влияет на это?

Ответы на вопрос(3)

кодер, компьютер? Что вы оптимизируете - количество нажатий клавиш, размер кода, пользовательский опыт?

Легче всего писать код небезопасно. Вам следует проверить правильность адреса электронной почты, прежде чем отправлять на него письмо.

 ryryan26 сент. 2010 г., 19:59
Самый простой для меня кодер. Я хочу, чтобы было легко и очень безопасно остановить хакеров.
 Grigori Kochanov20 нояб. 2010 г., 19:43
Тогда вы должны использовать существующую проверенную и безопасную библиотеку. Как и PHPMailer. Не изобретайте велосипеды.

нную таблицу пользователей, отправьте эту хеш-строку на адрес электронной почты пользователя, используя этот код

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

Решение Вопроса

телей.

Попросите у них адрес электронной почты и отправьте письмо со ссылкой, которая содержит этот адрес, запечатанный с помощью хэша. Получив эту ссылку, вы можете начать процесс регистрации.

Что-то вроде этого

$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.
}
 Sarfraz25 сент. 2010 г., 20:41
+1 Именно так, особенно первое предложение :)
 coolkid26 сент. 2010 г., 19:12
это разумное решение, вам не нужно хранить проверочный код в вашей базе данных.
 ryryan26 сент. 2010 г., 20:01
Это код, который я использую в файле verify.php (тот, который пользователь щелкает секретом в конце как GET) вверху.
 ryryan26 сент. 2010 г., 19:58
Я взял вашу информацию о borad, но заставил php сгенерировать случайный код, который затем вставляется в базу данных в той же строке, что и user +, допустимое поле установлено в 0 (чтобы не допустить их). Когда они нажимают на ссылку, он проверяет, где установлен код в базе данных, и проверяет, что он еще не действителен, а затем устанавливает допустимое значение 1. Это позволяет им войти. Хотя я не уверен, что он безопасен.
 Drazen Bjelovuk11 авг. 2017 г., 04:16
Хотя, в некотором роде, рискует единственной точкой отказа, не так ли? Любой, кто овладеет этим секретом, может зарегистрироваться под любым электронным письмом.

Ваш ответ на вопрос