Регистрация на сайте

Печать RSS
406

Автор
Дух
0
Вот набросал скрипт регистрации на сайте.
<?php
session_start();



if(!$_SESSION['login'])

{

require_once('mysql.php');

$login = $_POST['login'];
$password = $_POST['password'];
$mail = $_POST['mail'];

if(empty($login) ) { echo 'Вы не ввели логин'; exit;}
if(!preg_match("/^[a-z]+$/", $login)) { echo 'Логин должен состоять только из латинских букв в нижнем регистре'; exit; }
if(strlen($login) < 3) { echo 'Длина логина должна быть не менее трех символов'; exit; }
if(strlen($login) > 20) { echo 'Длина логина должна быть не более двадцати символов'; exit; }


if(empty($password) ) { echo 'Вы не ввели пароль'; exit;}
if(!preg_match("/^[a-z]+$/", $password)) { echo 'Пароль должен состоять только из латинских букв в нижнем регистре'; exit; }
if(strlen($password) < 5) { echo 'Длина пароля должна быть не менее пяти символов'; exit; }
if(strlen($password) > 20) { echo 'Длина пароля должна быть не более двадцати символов'; exit; }


if(empty($mail) ) { echo 'Вы не ввели мейл'; exit;}
if(!preg_match('/^.+\@.+\.[a-z]+$/', $mail)) { echo 'Мейл должен состоять только из латинских букв в нижнем регистре'; exit; }
if(strlen($mail) < 5) { echo 'Длина мейла должна быть не менее пяти символов'; exit; }
if(strlen($mail) > 50) { echo 'Длина мейла должна быть не более пятидесяти символов'; exit; }







$result = mysqli_query($db, "SELECT login FROM users WHERE login='$login'");
$row = mysqli_fetch_array($result);
if ($row['login'] == $login)
{ echo 'Такой логин есть'; exit; }

$result2 = mysqli_query($db, "SELECT mail FROM users WHERE mail='$mail'");
$row2 = mysqli_fetch_array($result2);
if ($row2['mail'] == $mail)
{ echo 'Такой mail есть'; exit; }

mysqli_query($db, "INSERT INTO users (login,password,mail) VALUES('$login','$password','$mail')");
exit; 
}

header("Location: index.php");


?>
Знающие люди скажите есть ли в этом коде какая либо уязвимость или может можно все проще сделать?
K

Чатланин
0
Конечно. $_POST фильтруй.

Добавлено через 00:53 сек.
А exit; для чего?
Изменил: karpov-ml (24.01.2016 / 01:32)
Автор
Дух
0
ну чтоб дальнейшие скрипты не выполнялись

Пацак
0
$login = $mysqli->real_escape_string($_POST['login']);
Как то так, если не ошибаюсь.
Изменил: Алексей (24.01.2016 / 12:37)

Оранжевые штаны
0
4. XwiruS, зачем escape?
$q = $db->prepare("INSERT INTO `users` (`login`, `pass`, `email`) VALUES (?, ?, ?)");
$q->bind_param('sss', $_POST['login'], $_POST['pass'], $_POST['email']);
if($q->execute) echo 'запрос выполнен';
//$db->prepare - mysqli_prepare
//$q->bind_param - mysqli_bind_param
//$q->execute - mysqli_execute
//в bind_param 'i' - integer, 's' - string 'd' - double, float 

Пацак
0
5. DimmoS, Та я хз) Первое что вспомнил написал)
Я ж совсем забил на это дело)

2000 лет д.н.э.
0
Нагородили то.
у него регулярка проверяет логин, не надо его дальше фильтровать

Пацак
0
7. ramzes, ахахаха я в код и не смотрел) Увидел комент карпова и отписал свою мысль)

Оранжевые штаны
0
7. ramzes, где ты у меня фильтры видишь?

2000 лет д.н.э.
0
9. DimmoS, для чего ты подготовленное выражение применяешь?
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск