Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77

Бан пользователей по IP

30.06.2010, 21:20. Показов 7189. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток
есть скрипт блокировки пользователей по IP
но там надо вписывать IP в ручную(через фтп)
в файле каждый IP должен быть с новой строки
написал форму добавления, но при добавлении IP в файл , просле IP ставится пробел и перенос на новую строку..скрипт капризный и не хочет из-за этого работать..

вот скрипт
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$ip = $_SERVER['REMOTE_ADDR']; 
$fo=fopen($file,"r");
$file=("ip.dat");
$ban = file("ip.dat"); 
$count = count($ban); 
for ($i=0; $i<$count; $i++) { 
//if($ip == $ban[$i]) { die("Доступ запрещен. $ip"); }
if (substr($ip, 0, strlen($ban[$i]))==$ban[$i]){ die("<center>Доступ запрещен</center>"); } 
} 
?>
форма добавления
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form action='' method='POST'>
<table>
 <tr>
  <td align='right'>IP пользователя:</td>
  <td><input type="text" name="ip" size="40"></td>
 </tr>
 <tr>
  <td></td><td><input type="submit" value="Забанить" name="submit"></td>
  </tr>
  <?
if ( isset($_POST['submit']))
{
$ip = $_POST['ip'];
$ban = "$ip\r\n";
$fp = fopen ("engine/modules/ip.dat","w");  // записываем IP которые надо забанить
fwrite($fp, "$ban");
fclose($fp);
}
как сделать чтоб после IP не ставился пробел и перенос на новую строку?
и еще вопрос, как с помощью пхп вывести и отредактировать содержимое?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2010, 21:20
Ответы с готовыми решениями:

Бан пользователей при переходе по ссылке без авторизации
Всем привет) Вот у меня есть код, но его нужно подредактировать так чтоб можно было выдать бан не авторизовываясь. То есть зашел по...

Бан или не бан, вот в чем вопрос
1) ИНДЕКСАЦИЯ | Есть сайт, загрузил ГС, проиндексировался в яше, за неделю из 6000 3000 стр. Гугл проиндексировал вообще еще больше чем...

Как узнать бан или не бан в яндексе?
Скажите пож-та как проверить сайт на бан в яндексе? Заранее благодарю.

18
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
30.06.2010, 21:35
Цитата Сообщение от MainRoot Посмотреть сообщение
помощью пхп вывести и отредактировать содержимое?
вот так выводится:
PHP
1
2
3
4
5
6
7
echo "<form action='edit.php' mathod='post'>";
$name=$r['name'];//с бд
$ip=$r['ip'];
echo "<input type='text' name='name' value='".$name."' /><br />";
echo "<input type='text' name='ip' value='".$ip."' /><br />";
echo "<input type='submit' value='edit'>";
echo "</form>";
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
30.06.2010, 21:53  [ТС]
Цитата Сообщение от Nazz Посмотреть сообщение
вот так выводится:
PHP
1
2
3
4
5
6
7
echo "<form action='edit.php' mathod='post'>";
$name=$r['name'];//с бд
$ip=$r['ip'];
echo "<input type='text' name='name' value='".$name."' /><br />";
echo "<input type='text' name='ip' value='".$ip."' /><br />";
echo "<input type='submit' value='edit'>";
echo "</form>";
скрипт не использует базу данных, все ip хранятся в файле ip.dat
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
30.06.2010, 21:55
так, просто достаньте данные с файла, и всё))
1
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
30.06.2010, 21:57
Измени строку
PHP
1
if (substr($ip, 0, strlen($ban[$i]))==$ban[$i]){ die("<center>Доступ запрещен</center>"); }
на
PHP
1
if ($ip==trim($ban[$i])) die("<center>Доступ запрещен</center>");
Кстати, тег <center> устаревший и использовать его нежелательно. Лучше заменить его на
PHP
1
..... die('<div style="text-align: center;">Доступ запрещен</div>');
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
30.06.2010, 22:07  [ТС]
Цитата Сообщение от Humanoid Посмотреть сообщение
if ($ip==trim($ban[$i])) die("<center>Доступ запрещен</center>");
а что от этого изменится?
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
30.06.2010, 22:25
Функция trim() уберёт из начала и из конца все пробелы, табуляции и переносы строк. Но проверка будет только на точное совпадение IP адреса, а раньше он проверял ещё и начало... например, если в списке было
Code
1
2
123.123.123
234.234.234.2
...то заблокировались бы номера и 123.123.123.9 и 234.234.234.222... в общем, всё, что начинается на номер из списка. Лично я считаю, что это не совсем корректно. Да и вообще банить целые диапазоны - это не правильно.
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
01.07.2010, 01:02  [ТС]
Цитата Сообщение от Humanoid Посмотреть сообщение
Функция trim() уберёт из начала и из конца все пробелы, табуляции и переносы строк. Но проверка будет только на точное совпадение IP адреса, а раньше он проверял ещё и начало... например, если в списке было
Code
1
2
123.123.123
234.234.234.2
...то заблокировались бы номера и 123.123.123.9 и 234.234.234.222... в общем, всё, что начинается на номер из списка. Лично я считаю, что это не совсем корректно. Да и вообще банить целые диапазоны - это не правильно.
благодарю)

Добавлено через 59 минут
Цитата Сообщение от MainRoot Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
if ( isset($_POST['submit']))
{
    $ip = $_POST['ip'];
    $ban = "$ip\r\n";
    $fp = fopen ("engine/modules/ip.dat","w"); // записываем IP которые надо забанить
    fwrite($fp, "$ban");
    fclose($fp);
}
этот метод записи стирает имеющуюся информацию и записывает новую, как это исправить?
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
01.07.2010, 11:07
попробуйте сначала открыть файл и считать с него данные, которые там уже есть, а потом записать и старые данные и новые...
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
01.07.2010, 11:14
Для редактирования я бы сделал так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if (isset($_POST['banadd'])) // если есть что добавить
{
  $f = fopen('ip.dat','a'); // открываем файл на добавление
  fwrite($f,trim($_POST['banadd'])."\r\n"); // записываем строку с добавлением вконец перевода строки
  fclose($f); // закрываем файл
}
 
if (isset($_POST['banip'])) // если есть что удалить
{
  $nom = (int)$_POST['banip'];
  $list = file('ip.dat');  // получаем массив строк из файла
  unset($list[$nom]);  // убираем элемент массива, который нужно удалить
  file_put_contents('ip.dat',implode('',$list)); // сохраняем этот массив, предварительно объединив его в строку
}
 
$list = file("ip.dat"); // получаем массив строк из файла
echo '<form action="" method="post"><div>'; // первая форма для удаления
echo '<select name="banip">';
foreach($list as $k => $v) // перебираем все элементы массива
{
  $v = htmlspecialchars($v,ENT_QUOTES); // в целях безопасности и что бы не портить текст, переводим спец.символы в html сущности
  echo '<option value="'.$k.'">'.$v.'</option>'; // выводим очередной элемент в списке
}
echo '</select></div></form><br />';
echo '<form action="" method="post"><div>'; // вторая форма для добавления
echo '<input type="text" name="banadd" /> <input type="submit" value="Добавить" />'; // текстовое поле и кнопка
echo '</div></form>';
1
 Аватар для Bomboos
15 / 15 / 3
Регистрация: 04.10.2009
Сообщений: 219
04.07.2010, 13:24
Блин.... После ответов
Humanoid, темы можно закрывать.... Людям не даёт шансовмолодцом...
0
04.07.2010, 14:53

Не по теме:

Bomboos, зато есть с кого пример брать и темы на этом форуме не закрываются после ответа.

0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
06.07.2010, 21:11  [ТС]
Humanoid,
дельные советы даешь)
спасибо
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
07.03.2017, 01:20
Humanoid, Апп поднял ваш скрипт и тут вопрос как сделать чтоб повторно ип в файл не записывался тобишь не дублировался? И вот еще что если в поле нет ничего и обновить страницу в файл записывается новая пустая строчка
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
07.03.2017, 10:52
SARCASM74, это
PHP
1
2
3
4
5
6
if (isset($_POST['banadd'])) // если есть что добавить
{
  $f = fopen('ip.dat','a'); // открываем файл на добавление
  fwrite($f,trim($_POST['banadd'])."\r\n"); // записываем строку с добавлением вконец перевода строки
  fclose($f); // закрываем файл
}
замените на
PHP
1
2
3
4
5
6
7
8
9
10
11
if (!empty($_POST['banadd'])) // если есть что добавить
{
    $banadd = filter_var(trim($_POST['banadd']), FILTER_VALIDATE_IP);
    if ($banadd !== false) {
        $list = file('ip.dat', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        if (!in_array($banadd, $list) {
             array_push($list, $banadd);
             file_put_contents('ip.dat', implode(PHP_EOL, $list);
        }
    }
}
Добавлено через 6 минут
Но лучше всего создать под эти нужды базу данных.
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
07.03.2017, 21:25
Kerry_Jr, Извиняюсь а это под какую версию php?
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
08.03.2017, 00:13
SARCASM74, судя по документации, filter_var() появилась начиная с версии 5.2.0. Остальные функции древние и присутствовали ещё в 4 версии.
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
10.03.2017, 18:23
Humanoid, Спасибо большое работает)

Извиняюсь за наглость есть еще пара вопросов.

Как сделать в этому участке кода

PHP
1
2
3
4
5
6
7
8
echo '<form action="" method="post"><div>'; // первая форма для удаления
echo '<select name="banip">';
foreach($list as $k => $v) // перебираем все элементы массива
{
  $v = htmlspecialchars($v,ENT_QUOTES); // в целях безопасности и что бы не портить текст, переводим спец.символы в html сущности
  echo '<option value="'.$k.'">'.$v.'</option>'; // выводим очередной элемент в списке
}
echo '</select></div></form><br />';
вывод логин из бд нужному айпи?
Чтоб в селекторе выбора был еще и ник возле айпи
т.е. так

Иванов - 1.1.1.1.1

В Бд есть поле айпи и логин.

И второй вопрос по этому участку.
PHP
1
2
3
4
5
6
7
if (isset($_POST['banip'])) // если есть что удалить
{
  $nom = (int)$_POST['banip'];
  $list = file('ip.dat');  // получаем массив строк из файла
  unset($list[$nom]);  // убираем элемент массива, который нужно удалить
  file_put_contents('ip.dat',implode('',$list)); // сохраняем этот массив, предварительно объединив его в строку
}
Как все же удалять кнопкой чтоб не лесть постоянно в файлик?

Сильно не пинайте я новичок в php Заранее большое спасибо)
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
14.03.2017, 21:08
Поможет кто нить? HELP HELP ME
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2017, 21:08
Помогаю со студенческими работами здесь

Бан или не бан? вот в чём вопрос
Сегодня заметил что в индексе яши осталась только морда но прикол не в том при проверке в сапе индексации страниц часть страниц оказывается...

А все таки бан или не бан...
b-( Уважаемые коллеги, пожалста подскажите, вот такой отрывок кода опасен ли? На странице находится как заголовок сайта. &lt;h1...

Связать группы пользователей из мастер защиты на уровне пользователей с должностями пользователей в БД
Интересный вопрос и интересно как его решить. Изначально условия следующие: один компьютер, один рабочий стол, одна база...

Бан или не бан
Подскажите. Как проверить сайт в бане или нет.

бан или не бан?
Помогите пож-ста разобраться. САйт mnebiokna.ru. Было в индексе весь сайт. Причем как с www так и без. Основным считал без www. Сегодня без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru