Проверка логина регулярным выражением

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, вроде бы регулярка итак не пропускает пробелы.. А если ИП динамический?
MaZaHaKeR (Сегодня / 00:34)
регулярка будет ругать юзера если он пробел влупит, проще его удалить чем заставлять вводить по новой.
ип можно не весь брать, допустим первые две части. можно конечно и чисто по юзерагенту, но это ненадежно, тот же хром у большинства имеет одинаковый уа.
динамический ип все равно не меняется каждые 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