Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
16 / 16 / 7
Регистрация: 07.07.2014
Сообщений: 228

Защита от перебора паролей в форме Авторизации

04.08.2016, 21:35. Показов 7614. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,

Нашёл видеоурок по созданию простой Авторизации, с необходимыми мне условиями. Повторил код, проверил в Денвере - работает. Но автор допустил несколько ошибок, которые бы хотелось исправить:

1. Автор сделал защиту от перебора паролей, а тестировал её нажимая на кнопку "Отправить", оставляя, при этом, пустыми окна ввода логина и пароля. В таком режиме защита срабатывает, но если подставлять в окна рандомные символы, перебирать можно бесконечно.

2. После срабатывания защиты появляется окно "Try after ** minutes". Когда проходит указанное время, нажимаем обновить страницу и попадаем в белую пустоту, нажимаем обновить ещё раз и только тогда, снова появляется форма для ввода логина и пароля.
Но самое печальное, что... если человек вызвавший срабатывание защиты не стал дожидаться её окончания и ушёл с сайта >>> то другой пользователь зайдя со своего компьютера на эту форму авторизации, попадает, как раз, в ту самую, вышеупомянутую белую пустоту и чтобы избавиться от неё, ему необходимо, так же, один раз обновить страницу. В общем, тупость.

Надеюсь знатокам это несложно исправить?
Заранее премного благодарен

Выкладываю все три файла, готовые стартануть в Денвере. На всякий случай, может кому пригодится, часа три вбивал)

index.php
PHP/HTML
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
session_start ();
$db = mysqli_connect ('localhost', 'Mister1', '733121');
mysqli_select_db ($db, 'Testax');
 
$select = @mysqli_query ($db, "SELECT log, passw, ip, ip_del_time FROM test1");
if (!$select) exit ('#110');
$row = @mysqli_fetch_row ($select);
if (!$row) exit ('#111');
 
if (ini_get('register_globals')) exit ('Off Reg_globals');
 
if (!$_SESSION['bruteforce'])
{   
   $_SESSION['bruteforce'] = 0;
   $_SESSION['bruteforce_t'] = time ();
   $_SESSION['bruteforce_ip'] = $_SERVER['REMOTE_ADDR'];
}
 
$_SESSION['bruteforce']++;
 
if ((time() - $_SESSION['bruteforce_t']) > 19 ) unset ($_SESSION['bruteforce']);
 
if (!empty ($row[2]))
{
    if ( (time() - $row[3]) < 19 ) 
    {   
       exit ("IP try after 10 minutes");
    }
    else
    {
        $select = @mysqli_query ($db, "UPDATE test1 SET ip='', ip_del_time = '' WHERE log = 'log123'");
        if (!$select) exit ("#112");
        unset ($_SESSION['bruteforce']);
        exit ();
    }       
}
if ($_SESSION['bruteforce'] > 3)
{
    $select = @mysqli_query ($db, "UPDATE test1 SET ip='$_SESSION[bruteforce_ip]', ip_del_time = '$_SESSION[bruteforce_t]' WHERE log ='log123'");
    exit("Try after 10 minutes");
}   
 
 
 
?>
 
<!DOCTYPE html PUBLIC "-//W3G//DTD XHTML 1.0 Transnational//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-transnational.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=windows-1251" />
<title>админка и защита от взлома</title>
 
 
<body>
 
<h1>Админка</h1>
<div style="background-color:#D3D3D3; width:200px; padding:10px">
<form method="post">
login:<br />
<input name="log" type="text" /><br />
password:<br />
<input name="passw" type="password" /><br /><br />
<input type="submit" name="button" style="cursor:pointer" />
</form>
</div>
 
<?php
if ($_POST['button'])
{
    if (!preg_match ("/test1\.ru/", $_SERVER['HTTP_REFERER'])) exit();
    
    $log = $_POST['log'];
    $passw = md5 ("fjfjhghgjfjffjdierjfnndbhdhdh".$_POST['passw']);
    
    if ( ($log === $row[0]) and ($passw === $row[1]))
    {
        $_SESSION['auth'] = $log;
        echo "Enter to admin -> <a href='admin.php' > admin </a> ";
        
    }       
    else
    {
        return exit ('Not correct');
    }   
    
}
 
 
?>
 
</body>
</html>
страница, куда попадаем после авторизации (admin.php)
PHP/HTML
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
<?php
session_start ();
if (!$_SESSION['auth'])
{
    exit ("go to <a href='http://test1.ru/index.php'>login page</a>");
}
 
echo "<a href='http://test1.ru/admin.php?exit=1'> EXIT </a> <br>";
 
if ($_GET['exit'] == 1)
{
    unset ($_SESSION['auth']);
    session_destroy();
    exit();
}   
?>
 
<!DOCTYPE html PUBLIC "-//W3G//DTD XHTML 1.0 Transnational//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-transnational.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=windows-1251" />
<title>ADMIN</title>
</head>
 
<body>
 
ADMIN SECURITY , <?php echo $_SESSION['auth'] ?>
 
 
</body>
</html>
Ну и настроенная БД (testax.sql)
SQL
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
42
43
44
45
-- phpMyAdmin SQL Dump
-- version 3.5.1
-- [url]http://www.phpmyadmin.net[/url]
--
-- Хост: 127.0.0.1
-- Время создания: Авг 04 2016 г., 19:13
-- Версия сервера: 5.5.25
-- Версия PHP: 5.3.13
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- База данных: `testax`
--
 
-- --------------------------------------------------------
 
--
-- Структура таблицы `test1`
--
 
CREATE TABLE IF NOT EXISTS `test1` (
  `log` VARCHAR(200) NOT NULL,
  `passw` VARCHAR(200) NOT NULL,
  `ip` VARCHAR(100) NOT NULL,
  `ip_del_time` INT(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
--
-- Дамп данных таблицы `test1`
--
 
INSERT INTO `test1` (`log`, `passw`, `ip`, `ip_del_time`) VALUES
('log123', 'ce3f843422492a918fc5019ba12d8e8c', '', 0);
 
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2016, 21:35
Ответы с готовыми решениями:

Windows 2012 r2 защита от перебора паролей
Здравствуйте. Как защитить сервер от взлома пароля. Сервер находится за границей и постоянно идет перебор паролей. Сервер на ESXI работает....

Программа перебора паролей
как написать код для проги чтобы она, вот стоит пароль на проге, а написать код чтобы копмьютер сам переставлял буквы в нужном порядке и...

Программа для перебора паролей 7z
Здравствуйте Подскажите пожалуйста программу, которая может подставлять пароли из текствого файла к 7z архивам. Суть: запоролил архив,...

10
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 129
26.08.2016, 12:24
Добрый день!
Я смотрел этот видеоурок на ютубе. Делал по нему защиту от перебора - не работает!
В чём дело не знаю. Может потому что я использую mysql а не mysqli ?

Добавлено через 50 секунд
Цитата Сообщение от Квас Посмотреть сообщение
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
а вот это что за настройка? куда эту настройку вписать?
0
Особый статус
 Аватар для bek08
40 / 41 / 10
Регистрация: 26.01.2010
Сообщений: 506
26.08.2016, 14:33
Цитата Сообщение от davidoff72 Посмотреть сообщение
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
Это можно пропустит
0
Web Programmer
 Аватар для JimUSA
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
26.08.2016, 15:31
Квас, Ну вообще вы проверку ip никуда не привязываете, потому у всех такая штука.

Если Вам нужно просто убрать белую страницу, удалите строку 35.
1
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 129
26.08.2016, 21:33
Цитата Сообщение от JimUSA Посмотреть сообщение
Если Вам нужно просто убрать белую страницу, удалите строку 35.
а что будет вместо белой страницы?
а если сделать хедер переадресацию на страницу - ждите... или что то в этом роде?
0
Web Programmer
 Аватар для JimUSA
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
27.08.2016, 00:14
davidoff72, Вместо белой будет почти все тоже самое, только с отображение нужной Вам части без обновления.
1
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
27.08.2016, 00:15
Цитата Сообщение от Квас Посмотреть сообщение
@mysqli_query

Не по теме:

что за мода скрывать ошибки @

0
Web Programmer
 Аватар для JimUSA
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
27.08.2016, 00:18
Azdeman,

Не по теме:

А зачем им ошибки, у них есть if (!$select) exit ("#110"); :D

0
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 129
27.08.2016, 00:35
Я убрал exit(); и написал "Извините за неудобство, обновите страницу через 20 секунд".
Полумера....
0
Web Programmer
 Аватар для JimUSA
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
27.08.2016, 01:05
davidoff72, Возможно Вы удалили не совсем то, напишите Ваш код тут.
1
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 129
27.08.2016, 01:16
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
 
if (ini_get('register_globals')) exit ('Off Reg_globals');
 
if (!$_SESSION['bruteforce'])
{   
   $_SESSION['bruteforce'] = 0;
   $_SESSION['bruteforce_t'] = time ();
   $_SESSION['bruteforce_ip'] = $_SERVER['REMOTE_ADDR'];
}
 
$_SESSION['bruteforce']++;
 
if ((time() - $_SESSION['bruteforce_t']) > 20 ) unset ($_SESSION['bruteforce']);
 
if (!empty ($user_data [3]))
{
    if ( (time() - $user_data [4]) < 20 ) 
    {   
       exit ("Извините за неудобство. Обновите страницу через 20 секунд");
       
    }
    else
    {
        $user_data = mysql_query ("UPDATE users SET ip='', ip_del_time = '' WHERE login = 'dosvid'");
        if (!$user_data) exit ("#112");
        unset ($_SESSION['bruteforce']);
        
    }       
}
if ($_SESSION['bruteforce'] > 3)
{
    $user_data = mysql_query ("UPDATE users SET ip='$_SESSION[bruteforce_ip]', ip_del_time = '$_SESSION[bruteforce_t]' WHERE login ='dosvid'");
    exit("Извините за неудобство. Обновите страницу через 20 секунд");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2016, 01:16
Помогаю со студенческими работами здесь

Как ускорить процесс перебора паролей?
как ускорить процесс перебора паролей? Брать и перебирать, такой ответ уже был в моей голове. Еще предложения?

Метод для перебора паролей по алфавиту
Нужен метод для перебора всех возможных паролей по алфавиту и возвращающий строку с паролем. Вот что сумел написать сам: public string...

Определить время перебора всех паролей с параметрами
Определить время перебора всех паролей с параметрами. Алфавит состоит из n символов. Длина пароля символов k. Скорость перебора s...

Посчитать время полного перебора всех паролей
Задача такая: есть пароль из 15 символов,состоящий из A-z = 52 + знаки (я насчитал 32) Есть сервер с прямым доступом со скоростью...

Создание бот-программы для быстрого перебора паролей
Вот так должно всё работать. Перед запуском бота мы открываем онлайн игру скачанную на рабочий стол. Логин введён сразу и...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru