Я пытаюсь написать ПРОСТОЙ общий блок PHP-кода, который будет читать текстовый файл для заполнения массива IP-адресов, а затем использовать этот массив для сравнения IP-адресов посетителей, чтобы определить, должен ли он завершить отображение страницы, блокирование эта страница или сайт. Этот код также сбрасывает строку журнала в файл 403, а затем отправляет проигравшему (пользователю) его просмотреть, заканчивая посещение сайта. строка добавляет их информацию в конец открытого файла 403.
Включение может быть помещено в любое место, где вы не хотите видеть этот список IP-адресов. Проблема в том, что я безнадежный хакер, и не очень разбираюсь в этих циклах и синтаксисе. Вы можете помочь мне разобраться с этим? кажется, что список IP прочитан нормально, но тогда цикл while кажется неправильным. Я мог бы значительно упростить это. но я не уверен, в чем проблема .. Мой выбор имен переменных … возможно.
<?
$IP = $_SERVER['REMOTE_ADDR'];
$link_file = "bannedips.dat";
$lines = file($link_file);
foreach($lines as $line){
if(!empty($line)){
$line_array = explode(',', $line);
$bannedip = trim(trim(strip_tags($line_array[0]), "\x00..\x1F"));
}
}
while $bannedip if ((substr($IP,0,10) == $bannedip) {
$line = date('Y-m-d H:i:s') . " - <b>$IP</b><br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
?>
Вы можете создать массив запрещенных IP-адресов из файла (вы просто перезаписываете последний в своем коде, используйте $bannedip[]
добавить его в список), а затем использовать in_array()
проверить IP пользователей по этому списку …
$link_file = "bannedips.dat";
$lines = file($link_file);
$bannedip = []; // Create start array
foreach($lines as $line){
if(!empty($line)){
$line_array = explode(',', $line);
$bannedip[] = trim(trim(strip_tags($line_array[0]), "\x00..\x1F"));
}
}
if(in_array($IP, $bannedip )) {
$line = date('Y-m-d H:i:s') . " - <b>$IP</b><br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
Может быть более аккуратный способ работы с входным файлом, но, не зная формата, сложно сказать, поэтому я оставил ваш код таким, какой он был.
Обновить:
Если вы заблокировали IP-файл, это просто список IP-адресов, вы можете заменить загрузку и foreach
с…
$bannedip = file($link_file, FILE_IGNORE_NEW_LINES);
$bannedip = array_filter($bannedip);
Update2:
Кажется, вы сами разобрались в этом, но опубликовали образец имеющегося у вас формата файла, подумал, что я добавлю, как это можно сделать …
$IP= "31.130.4.241";
$link_file = "bannedips.dat";
$bannedip = file($link_file, FILE_IGNORE_NEW_LINES);
$bannedip = array_map("str_getcsv", $bannedip);
$bannedip = array_column($bannedip, null, 0);
if(isset($bannedip[$IP])) {
$line = date('Y-m-d H:i:s') . " - <b>{$bannedip[$IP][0]}</b> - {$bannedip[$IP][1]} - {$bannedip[$IP][2]}<br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
Первоначальная цель состояла в том, чтобы написать небольшой фрагмент кода INCLUDE, который будет анализировать текстовый файл, находить соответствующий IP-адрес, регистрировать информацию и сбрасывать спам-рывок на страницу 403. таким образом, пользователь-нарушитель МОЖЕТ посетить любую страницу, кроме тех, которые содержат этот фрагмент скрипта. Очень избирательная блокировка.
Вот мой окончательный код:
<?
$IP = $_SERVER['REMOTE_ADDR'];
echo $IP;
$link_file = "bannedips.dat";
$lines = file($link_file);
foreach($lines as $line){
if(!empty($line)){
$line_array = explode(',', $line);
$inputip = trim(trim(strip_tags($line_array[0]), "\x00..\x1F"));
$website = trim(trim(strip_tags($line_array[1]), "\x00..\x1F"));
$email = trim(trim(strip_tags($line_array[2]), "\x00..\x1F"));
if($IP == $inputip) {
$line = date('Y-m-d H:i:s') . " - <b>$inputip</b> - $website - $email<br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
}
}
?>
Формат файла данных выглядит следующим образом:
23.105.159.238,penilengorgement.com,[email protected]
31.130.4.240,scamtown.com,[email protected]
Итак, теперь, когда я запрещаю IP-адреса (спамеры), он извлекает их информацию из моего блога и помещает ее в файл ссылок, где она может быть проанализирована и использована для регистрации повторных нарушителей и предложения им альтернативы попыткам попасть на мой сайт, предлагая им список своих сверстников.