С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
 Аватар для Saym
5 / 5 / 4
Регистрация: 02.11.2014
Сообщений: 196

Блокирование входа после 3-х неудачных попыток

02.10.2016, 19:22. Показов 6227. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пример с сайта http://ruseller.com/lessons.php?rub=37&id=350 (файл testreg.php)

Таблица в mysql.
ip – ip-адрес.
date – дата неудачного входа за последние 15 минут у пользователя с данным ip.
col – количество ошибок за последние 15 минут у пользователя с данным ip.

Кусок, который отвечает за блокировку входа на 15 минут после 3-х неудачных набегов:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
   
// минипроверка на подбор паролей
 
            $ip=getenv("HTTP_X_FORWARDED_FOR");
            if (empty($ip) || $ip=='unknown') {    $ip=getenv("REMOTE_ADDR"); }//извлекаем ip           
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() -    UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.           
$result = mysql_query("SELECT col FROM oshibka WHERE    ip='$ip'",$db);// извлекаем из базы количество неудачных попыток входа за    последние 15 у пользователя с данным ip 
            $myrow = mysql_fetch_array($result);
 
if ($myrow['col'] > 2) {
            //если ошибок больше двух, т.е три, то выдаем сообщение.
            exit("Вы набрали логин или пароль неверно 3 раз. Подождите    15 минут до следующей попытки.");
            }     
   $password    = md5($password);
 
$result = mysql_query("SELECT * FROM    users WHERE login='$login' AND    password='$password'",$db); //извлекаем из базы все данные о пользователе с    введенным логином и паролем
            $myrow    = mysql_fetch_array($result);
            if (empty($myrow['id']))
            {
            //если пользователя с введенным логином и паролем не    существует
            //Делаем запись о том, что данный ip не смог войти.          
$select = mysql_query ("SELECT ip FROM oshibka WHERE    ip='$ip'");
            $tmp = mysql_fetch_row ($select);
            if ($ip == $tmp[0]) {//проверяем, есть ли пользователь в таблице "oshibka" 
            $result52 = mysql_query("SELECT col FROM oshibka WHERE    ip='$ip'",$db);
            $myrow52 = mysql_fetch_array($result52);          
$col = $myrow52[0] + 1;//прибавляем    еще одну попытку неудачного входа 
            mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE    ip='$ip'");
            }          
else {
            mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES    ('$ip',NOW(),'1')");
            //если за последние 15 минут ошибок не было, то вставляем    новую запись в таблицу "oshibka"
            }          
           
exit ("Извините, введённый    вами логин или пароль неверный.");
            }
            else {          
nbsp;         //если пароли    совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
                      $_SESSION['password']=$myrow['password']; 
                                $_SESSION['login']=$myrow['login'];
Моя проблема в том, что значения поля col не увеличивается после каждого неудачного входа на единицу, а просто создается еще одна запись в таблице с тем же самым IP.
Почему так?
Миниатюры
Блокирование входа после 3-х неудачных попыток  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2016, 19:22
Ответы с готовыми решениями:

Количество неудачных попыток
Здраствуйте помоги да пожалуста сделать одну маленькую функцию Колическво неудачных попыток авторизации на сайте! Чтобы когда человек...

Как можно сделать чтобы при нескольких неудачных попыток войти на сайт всплывала captcha
Добрый вечер. Как можно сделать чтобы при несколько неудачной попытки войти на сайт (введя логин и пароль) всплывается captcha и только...

Убрать с сайта кнопку входа после самого входа
На сайте расположено окно входа, которое открывается по кнопке, как сделать, чтобы когда пользователь зашел, кнопки не было?) &lt;div...

3
21 / 21 / 5
Регистрация: 26.12.2013
Сообщений: 177
03.10.2016, 18:03
Во первых, плохая идея блокировать доступ по ip, ведь у многих сетей общий ip на всех пользователей.
Во вторых, форматирование кода ужасное, очень тяжело так читать код.
По теме, ошибка скорее всего в этой строке:
PHP
1
if ($ip == $tmp[0]) {//проверяем, есть ли пользователь в таблице "oshibka"
Выводи переменные с помощью print_r и echo и проверяй что там хранится, особенно типы. Собственно так ищут все ошибки . И к стати, у тебя слишком много запросов к базе данных, их можно значительно сократить.
1
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
04.10.2016, 01:15
Лучший ответ Сообщение было отмечено Saym как решение

Решение

с чего бы плохо банить по ip (ведь есть такое понятие как прокси - флаг в руки сидящим с 1 ip)? если по одному ip то это можно, даже нужно за нарушения правил сайта и прочее. пускай не зайдут юзеры с конченного роутера, на котором сидят горе хацкеры. он же не подсеть банить собрался?)) это и касается доса-ддоса.

единственное что банить и создавать соединение и записывать это в субд - не очень хорошая идея. быстрее и лучше записывать в лог с указанием json=time|id|chance|blocktime - далее прописать под разные условия и раздавать налево направо баны. если есть крон - пускай фильтрует через определенное время лог.
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
05.10.2016, 14:41
Fart83, многие компании сидят на одном ip, так как это излишняя трата каждому сотруднику выдеять отдельный ip. У нас один интернет на всю компанию, один ip. И скажи мне, почему работая в компании, где кроме меня пашут еще 2000 человек, мне откажут в доступе из-за того, что какая-то тетя-мотя из хз какого отдела три раза ввела не правильно пароль?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2016, 14:41
Помогаю со студенческими работами здесь

Блокировка пользователя после нескольких неудачных попыток входа
Проект на asp net mvc 3 Не могу понять как организовать блокировку пользователя после 5 неудачных попыток входа пользователя. В базе...

Блокировка пользователя после нескольких неудачных попыток входа при использовании membership service
Уважаемые Гуру! В silverlight приложении используется стандартная авторизация из silverlight business application. После нескольких...

После неудачных попыток разогнать камень не грузится BIOS
Добрый день. Проблема стара как WIn95. После неудачных попыток разогнать камень не грузиться BIOS (При нажатии DEL или F2 ничего не...

Закрытие программы после N неудачных попыток ввода пароля
Есть форма для ввода логина и пароля. Если пользователь.например, 3 раза ПОДРЯД введет неверно логин и пароль,то программа должна...

SpringSecurity, отправить письмо пользователю после 3-х неудачных попыток ввода пароля
Интересует теория Приложение использует SpringSecurity, как сделать так, что бы к примеру после 3-х неудачных попыток залогиниться юзеру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru