ограничение пользователей по ip и количеству попыток входа в php - PullRequest
0 голосов
/ 19 октября 2011

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

Ответы [ 5 ]

2 голосов
/ 19 октября 2011

Всегда делайте такие вещи из PHP - Javascript на стороне клиента и им легко манипулировать (полное отключение Javascript поможет обойти что-то подобное). Кроме того, Javascript не знает ваш IP.

Вы можете получить IP-адрес клиента в PHP от $_SERVER['REMOTE_ADDR']. Для отслеживания этого вам понадобится база данных. Поэтому, когда происходит неудачный вход, зарегистрируйте его в таблице. Что-то вроде INSERT INTO failed_logins (user, ip) VALUES ('$username','{$_SERVER['REMOTE_ADDR']}'). Затем проверьте, сколько раз вход в систему не удался, например, SELECT count(*) as attempts FROM failed_logins WHERE ip = '{$_SERVER['REMOTE_ADDR']}' - если attempts>> = ваш лимит, INSERT INTO banned_ips (ip) VALUES ('{$_SERVER['REMOTE_ADDR']}').

И чтобы проверить, забанен ли клиент, в начале обработки каждый запрос выполняет что-то вроде SELECT * FROM banned_ips WHERE ip = '{$_SERVER['REMOTE_ADDR']}' - если в таблице есть строка с этим IP, обработайте запрос как заблокированный.

1 голос
/ 19 октября 2011

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

Глобальные переменные не выживают при вызове одной страницы.Сеанс возможен, но злоумышленник также может его остановить.

Сохраните IP-адрес с отметкой времени и счетчиком неудачных попыток в вашей базе данных.Всякий раз, когда кто-то пытается войти в систему, потяните счетчик для этого IP-адреса в сочетании с current time - time in which you want to limit tries.Если вы найдете запись, проверьте, было ли слишком много попыток и запретите вход.Если нет, проверьте учетные данные - если пользователь подтвержден, сбросьте счетчик, если нет, увеличьте на единицу и обновите таймер до текущего времени.

1 голос
/ 19 октября 2011

JS здесь не имеет ничего общего.
, а также глобальные переменные и, особенно, сессии.

Как сохранить данные между одним и тем же запросом страницы формы

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

как я могу забанить людей по их ip?

проверить их IP и затем делать то, что вы имеете в виду под "ban"?*

0 голосов
/ 19 октября 2011

Сделайте это с помощью PHP.

Do MySQL таблица attemptLog

+------+------+------+
|  id  |  ip  | date |
+------+------+------+

Каждый раз при попытке входа в систему вы добавляете IP-адрес к attemptLog. Для входа необходимо указать правильное имя пользователя и пароль (ofc) И не более 10 попыток входа в систему за последние 24 часа.

Для этого вы можете запустить SELECT count(ip) AS loginAttempts FROM attemptLog WHERE ip = $_SERVER['REMOTE_ADDR'] AND date < $today - 24h, а затем проверить, является ли loginAttempts больше 10.

Беннинг

Чтобы забанить пользователя, вы можете сохранить его IP и проверить, установлен ли он, если он установлен, показать «Вы забанены», в противном случае показать обычную страницу.

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