Насколько надежна эта функция?
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 раз в минуту, а то и чаще?