@LeonidPokrovskiy

Можно ли доверять этой функции для определения IP?

Насколько надежна эта функция?

function real_ip()
{
   $ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
        foreach ($matches[0] AS $xip) {
            if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
                $ip = $xip;
                break;
            }
        }
    } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CF_CONNECTING_IP'])) {
        $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
    } elseif (isset($_SERVER['HTTP_X_REAL_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) {
        $ip = $_SERVER['HTTP_X_REAL_IP'];
    }
    return $ip;

}
echo real_ip();


У меня в системе попытки входа в аккаунт блокируются по IP - создается задержка после ряда неудачных попыток, и если неудачные попытки продолжаются, то задержка удваивается.

Функция выше как раз таки определяет IP, чтобы блокировать с этого ip попытки входа в аккаунт.

Проблема:

Может ли хакер при появлении задержки просто менять IP и продолжать попытки входа?

Если систему можно будет обдурить таким приемом, то сразу же вылезают просто невероятные дыры в безопасности:

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

Вопросы:

1. Какие есть надежные способы остановить хакера?
2.Насколько надежно защищаться от таких атак просто блокируя попытки по ip?
3. Возможно ли хакеру менять ip раз в минуту, а то и чаще?
  • Вопрос задан
  • 487 просмотров
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Даже не заходя в вопрос сразу можно догадаться, что будет внутри.

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

Функции, которая берет IP адрес... из НТТР заголовков. Из запроса. То есть, чтобы подделать айпи, не нужно даже прокси - достаточно добавить к НТТР запросу заголовок CLIENT_IP с рандомным айпишником.
Гениальное решение для защиты.

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

Вместо истерических телодвижений по защите сайта от несуществующих угроз тебе надо сделать две вещи
- избавиться от этого эталонного примера говнокода
- заняться повышением своего образовательного уровня. Для начала реализовать защиту от брутфорса без привязки к любым внешним параметрам, исключительно внутренними средствами.
Ответ написан
Комментировать
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Эту проблему решили уже кучу раз до вас. Почитайте об этом в интернете.
Количество IP - как мусора. Девать некуда и каждый себе может взять по 100 штук хоть в секунду. Сложнее наоборот, иметь один и тот же IP.

Чётко по теме:
1. Cloudflare - это умный сервис, который делает гору всего, чтобы защитить вас от всего в этом мире.
2. Примерно на 1%.
3. Да, возможно.
Ответ написан
grabbee
@grabbee
У меня в системе попытки входа в аккаунт блокируются по IP

Ну я просто блокирую вход в аккаунт после ~3-5 ошибок. На 12 часов или сутки. Войти легко, указав почту, и блокировка снимается. Безо всяких IP и вообще. Здесь важно понимать, что есть долгоживущая сессия, и люди самим "входом" пользуются 2 раза в год.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы