Бан на некоторое время на PHP

Тема в разделе "PHP", создана пользователем BuzzDD, 13 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. BuzzDD

    BuzzDD Постоялец

    Регистр.:
    9 фев 2009
    Сообщения:
    76
    Симпатии:
    5
    Ребята, как можно реализовать бан по IP на определённое время и после определённых попыток?
    Например, есть URL, но при вводе неправильного адреса странички( попытка взлома,просто ошибся чел и т.д.), нужно чтобы после 2-3 раз его забанило на 5 часов примерно.
    Подскажите хоть функции некоторые и алгоритм, хочется самому понять как делается задержка по времени,а не скачать|"содрать" готовый скрипт и смотреть на него:)
     
  2. VictorVi

    VictorVi Прохожие

    При каждой попытке авторизации вешаешь куку или заводишь новую сессию. Сесси/куки вместе с IP хранишь в базе (там же хранишь дополнительне параметры: число попыток авторизации и пр). При мягком режиме бана - банишь по сессии или по кукам. При жетском бане - бань по IP.
     
  3. BuzzDD

    BuzzDD Постоялец

    Регистр.:
    9 фев 2009
    Сообщения:
    76
    Симпатии:
    5
    Сессия и куки мне не нужны, хотелось бы понять как чисто по IP блокировать (автоматически) чела за неправильный ввод URL-адреса после второй попытки.
     
  4. VictorVi

    VictorVi Прохожие

    C IP все тоже самое. Пишешь в базу айпи и доп данные. Потом при выдаче данных проверяешь чела по IP.

    P.S. Или я что-то не так понимаю?
     
  5. alica

    alica

    Регистр.:
    28 июл 2008
    Сообщения:
    243
    Симпатии:
    76
    Ну да так и делается, в данном случаи реализовать можно это так:

    При не правильном вводе урла, записываем сессию в БД и ищем на схожесть... если есть, то прописываем бан путем записи ип в БД... и делаем проверку на бан по ип при выводе страницы...
     
  6. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    зачем так все усложнять, прикаждой неудачной попытке авторизации счетчик попыток в куках перещелкиваем на +1 при достижении отметки 5, делаем запись в куки со временем блокировки и выводим сообщение:

    Код:
    echo "Ваш акк заблокирован на 20 минут";
    
    
    
    
    
    Потом сравниваем время в куках с текущим временем (текущее - время в куках > 20 пускаем на сайт)
     
    BuzzDD нравится это.
  7. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    Могу предложить такую схему.

    1) В htaccess прописывается

    Код:
    ErrorDocument 401 /ban.php
    ErrorDocument 403 /ban.php
    ErrorDocument 404 /ban.php
    ErrorDocument 500 /ban.php
    
    В результате на скрипт ban.php перенаправляются запросы в случае следующих ошибок:

    401 ошибка — Запрос требует аутентификации пользователя (Unautorized).
    403 ошибка — Доступ к запрашиваемому ресурсу запрещён (Forbidden).
    404 ошибка — Запрашиваемый документ на сервере отсутствует (Not Found).
    500 ошибка — Ошибка конфигурации сервера или внешней программы (Internal Server Error).

    2) в htaccess создаем секцию

    Код:
    <Directory>
    order allow, deny
    allow from all
    #marker
    deny from 13.13.13.13
    </Directory>[CODE]
    
    с помощью этой секции и будет производиться бан путем автоматического добавления новых ip (для вставки в нужном месте строки [I]deny from ...[/I] поставлена уникальная фраза #marker).
    
    3) в файле ban.php реализуем следующий алгоритм:
    
    - определяем ip заблудившегося
    - ищем ip в htaccess. Если там его еще нет, то добавляем строку
    ###deny from 14.14.14.14
    диезы поставлены специально, ведь с первого раза не баним.
    Если ip уже есть, то убираем один диез:
    ##deny from 14.14.14.14
    Когда все диезы будут удалены, апач запретит посещать сайт с этого ip.
    
    4) Необходимо периодически, например, раз в час, вычищать ip из htaccess. Для этого у строки необходимо заранее ставить метку време, чтобы знать, что пора эту строку удалять.
    
    P.S. Входящие соединения все равно будут отрабатываться. Если паразитный трафик достаточно велик, то лучше организовать бан через firewall.
    
    P.P.S. Предложенный вариант не может рассматриваться как защита от ddos-атак.
     
  8. BuzzDD

    BuzzDD Постоялец

    Регистр.:
    9 фев 2009
    Сообщения:
    76
    Симпатии:
    5
    Как банить по IP и по кукам разобрался, всё легко делается,но лучше поставлю редирект на главную страницу сайта,а то эти " хакеры " начнут издеваться над URL чаще,чем положено:)
    jik, с htaccess не знал такого, но тоже возможно попробую.

    PHP:
    if(isset($ban) and $ban >=2)
    {
    exit(
    "<p style='color:red; text-align:center;font-size:30px;'>Заблокирован!</p>");
    }
    А в проверке:
    PHP:
    if (!preg_match("|^[\d]+$|"$c)) {
    @
    $ban++;
    setcookie("ban",$ban,time()+3600);
    header("location: index.php");
    }
     
  9. alica

    alica

    Регистр.:
    28 июл 2008
    Сообщения:
    243
    Симпатии:
    76
    А если они куки постоянно будут чистить то и бана не будет....
     
  10. VictorVi

    VictorVi Прохожие

    Поэтому я обычно делаю 20 попыток на IP и 5 попыток на сессию или куку. Притом первая проверка работает независимо от второй.
     
Статус темы:
Закрыта.