if (isset($_POST['is_submit'])) {
$receivedLogin = trim($_POST['login']);
$receivedPassword = trim($_POST['password']);
if (!empty($receivedLogin) && !empty($receivedPassword)) {
$sthBannedSelect = $db -> prepare('SELECT UNIX_TIMESTAMP(date + INTERVAL 3 MINUTE) AS block_date, try_count FROM banned_ip WHERE ip=INET_ATON(?)');
$sthBannedSelect -> execute(array($_SERVER['REMOTE_ADDR']));
$sthBannedSelect -> bindColumn('block_date', $blockDate);
$sthBannedSelect -> bindColumn('try_count', $tryCount);
$sthBannedSelect -> fetch();
if (time() - intval($blockDate) <= 0 && $tryCount >= 3)
$needBan = TRUE;
if ($needBan) {
$message = 'Вы заблокированы до ' . date('H:i:s \G\M\T P', $blockDate);
} else {
$sthClientsSelect = $db -> prepare('SELECT password, type FROM users WHERE login=?');
$sthClientsSelect -> execute(array($receivedLogin));
$sthClientsSelect -> bindColumn('password', $realPassword);
$sthClientsSelect -> bindColumn('type', $userType);
$sthClientsSelect -> fetch();
if ($realPassword == md5($receivedPassword)) {
$db -> exec('DELETE FROM banned_ip WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date + INTERVAL 3 MINUTE)) > 0');
$_SESSION['login'] = $receivedLogin;
$_SESSION['user_type'] = $userType;
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
header("Location: index.php");
die ;
} else {
$message = 'Количество неверных попыток ограничено!';
$sthBannedCount = $db -> prepare('SELECT COUNT(*) FROM banned_ip WHERE ip=INET_ATON(?)');
$sthBannedCount -> execute(array($_SERVER['REMOTE_ADDR']));
if ($sthBannedCount -> fetchColumn()) {
$db -> prepare('UPDATE banned_ip SET try_count=try_count + 1, date=NOW() WHERE ip=INET_ATON(?)') -> execute(array($_SERVER['REMOTE_ADDR']));
} else {
$sthBannedInsert = $db -> prepare('INSERT INTO banned_ip(ip, date, try_count) VALUES(INET_ATON(?), NOW(), 1)');
$sthBannedInsert -> execute(array($_SERVER['REMOTE_ADDR']));
}
}
}
}
}
Спустя 1 час, 19 минут, 39 секунд (29.10.2011 - 03:14) johniek_comp написал(а):
закоментируй код что бы понятно было
Спустя 11 минут, 15 секунд (29.10.2011 - 03:25) Игорь_Vasinsky написал(а):
Цитата |
$receivedLogin = trim($_POST['login']); $receivedPassword = trim($_POST['password']); |
но этого не достаточно, mysql_real_escape_string()
это кто вообще отправляет?
а больше то пользовательских данных то и нету....
а класс то где?
Спустя 10 часов, 26 минут, 8 секунд (29.10.2011 - 13:52) Guest написал(а):
Цитата |
это кто вообще отправляет? |
Это отправляет пользователь при авторизации. У него два поля: логин и пароль.
Цитата |
а класс то где? |
Цитата |
но этого не достаточно, mysql_real_escape_string() |
При конструкции prepare() -> execute() PDO автоматически заботится о кавычках.
Цитата |
закоментируй код что бы понятно было |
Я добавил его как гость, соответственно редактировать вроде бы не могу.
Спустя 1 час, 52 минуты, 33 секунды (29.10.2011 - 15:44) Игорь_Vasinsky написал(а):
ну тогда вроде бы - чисто.
Спустя 2 часа, 24 минуты (29.10.2011 - 18:08) Гость_Дмитрий написал(а):
Цитата |
ну тогда вроде бы - чисто. |
Спасибо!
Спустя 11 минут, 37 секунд (29.10.2011 - 18:20) Winston написал(а):
Цитата (Гость_Дмитрий @ 29.10.2011 - 01:55) |
if (!empty($receivedLogin) && !empty($receivedPassword)) { |
Вы введите в поле логина и пароля по одному нулю ( 0 )
И проверка
if (!empty($receivedLogin) && !empty($receivedPassword))
Пойдет прахом.
Лучше так
if ((isset($receivedLogin) && $receivedLogin != '') && (isset($receivedPassword) && $receivedPassword != ''))
Ну последнюю проверку лучше использовать когда у вас допускается использования логина и пароля которые могут состоять из одного символа.
Спустя 1 час, 9 минут, 52 секунды (29.10.2011 - 19:30) imbalance_hero написал(а):
Чисто? Тут тоже? $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 2 минуты, 9 секунд (29.10.2011 - 19:32) Guest написал(а):
Цитата |
if ((isset($receivedLogin) && $receivedLogin != '') && (isset($receivedPassword) && $receivedPassword != '')) |
Ваша проверка при вводе нулей пойдет прахом точно так же как и моя. Если уж разрешать нули, то вписать
!== ''
А в целом спасибо за замечание!
Спустя 2 минуты, 2 секунды (29.10.2011 - 19:34) Гость_Дмитрий написал(а):
Цитата |
Чисто? Тут тоже? $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT']; |
Не понял, в чем подвох?
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 4 минуты, 14 секунд (29.10.2011 - 19:38) imbalance_hero написал(а):
Внедрение XSS, HTTP - пренадлежит клиенту, и может быть легко подделана. Как в дальнейшем ты распорядишься в своих скриптах этой сессионной переменной - я не знаю, но если не так, то ошибка будет тут.
Спустя 4 минуты (29.10.2011 - 19:42) Гость Дмитрий написал(а):
Цитата |
Внедрение XSS, HTTP - пренадлежит клиенту, и может быть легко подделана. Как в дальнейшем ты распорядишься в своих скриптах этой сессионной переменной - я не знаю, но если не так, то ошибка будет тут. |
Я используя user_agent вот для этого:
if (empty($_SESSION['login']) || $_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT'])
{
header("Location: auth.php");
die ;
}
Риск есть?
Спустя 3 часа, 47 минут (29.10.2011 - 23:29) imbalance_hero написал(а):
Гость Дмитрий
В данном случае нет.
В данном случае нет.
Спустя 1 час, 13 минут, 22 секунды (30.10.2011 - 00:42) Гость_Дмитрий написал(а):
Цитата |
В данном случае нет. |
Спасибо!