Код: Выделить всё
<?php
$ip = getenv('REMOTE_ADDR');
$blocked = "xx.xx.xx.xx"; // Replace the x's with the IP address.
if (ereg($blocked,$ip))
{
echo "You Have Been Banned";
exit();
}
?>
Код: Выделить всё
<?php
$ip = getenv('REMOTE_ADDR');
$blocked = "xx.xx.xx.xx"; // Replace the x's with the IP address.
if (ereg($blocked,$ip))
{
echo "You Have Been Banned";
exit();
}
?>
хотя и HTTP_X_FORWARDED_FOR не всегда содержит нужное значениеВ REMOTE_ADDR помещается IP-адрес клиента. При тестировании на локальной машине — этот адрес будет равен 127.0.0.1. Однако при тестировании в сети переменная вернёт IP-адрес клиента или последнего прокси-сервера через который клиент попал на сервер. Если клиент использует прокси-сервер узнать его IP-адрес можно при помощи переменной окружения HTTP_X_FORWARDED_FOR
Например phpbb2 - разве бан утроен по другому ? - про написание кода я не говорю - там ведь если по айпи динамике банишь после смены айпи можно перерегиться , а потом вдруг тебе такой айпи попадёться и тебе будет бак как бы.Distructor писал(а):Khvosticov Sergey
я разве что-то сказал про БД? )
просто указал на 2 недочета кода:
1 - создает ненужную нагрузку
2 - при бане одного пользователя забанит всех сидящих через этот прокси
в любом учебнике по регуляркам написано:Khvosticov Sergey писал(а):2.Какую нагрузку ?
да и кстати функции ereg* помечены как DEPRECATED с PHP 5.3.0, вместо них надо использовать preg* функции.Не используйте функцию preg_match(), если необходимо проверить наличие подстроки в заданной строке. Используйте для этого strpos() либо strstr(), поскольку они выполнят эту задачу гораздо быстрее.
если не рассматривать вопросы повышения взломостийкости, а только исправить приведенные выше недочеты кода, то получится примерно следующее:Khvosticov Sergey писал(а):3.Предложи свой вариант написания кода.
Код: Выделить всё
<?php
// список забаненных IP
$banned_ips = array(
'11.11.11.11',
'22.22.22.22'
);
// функция для определения IP пользователя
function getClientIp()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
if ( array_search( getClientIp(), $banned_ips ) !== false )
{
echo "You Have Been Banned";
exit();
}
?>