Ограничение попыток ввода пароля php

Ограничение попыток входа пользователя в PHP

Я видел веб-приложения с ограничениями для попыток входа пользователя.

Это необходимость безопасности, и если да, то почему?

Например: у вас было три неудачных попытки входа в систему, попробуйте еще раз за 10 минут!

Разъяснение Это завершение других ответов. Используя хороший реализованный капчет вместе с механизмом анти-грубой силы, используя сеансы, например.

Вопросник отметил это как принятое, предполагая, что captchas не читаются машинами (она почти справа), и поэтому она получает отрицательные моменты, потому что люди считают это не полным ответом, и они правы.

Также использование хорошего реализованного CAPTCHA может быть альтернативным способом обеспечения безопасности вашего приложения от атак с использованием грубой силы. там широкий выбор провайдеров captcha доступны бесплатно, пусть попробуйте простой способ, если вы спешите. Также подумайте, что там люди из этого говорят, что “о, нет! Эта вещь капчей не достаточно безопасна, и они правы иногда!”.

Я видел творческий подход к этому однажды.

Для каждой попытки входа в систему это не работает, время блокировки увеличивается. экспоненциально.

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

Я не использовал это сам (пока), но концептуально мне очень нравится идея. Конечно, при успешном входе в систему счетчик reset.

Если пользователи могут устанавливать свои собственные пароли, некоторые бот/ребенок попытаются войти в систему со списком общих паролей и преуспеть. И если они не знают пользователей, они будут пытаться использовать общие имена, такие как admin, simon, rico и т.д.

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

Как правило, вы можете захотеть вытащить пользователя (10 минут, как вы упомянули), после трех попыток, и заблокировать их после 6 или 9 последовательных повторных попыток, заставив пользователя связаться с вами, чтобы разблокировать свою учетную запись. Это введено в действие, потому что кто-то может изменить свои скрипты, чтобы настроить таймаут.

Для моих собственных проектов я написал обобщенную библиотеку “floodcontrol”, которая обрабатывает такие вещи.

Это позволяет мне указать, сколько попыток может быть сделано за X промежуток времени. Он допускает определенное количество попыток “благодати” за короткое время, так что будет обнаружено только действительно необычное поведение.

Я записываю в базу данных несколько вещей:

    IP-адрес (или первые 24 бита)
    Действие, которое было предпринято (например, “войти в систему”, “искать”, “комментарий” )
    Время попытки
    Количество попыток (счетчик попыток)

Если человек с тем же IP-адресом приходит позже, то предыдущий счетчик попыток не будет получен, потому что он будет слишком давно.

Источник

Ограничение попыток входа пользователя в PHP

Я видел веб-приложения с ограничениями на попытки входа в систему.

Это необходимость безопасности, и если да, то почему?

8 ответов

Уточнение Это дополнение к другим ответам. Использование хорошо реализованной капчи вместе с механизмом защиты от брутфорса с использованием, например, сессий.
Спрашивающий отметил, что это принято, предполагая, что капчи не читаются машинами (она почти права), и поэтому он получает отрицательные оценки, потому что люди думают, что это неполный ответ, и они правы.

Если пользователи могут устанавливать свои собственные пароли, какой-нибудь бот / ребенок попытается войти в систему со списком общих паролей и преуспеет. И если они не знают пользователей, они попробуют использовать общие имена, такие как admin, simon, rico и т. Д.

Это не помогает просто пометить пользователя в сеансе, поскольку они могут просто удалить cookie или параметры запроса на своей стороне. Вам необходимо иметь количество неудачных попыток входа в систему как для IP-адреса, так и для имени входа. Может быть, IP будет более снисходительным, так как он может использоваться многими пользователями.

Теоретически это позволяет пользователю совершить одну-две ошибки, но как только это становится попыткой «взлома», хакер оказывается заблокированным на все более длительные периоды времени.

Я сам (пока) этим не пользовался, но концептуально идея мне очень нравится. Конечно, при успешном входе в систему счетчик сбрасывается.

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

Как правило, вы можете захотеть отключить пользователя (10 минут, как вы упомянули) после 3 попыток и заблокировать его после 6 или 9 последовательных повторных попыток, заставив пользователя связаться с вами, чтобы разблокировать свою учетную запись. Это сделано потому, что кто-то может изменить свои сценарии, чтобы настроить ваш тайм-аут.

Для своих проектов я написал обобщенную библиотеку «floodcontrol», которая справляется с подобными вещами.

Это позволяет мне указать, сколько попыток можно сделать за X промежуток времени. Это позволяет совершить определенное количество «изящных» попыток за короткое время, так что будет обнаружено только действительно необычное поведение.

Я записываю в базу данных несколько вещей:

Если человек с таким же IP-адресом зайдет позже, то предыдущий счетчик попыток не будет получен, потому что это будет слишком давно.

Сброс неудачных попыток после правильного входа в систему практически обесценивает всю систему.

Сброс должен выполняться администратором, а не просто успешно войти в систему.

Я считаю, что размещение счетчика «неудачных попыток» в БД было бы самым безопасным и простым способом. Таким образом, пользователь не сможет его обойти (отключив файлы cookie). Конечно, сброс при успешном входе в систему.

Источник

Защита PHP кода: ограничение ввода, проверка данных и экранирование отображения.

Содержание

Язык программирования PHP достаточно лёгок в изучении и использовании. Достаточно нескольких строк кода и у вас рабочее решение за короткий срок. Тем не менее, некоторые начинающие (и не только) программисты пренебрегают такими важными вещами, как ограничение ввода, проверка данных, экранирование отображения данных. Всё это приводит к плохому коду и небезопасным приложениям, а в итоге, к тяжёлым и плачевным ситуациям, таким как потеря управления паролями, данными, сайтом или даже целым сервером.

Эта статья содержит полезные советы, которые можно (и даже нужно) применять во всех проектах. Если следовать этим советам, сломать ваше приложение будет существенно сложнее, потому что оно станет более безопасным.

Для того чтобы сохранить контроль над сценарием приложения, необходимо добавить дополнительные уровни защиты к вашему коду, проверять и ограничивать доступ внешних источников.

К внешним источникам можно отнести следующие пункты:

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

Ограничение входных данных.

В разработке это означает, что вы удаляете небезопасные символы из ввода. Принципиально важно очистить входные данные, прежде чем они доберутся до хранилища (база данных, кэш).

Существует несколько типов ввода, которые необходимо учитывать при очистке. Наиболее распространенными являются HTML-формы, ввод с помощью запросов SQL и пользовательская информация.

Ввод через HTML

Представьте, что у вас есть блог, который позволяет комментировать посты, и какой-то случайный парень из Интернета, после прочтения вашего поста в блоге, решает набрать комментарий, включающий очень простой JavaScript код, что-то вроде команды window.location.href=’https://reklama.com’.

В результате каждый раз, когда кто-то (после того, как наш друг оставил свой cюрприз) нажимает на сообщение на нашей странице, он или она будет перенаправлен на определённую злоумышленником страницу.

Эта функция экранирует все символы HTML в строке и делает ее безопасной.

Проблема с htmlentities() заключается в том, что она не очень мощная, на самом деле она не экранирует одинарные кавычки, не может определить кодировку и также не проверяет HTML.

Чтобы решить эту проблему, нам нужно научиться использовать ее аргументы.

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

Вторым аргументом является константа ENT_QUOTES, которая обязывает функцию кодировать одинарные кавычки.

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

Базовый пример будет выглядеть так:

SQL-запросы

Иногда нам, как разработчикам, нужно строить запросы SQL в соответствии с тем, что шлёт нам пользователь.

Эти входные данные могут поступать из строки запроса (например:?user=1) или URI (например: user/1).

Если вы не будете осторожны с этими входными данными и разрешите их непосредственно вставить в запрос, это может привести к опасным ситуациям.

Например, подготовим строку с запросом для последующего обновления пароля:

Что не так с этим кодом?

Не забывайте совет «не доверяйте никому».

Уровень защиты этого кода очень слабый, на самом деле он вообще отсутствует.

Что произойдет, если кто-то отправит HTTP-запрос в ваш PHP-скрипт подобного вида:

Многие базы данных SQL прочитают «–» как начало комментария, что приведёт к игнорированию последующего текста.

Что вы можете сделать, чтобы решить проблему?

Используйте подготовленный интерфейс PDO.

Он был встроен в PHP и предоставляет интерфейс, позволяющий использовать несколько баз данных.

PDO обеззараживает и встраивает внешние данные в SQL-запрос безопасным способом и избегает проблем, описанных выше.

Пользовательская информация

Весьма вероятно, что ваш сайт принимает от пользователей адреса электронной почты, номера телефонов, местоположение и другие предопределённые данные.

Разработчики PHP проделали замечательную работу по предвидению этих ситуаций и предоставили нам две функции.

Эти две функции дезинфицируют входы, используя набор флагов.

Проверка данных

Проверка не является очисткой, этот шаг не удаляет неверные данные, проверка подтверждает, что информация, поступающая в ваше приложение, соответствует вашим критериям.

Существуют разные методы проверки входных данных, но основной функцией, используемой для проверки, является опять же, filter_var ().

Эта функция возвращает переменную двух разных типов в зависимости от переданной переменной.

Если проверка прошла успешно, она вернет само значение переменной, в противном случае она вернет false.

По этой причине нужно ‘! = False’, чтобы проверить результат этой функции.

Согласно функции очистки большинство (если не все) флагов начинается со строки FILTER_VALIDATE_ * и заканчивается использованием типа проверки, который мы должны использовать.

Мы можем проверить целое число, число с плавающей запятой, IP-адреса, домены, URL и так далее.

Экранирование отображения данных

Мы получили некоторые данные, мы проверили их с помощью методов, которые вы только что изучили, теперь пришло время подумать о том, как обеспечить безопасность отображения этих данных.

Чтобы избежать вывода кода, мы используем функцию PHP htmlentities.

Обратите внимание, что нет необходимости постоянно экранировать данные, достаточно экранировать их либо при получении в начале, либо в конце при отображении.

Подведем итоги:

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

Все эти меры могут показаться скучными и пустой тратой времени, но в конечном итоге выгода от их использования станет очевидной.

Источник

Ограничено количество ввода паролей

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Создать генератор паролей в котором можно указать длину пароля и количество паролей
Помогите пожалуйста! Задание: Нужно создать генератор паролей в котором можно указать длину пароля.

Ограничено количество ОЗУ
Здравствуйте, недавно приобрел вторую плашку ОЗУ Kingston KVR1333D3N9/2G, до этого стояла такая же.

Ограничено количество выводимых точек в диаграмме EXCELя
В екселе простроил диаграмму, мне нужно отобразить в ней из буфера 200 значений, но отобразить.

Количество IP-адресов от провайдера ограничено. Как его увеличить?
Имеется Windows Server 2003 и локальная сеть через сервер на 70 компьютеров в школе. Все ip-адреса.

Ну что-то типа (сразу говорю это просто пример) додумаете уже сами:

Он же сказал ему нужна капча, ему нужно при каждой не верной авторизации плюсовать сессию. И да там нужно вместо знака больше “>” больше или равно “>=”. Я лишь набросал ему пример в общих чертах.

Добавлено через 8 минут
Понятное дело что при первой не верной авторизации, нужно поставить сессию, также нужно проверять существует ли сессия, и так далее, я лишь в общих чертах набросал.

Добавлено через 8 минут
И в этом варианте капча запрашивается при следующей попытке авторизации, а не отдельно.
Тобишь когда 4 раз будет выведена форма, она уже будет с капчей.

Источник

Ограничение количества попыток ввода пароля в веб-форме авторизации при помощи Nginx или HAProxy на примере WordPress

Рассмотрим на примере WordPress способ усиления безопасности при помощи ограничения количества HTTP-запросов к форме ввода пароля. Это позволит оградить опубликованный блог от брутфорса (поиска и взлома пароля путем перебора всех теоретически возможных вариантов из определенного набора символов или подбора по словарю распространенных паролей). Данный способ, в принципе, можно использовать и для защиты других веб-приложений.

Задача может быть реализована в Nginx с помощью модуля ngx_http_limit_req_module [1], выступающем в роли фронт-энда к Apache или веб-сервера FastCGI, или же с помощью HAProxy [2, 3], выступающем в роли балансировщика нагрузки перед веб-серверами.

В обоих случаях алгоритм работы следующий. При аутентификации браузер обращается по адресу, содержащему в себе подстроку “/wp-login.php”. Необходимо отследить ее и ограничить количество запросов с одного IP не затрагивая обращения по всем остальным адресам. Параметры блокировки необходимо подобрать таким образом, чтобы не создавать неудобств обычным пользователями. Особенно внимательно следует настраивать блокировки в том случае, когда формой авторизации пользуется большое количество пользователей с одного IP-адреса.

Способ №1: Nginx

Конфигурационный файл исправлен по советам из комментариев. Спасибо VBart и J_o_k_e_R!

limit_req zone=login burst=4; устанавливает зону login и максимальный размер всплеска запросов (burst). Если скорость поступления запросов превышает описанную в зоне, то их обработка задерживается так, чтобы запросы обрабатывались с заданной скоростью. Избыточные запросы задерживаются до тех пор, пока их число не превысит максимальный размер всплеска. При превышении запрос завершается с ошибкой 503.

В секцию backend, обслуживающую наш блог, добавляем следующие строки [2]:

Источник

Leave a Reply

Your email address will not be published. Required fields are marked *