Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP

Войти
Регистрация
Восстановить пароль
 
mishalat
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 3
#1

Брутфорс формы авторизации - PHP

14.05.2018, 19:38. Просмотров 108. Ответов 5
Метки нет (Все метки)

Добрый вечер! Возникла вроде бы простая проблема, которую, тем не менее, своими силами решить не удалось.

Суть проблемы:
1) Есть небольшой сайтик;
2) на сайте есть форма авторизации (login_form.php);
3) в форму авторизации встроена каптча (в моем случае reCAPTCHA 2);
4) данные из формы, введённые пользователем (логин и пароль), отправляются на сервер и там проверяются (login.php). Используется метод POST. Кнопка отправки логина/пароля становится активной после правильного ввода каптчи. Сделано это для защиты от брутфорса.
5) И всё равно брутфорс возможен. Просто можно напрямую обратиться к login.php, минуя login_form.php, например вот так: mysite.ru/login.php?login=admin&passwors=123. И voilà, зашли в аккаунт.

Собственно, надеюсь, я понятно описал суть проблемы. Вопрос вытекает из последнего пункта: как защититься от такого банального перебора?

P.S. Для примера привожу сокращенный листинг.

1) login_form.php

HTML5
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
<html>
    <?php session_start(); ?>
 
    <head>
        <link href="style/mcf.css" type="text/css" rel="stylesheet" />
        <?php include_once "connection.php"; ?>
        <script src='https://www.google.com/recaptcha/api.js'></script>
    </head>
 
    <body>
        <div id="fade" class="black-overlay">
            <div class="envelope">
                <form action="login.php" method="post">
                    <?php if(!isset($_SESSION['status'])) { ?>
                        <input type="text" name="login" class="your-login" placeholder="* Введите ваш логин" required/>
 
                        <input id="pas" type="password" name="password" width="200px" class="pass" placeholder="* Введите ваш пароль" required/>
                       
                        <div class="g-recaptcha" data-sitekey="blablabla" data-callback="recaptchaCallback"></div>
 
                        <input type="submit" id="sub" name="send" value="Отправить" class="send-message" disabled>
                    <?php } ?>
                </form>
            </div>
        </div>
 
        <script language="javascript">
            var recaptchachecked;
                function recaptchaCallback() {
                recaptchachecked = true;
                document.getElementById('sub').disabled = false;
            }
        </script>
       
    </body>
</html>
2) login.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    session_start();
    include_once "connection.php";
 
    $login = $_POST['login'];
    $password = $_POST['password'];
 
    $query = "SELECT * FROM user WHERE (login = '".$login."')";
    $result = mysqli_query($connection, $query);
    $user = mysqli_fetch_array($result);
 
    if (password_verify($password, $user['password'])) {
        $_SESSION['login'] = $user['login'];
                $_SESSION['status'] = 'login';
        header("Location: /index.php");
    }
    else {
        session_destroy();
        header("Location: /index.php");
    }
 
?>
Добавлено через 4 минуты
Есть смутное предположение, что ответ рекаптчи всё-таки должен отправляться на сервер и проверяться еще и там, но я пока не очень понимаю, как это реализовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2018, 19:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Брутфорс формы авторизации (PHP):

Создание формы авторизации для админ панели - PHP
Народ есть у кого либо рабочий скрипт авторизации для админа ? так как у меня скрипт вроде рабочий а вроде и не рабочий т.е. форма...

Sleep и брутфорс - PHP
Годный ли способ помешать брутфорсеру, притормозив ответ программы на несколько секунд, в случае ввода неверного пароля? Или это положит...

После авторизации повторно перекидывает обратно на страницу авторизации - PHP
Так, у меня есть проблема. Как только авторизируюсь, перекидывает обратно на авторизацию. Вот код, login.php: &lt;? ...

Создание авторизации - PHP
Где ошибка при наборе кода &lt;?php session_start(); if(!$_SESSION){ header('Location: index.php'); exit; } ?&gt; ...

Скрипт авторизации в Vk - PHP
Здравствуйте. Долго искал как сделать но везде посылают на ru2.php.net/curl , мне как не особо сильному программисту сложно разобраться что...

Вопрос по авторизации посетителей - PHP
Как лучше хранить информацию об авторизации пользователя? Сессии или куки?

5
tarasalk
629 / 561 / 174
Регистрация: 13.06.2013
Сообщений: 1,956
14.05.2018, 20:03 #2
Конечно проверять надо на сервере. Клиенту никогда нельзя доверять.
В официальной документации все есть.
1
Jewbacabra
14.05.2018, 21:54
  #3

Не по теме:

Цитата Сообщение от mishalat Посмотреть сообщение
SELECT * FROM user WHERE (login = '".$login."')
Смотрю на такое в 2018, и как-то грустно становится

0
mishalat
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 3
14.05.2018, 22:32  [ТС] #4
tarasalk, Спасибо, нашел)
Jewbacabra, Я web-ом занимаюсь недавно и пока чисто для интереса. Так что, если уж пишете не по теме, объясняйте сразу же как НАДО писать правильно (желательно с примером).
0
Jewbacabra
Эксперт PHP
2965 / 2552 / 951
Регистрация: 24.04.2014
Сообщений: 7,800
14.05.2018, 23:43 #5
mishalat, первое о чем я узнал в вебе - это то что клиент может прислать абсолютно что угодно, и прежде чем использовать полученные от него данные нужно убедиться в их безопасности, или привести к безопасному виду.
https://secure.php.net/manual/ru/security.database.sql-injection.php
0
mishalat
0 / 0 / 0
Регистрация: 30.03.2016
Сообщений: 3
14.05.2018, 23:49  [ТС] #6
Jewbacabra, Ах, вы про это) Ну, я экранирую символы. Половину кода вырезал, как и говорил в посте, дабы оставить только то, что относится к проблеме. Акунетикс не выдаёт возможности использования sql-инъекций. Впрочем, я пока в этом деле не дока, так что, наверное, одним экранированием не обойтись.
0
14.05.2018, 23:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2018, 23:49
Привет! Вот еще темы с ответами:

Сессия с меткой авторизации - PHP
Что лучше записывать в сессию для определения залогинен пользователь или нет?

Обработка ошибки авторизации - PHP
Доброго времени суток. Для сайта пишу всплывающее окно с возможностью вход\регистрации. В поисковиках, а так же на форуме поискал, но...

Оцените способ авторизации - PHP
Здравствуйте! Оцените пожалуйста, такой вот метод авторизации с использованием MySQL (с точки зрения безопасности, какие подводные камни...

Глобальная форма авторизации - PHP
Здравствуйте. Постараюсь максимально доступно описать суть вопроса. Есть несколько серверов на VDS на разных площадках. Мне нужно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru