function do_register() { global $hasError, $data, $dbc, $globals, $mostrar_captcha; validar_captcha($hasError); // PENDIENTE: VALIDAR EMAIL ... y en register.php $user_email = $data['Email']; // Valido si existe ya el email $parts = explode('@', $user_email); $subparts = explode('+', $parts[0]); // se permiten direcciones del tipo user+extension@gmail.com, que debemos controlar para no permitir abusos $rs_check = mysql_query("select `id` from users where (user_email = '{$subparts['0']}@{$parts['1']}' or user_email LIKE '{$subparts['0']}+%@{$parts['1']}') AND banned=0 limit 1") or die(mysql_error()); $num = mysql_num_rows($rs_check); if ($num <= 0) { $hasError[] = "El correo electrónico introducido no está registrado o la cuenta está anulada."; return; } if (empty($hasError)) { $new_pwd = GenKey(); $pwd_reset = PwdHash($new_pwd); list($id) = mysql_fetch_row($rs_check); $rs_activ = mysql_query("update users set pwd='{$pwd_reset}' WHERE \n id={$id}") or die(mysql_error()); enviar_correo_recover($user_email, $new_pwd); $_SESSION['hasSuccessRecover'] = "Te hemos enviado un mensaje a {$user_email} con tu nueva contraseña."; $_SESSION['hasInfoRecover'] = "Si no recibes el correo en unos instantes revisa también en la carpeta de spam."; header("Location: login.php"); exit; } }
function do_register() { global $hasError, $data, $dbc, $globals, $mostrar_captcha; borrar_usuarios_no_activados_antiguos(); if ($mostrar_captcha) { validar_captcha($hasError); } $user_ip = $globals['ip']; // hash sha1 de la clave $sha1pass = PwdHash($data['Password']); // Generamos el código de activación $activ_code = rand(1000, 9999); $usr_email = $data['Email']; $user_name = $data['UserName']; // Valido si existe ya el usuario $rs_duplicate = mysql_query("select count(*) as total from users where user_name='{$user_name}'") or die(mysql_error()); list($total) = mysql_fetch_row($rs_duplicate); if ($total > 0) { $hasError[] = "El usuario ya está dado de alta."; } // Valido si existe ya el email $parts = explode('@', $usr_email); $subparts = explode('+', $parts[0]); // se permiten direcciones del tipo user+extension@gmail.com, que debemos controlar para no permitir abusos $rs_duplicate = mysql_query("select count(*) as total from users where user_email = '{$subparts['0']}@{$parts['1']}' or user_email LIKE '{$subparts['0']}+%@{$parts['1']}'") or die(mysql_error()); list($total) = mysql_fetch_row($rs_duplicate); if ($total > 0) { $hasError[] = "El email ya está dado de alta."; } if (empty($hasError)) { // Insertamos el Nuevo Usuario $sql_insert = "INSERT into `users`\n (`user_email`,`pwd`,`date`,`users_ip`,`activation_code`,`user_name`)\n VALUES\n ('{$usr_email}','{$sha1pass}',now(),'{$user_ip}','{$activ_code}','{$user_name}')\n "; mysql_query($sql_insert, $dbc['link']) or die("Insertion Failed:" . mysql_error()); $user_id = mysql_insert_id($dbc['link']); $md5_id = md5($user_id); mysql_query("update users set md5_id='{$md5_id}' where id='{$user_id}'"); log_insert("register_ok", ip2long($globals['ip'])); $_SESSION['email_registro'] = $usr_email; $_SESSION['email_registro_contador'] = 3; $_SESSION['hasSuccess'] = null; enviar_correo_registro($usr_email, $md5_id, $activ_code); header("Location: thankyou.php"); exit; } }
function do_register() { global $hasError, $data, $dbc, $globals, $mostrar_captcha; if ($mostrar_captcha) { if (!validar_captcha($hasError)) { return; } // si no introduce correctamente el código de seguridad no debemos mirar nada más... porque podría sacar por fuerza bruta usuario/clave. } $user_email = $data['UserNameEmail']; $pass = $data['Password']; if (strpos($user_email, '@') === false) { $user_cond = "user_name='{$user_email}'"; } else { $parts = explode('@', $user_email); $subparts = explode('+', $parts[0]); // se permiten direcciones del tipo user+extension@gmail.com, que debemos controlar para no permitir abusos $user_cond = "(user_email='{$subparts['0']}@{$parts['1']}' or user_email LIKE '{$subparts['0']}+%@{$parts['1']}')"; } $result = mysql_query("SELECT `id`,`pwd`,`user_name`,`approved`,`banned`,`user_level` FROM users WHERE {$user_cond} limit 1") or die(mysql_error()); $num = mysql_num_rows($result); if ($num > 0) { list($id, $pwd, $user_name, $approved, $banned, $user_level) = mysql_fetch_row($result); if ($banned) { $hasError[] = "Cuenta anulada."; return; } if (!$approved) { $hasError[] = "Cuenta registrada pero aún no activada. Revisa tu buzón de correo y sigue el enlace que allí aparece."; return; } if ($pwd === PwdHash($pass, substr($pwd, 0, 9))) { log_insert("login_ok", $id, $id); session_regenerate_id(true); //prevent against session fixation attacks. // this sets variables in the session $_SESSION['user_id'] = $id; $_SESSION['user_name'] = $user_name; $_SESSION['user_level'] = $user_level; $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); //update the timestamp and key for cookie $stamp = time(); $ckey = GenKey(); mysql_query("update users set `ctime`='{$stamp}', `ckey` = '{$ckey}' where id='{$id}'") or die(mysql_error()); //set a cookie if (isset($_POST['remember'])) { setcookie("user_id", $_SESSION['user_id'], time() + 60 * 60 * 24 * COOKIE_TIME_OUT, "/"); setcookie("user_key", sha1($ckey), time() + 60 * 60 * 24 * COOKIE_TIME_OUT, "/"); setcookie("user_name", $_SESSION['user_name'], time() + 60 * 60 * 24 * COOKIE_TIME_OUT, "/"); } header("Location: myaccount.php"); exit; } else { $hasError[] = "Contraseña incorrecta. Vuelve a intentarlo."; } } else { $hasError[] = "Usuario o correo electrónico inexistente."; } }