Проверка логина регулярным выражением
1.
Удаленный (10.11.2016 / 10:43)
Написал код регистрации. Вот отрывок
$login = $_POST['login'];
$pass = $_POST['pass'];
if (!preg_match("/[a-z0-9]$/",$login)){exit ("Логин только из латинских букв в нижнем регистре и цифр.");}
if (empty($login)){exit ("Логин пустой.");}
if (strlen($login) <3 or strlen($login) >10){exit ("Логин должен быть от 3 до 10 символов.");}
if (!preg_match("/[a-z0-9]$/",$pass)){exit ("Пароль только из латинских букв в нижнем регистре и цифр.");}
if (empty($pass)){exit ("Пароль пустой.");}
if (strlen($pass) <5 or strlen($pass) >10){exit ("пароль должен быть от 5 до 10 символов.");}
. Почему в базу пишутся логины с большой и с маленькой буквы? Мне нужно только с маленькой
Добавлено через 05:16 сек.
Если в форму написать LOGIN то сработает ограничение. А если Login то спокойно пишет в базу
2.
AkexandrFox (10.11.2016 / 11:20)
^[a-z0-9]$
Вроде начало и конец строки нужно указать
3.
Дмитрий (10.11.2016 / 11:28)
/^[a-z0-9]*$/
4.
Удаленный (10.11.2016 / 11:35)
спасибо
5.
Zдешний (10.11.2016 / 16:58)
/^[a-z0-9]{3,10}$/ и две другие проверки не нужны
6.
/7o/loTeH4I1k (11.11.2016 / 08:00)
а вылетать в exit с ошибкой не слишком жёстко?
7.
Удаленный (11.11.2016 / 11:18)
Не жестко. Это для особых целей
8.
ramzes (11.11.2016 / 13:34)
Это не просто жестко, это отталкивает посетителей, вводить с нуля каждый раз когда неверно ввел, дв ну его на фиг.
З.ы. пароль то зачем вообще ограничивать маской, ты его в чистом виде хранишь что ли?
9.
Удаленный (11.11.2016 / 15:34)
А така я проверка норм? Больше ничего не нужно проверять?
if (!preg_match("/^[a-z0-9]{3,10}$/",$login)){$errorlogin = 'Логин только из латинских букв в нижнем регистре и цифр от 3 до 10 символов';}
if (!preg_match("/^[a-z0-9]{5,10}$/",$pass)){$errorpass = 'Пароль только из латинских букв в нижнем регистре и цифр от 5 до 10 символов';}
Добавлено через 01:49 сек.
ramzes, это я затупил) Пока не шифрую
10.
Дмитрий (11.11.2016 / 16:18)
MaZaHaKeR, проверка на существование POST данных есть? Если да то ничего.
11.
Удаленный (11.11.2016 / 16:37)
кароч вот весь код регистрации.
<?php
require "connect.php";
if ($_SESSION['login']){header ('Location: '.$_SESSION['login'].''); exit();}
if ($_POST['reg']){
$login = $_POST['login'];
$pass = md5($_POST['pass']);
if (!preg_match("/^[a-z0-9]{3,10}$/",$login)){$errorlogin = 'Логин только из латинских букв в нижнем регистре и цифр от 3 до 10 символов';}
$row = mysqli_fetch_array(mysqli_query($connect, "SELECT login FROM users WHERE login='$login'"));
if ($row['login']){$dudlelogin = 'Логин уже зарегистрирован. Введите другой логин.';}
if (!$errorlogin AND !$dudlelogin){
$row = mysqli_query($connect, "INSERT INTO users (login,pass) VALUES('$login','$pass')");
$_SESSION['login'] = $login;
if ($_SESSION['login']){header ('Location: '.$_SESSION['login'].''); exit();}
}
}
mysqli_free_result($row);
mysqli_close($connect);
?>
Посоветуйте что добавить или убрать или поменять
12.
ramzes (11.11.2016 / 17:43)
$_POST['login'] = trim($_POST['login']); просто хороший тон. иногда случайно пробел прожимают
_______
$_SESSION['login'] = $login; для безопасной авторизации этого мало. в случае перехвата сессии учетку просто угонят.
я бы добавил хеш (ип+юзерагент), и сверял бы их
ну и в куку че то писать, если нужна возможость автоматической авторизации спустя пол-часа отсутствия
13.
Александр (11.11.2016 / 18:23)
Так перводи сам в нижний регистр - mb_strtolower($login); да и все. Юзеру не нужно заморачиваться.
14.
Удаленный (12.11.2016 / 00:34)
ramzes, вроде бы регулярка итак не пропускает пробелы.. А если ИП динамический?
15.
ramzes (12.11.2016 / 01:24)
ramzes, вроде бы регулярка итак не пропускает пробелы.. А если ИП динамический?
регулярка будет ругать юзера если он пробел влупит, проще его удалить чем заставлять вводить по новой.
ип можно не весь брать, допустим первые две части. можно конечно и чисто по юзерагенту, но это ненадежно, тот же хром у большинства имеет одинаковый уа.
динамический ип все равно не меняется каждые 5 минут. опять же. если будут куки, то ресет авторизации в сессии юзер даже не заметит, его на куках авторизирует автоматом, и сгенерит новые данные для сессии.
16.
Удаленный (12.11.2016 / 01:39)
ramzes, спасибо за советы! А подскажешь как это правильно реализовать? Я с куками еще дел не имел
17.
ramzes (12.11.2016 / 15:44)
точно так же как с сессией, разница лишь в том что задаются куки специальной функцией
http://php.net/setCookie и задавать их надо до отправки данных в браузер
а читаются так же из массива _COOKIE
и главное. данным от куки доверять нельзя, т.е. их можно подделать, соответственно их обязательно надо фильтровать и проверять на валидность (аналогично проверке данных из формы)
URL:
https://visavi.net/topics/43236