php блокирует посетителей на основе текстового списка ips - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь написать ПРОСТОЙ общий блок 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();
}
?>

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Первоначальной целью было написание небольшого фрагмента кода 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,randomjerk@spammer.net
31.130.4.240,scamtown.com,spameister@viagraads.com

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

0 голосов
/ 07 июня 2018

Вы можете создать массив запрещенных IP-адресов из файла (вы просто перезаписываете последний в своем коде, используйте $bannedip[], чтобы добавить его в список), а затем используйте in_array()* 1004.* чтобы проверить 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);

Обновление 2: Поскольку вы, похоже, сами разобрались в этом, но опубликовали образец имеющегося у вас формата файла, подумал, что я добавлю, как это можно сделать...

$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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...