Проверка логина регулярным выражением
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 символов.");} . Почему в базу пишутся логины с большой и с маленькой буквы? Мне нужно только с маленькой
Если в форму написать 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 символов';}
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