Sfjklm Ответов: 1

Регистрация проверить тонкий


Что не так с моей валидацией ?..я могу легко зарегистрировать пользователя с помощью 3 3 3 3 -(имя,адрес электронной почты,пропуск,повторный пропуск) значения...не должны быть в состоянии сделать это....

моя форма-name= " form_id"
а регистр - это " register_submit"
там все хорошо...

Что я уже пробовал:

if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['password']) || !isset($_POST['password_2']) || !isset($_POST['register_submit'])) {
			die("place all infos pls");
		}
        $name = test_input($_POST["name"]);
           if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
           echo "Only letters and white space allowed"; 
             }
		$email = test_input($_POST["email"]);
           if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
             echo "Invalid email format"; 
             
             }
		$password = test_input($_POST['password']);
		$password_2 = test_input($_POST['password_2']);
	    $status = 1;
		

		if (!$email) {
			die("Please enter email");
		}
		 
	     if (!$name) {
			die("Please enter name");
		} 

		if (!$password || $password != $password_2) {
			die("Pass dont match");
		}

		$password = md5($password);
		$sql = "select * from users where email='$email' and password='$password'";
		$result = mysqli_query($conn, $sql);
		$exists = mysqli_num_rows($result);
		if ($exists != 0) {
			die("user with same email alredy registered");
		}


		$sql = "insert into users (name, email, password, status) values ('$name', '$email', '$password','$status')";
		$result = mysqli_query($conn, $sql);
		$last_id = mysqli_insert_id($result);
		
		header("Location: home.php");
		break;

	default:
		echo "error_log(d): " . $_POST['form_id'];
		break;
}

1 Ответов

Рейтинг:
0

Mohibur Rashid

У вас много проблем в исходном коде:
1. какова ваша функция test_input. Как получилось, что он может подтвердить имя, пароль, адрес электронной почты?. Вам нужно определить отдельный валидатор для имени и электронной почты. Имя может содержать пробел, а Почта-НЕТ;
2. Ваш preg_match позволит пустому имени пройти через него.
3. в чем смысл password_2?
4. Когда вы проверите наличие электронной почты и пароля вместе, это даст хакеру окно для поиска пароля с помощью грубой силы attak
5. Нельзя использовать break или по умолчанию или по умолчанию в основной корпус PHP: break-Manual[^]
6. можно использовать функцию md5 mysql, а не php.
7. Ваш запрос вставки не использует шифрование. Если вы успешно добавите его в базу данных, ваш пароль будет зарегистрирован как незашифрованный
8. Вы вводите запрос, не является залоговым. Небезопасный запрос вставки поставит под угрозу безопасность всей вашей системы. Читайте о SQL inject[^]