PHP

Как написать лучше этого:

$banip = array('127.0.0.1','127.0.0.2','?27.0.0.3');

$ip = $_SERVER['REMOTE_ADDR'];

for($i=0;$i<3;$i++){

if($ip == $banip[$i]) {
echo "You are currently banned from this website, sorry!";
exit();
} else {
echo "no match";
}
}
$ip=$_SERVER[REMOTE_ADDR];
$query1=mysql_query("SELECT * FROM `table` WHERE `ip`='$ip'");
$acuery1=mysql_fetch_array($query1);
if($acuery1[любое поле]! =NULL) echo 'Banned';
else 'no match';
--------
БД сэкономит тебе около 1 секунды обработки если будет много записей. SELECT выполняется 0.0006с, при 500 записях в мускуле. Прикинь 500 проходов цикла. Я думаю там в тысячи раз дольше время будет
АО
Анатолий Овсянников
3 515
Лучший ответ
Олег Маркитан а "foreach" не нужно
Такого рода информацию надо хранить не к текстовых файлах, а в базах данных, например mysql. А вообще хештаблицы неплохо помогают в таких случаях. Без всяких циклов и за константное время. Да даже в обычном отсортированном массиве искать уже не n времени, а намного меньше log(n)
Илья Шарапов
Илья Шарапов
76 400
Олег Маркитан скрипта я вашего не видела
так у моего скрипта если я его воткну в index
приоритет выполнения будет выше других для бана или нет???
сервер - Apache
Я бы бан по IP делал на уровне файервола.
Олег Маркитан сервер чужой
я без админки
$ips = array(
'127.0.0.1',
'95.150.45.24',
'120.45.21.48'
);
$client_ip = $_SERVER['REMOTE_ADDR'];

If ( in_array($client_ip, $ips) )
die (''restricted access);
echo "welcome!";
Посетителей сайта лучше вообще никак не банить.
Если сайт уже раскручен и популярен, как те же ответы, то можно и поиздеваться над посетителями.
Для нового сайта, где пока и так посетителей мало, модерация - это смерть. Да и неужели без нее нечего пилить на сайте?
Олег Маркитан что прописать в чужой index.php чтобы apache банил определенные ip
$ips = array(
'127.0.0.1',
'95.150.45.24',
'120.45.21.48'
);
$client_ip = $_SERVER['REMOTE_ADDR'];

echo in_array($client_ip, $ips) ? 'You banned' : 'Welcome';
Иван Дзюба // dont trust REMOTE_ADDR
$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
$ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}
А если атакующий пользуется elite anonymous proxy. Из-под выходит тор? У него ip динамический. Не проще Cloudflare подключить или другие фильтрующие сети и прикрыть серверу задницу нормально? А не светить IP сервера. Забаните по IP - будут флудить под новыми адресами. Ну что как дети, елки палки
Александр Чеботарь И потом... Ну есть же iptables. Отправляйте IP в базу и потом через планировщик запускайте таск для изменения правил в фаерволле.
С помощью API для вашей фильтрующей сети IP можно на блокировку поставить, если такая возможность предоставляется. Или с реддита берите пример - делайте скрытый бан. Забавная штука. Пусть пользователь пишет сообщения, но никто их не видит. "Скрытый бан плох тем, что о нем вам никто не расскажет. Вы будете видеть свои посты, свои оценки, но вот ваши посты видеть никто не будет. Печаль. " )

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