Почему я получаю случайную строку в качестве IP-адреса с переменной $ _SERVER PHP? - PullRequest
1 голос
/ 21 июня 2020

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

Я использую следующий код:

<?php
public static function logContent(array $content = null){
        try {

            $myFile = fopen("visitors.txt", "a");

            $txt = "IP: ";

            if (isset($_SERVER['HTTP_CLIENT_IP']))
                $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
            else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
                $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
            else if (isset($_SERVER['HTTP_X_FORWARDED']))
                $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
            else if (isset($_SERVER['HTTP_FORWARDED_FOR']))
                $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
            else if (isset($_SERVER['HTTP_FORWARDED']))
                $ipAddress = $_SERVER['HTTP_FORWARDED'];
            else if (isset($_SERVER['REMOTE_ADDR']))
                $ipAddress = $_SERVER['REMOTE_ADDR'];
            else
                $ipAddress = 'UNKNOWN';

            $txt .= $ipAddress;
            $txt .= " Time: " . date("Y-m-d h:i:s", time());
            $txt .= "\n";

            if (!empty($content) && is_array($content)) {
                foreach ($content as $k => $v) {
                    $txt .= "$k : ";
                    $txt .= $v;
                    $txt .= "\n";
                }
                $txt .= "\n";
            }

            fwrite($myFile, $txt);
            fclose($myFile);
        } catch (\Exception $e) {

        }
    }
?>

Этот код работает нормально. Обычно у меня есть такие записи, как показано ниже:

IP: 36.80.227.XX Time: 2020-06-19 08:23:52

IP: 191.252.61.XX Time: 2020-06-19 11:25:02

IP: 191.252.61.XX Time: 2020-06-19 11:25:02

Но недавно в моем журнале появилась следующая запись:

IP:} __ test | O: 21: "JDatabaseDriverMysqli ": 3: {s: 2:" f c "; O: 17:" JSimplepieFactory ": 0: {} s: 21:" \ 0 \ 0 \ 0disconnectHandlers "; a: 1: {i: 0; a: 2: {i: 0; O: 9: "SimpleP ie": 5: {s: 8: "sanitize"; O: 20: "JDatabaseDriver Mysql": 0: {} s: 8: "feed_url"; s: 56: "d ie (md5 (DIRECTORY_SEPARATOR)); JFactory :: getConfig (); exit"; s: 19: "cache_name_function"; s: 6: "assert"; s: 5: "cache"; b: 1; s: 11: "cache_class"; O: 20: "JDatabaseDriver Mysql": 0: {}} i: 1; s: 4: "init";}} s: 13: "\ 0 \ 0 \ 0connection"; b: 1;} ���� Время : 2020-06-19 11: 27: 37

Это какая-то вредоносная инъекционная атака, похожая на MySQL инъекция, используемая против Java?

Нужно ли мне искать что-нибудь подозрительное и исправлять мой Apache сервер для повышения безопасности?

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Это пахнет возможной инъекционной атакой. Вы можете обратиться к этому для более детального изучения. Хотя здесь говорится о настройке joomla и относится к 2015 году, стоит поговорить о подписи.

Возможно, я бы порекомендовал просмотреть журналы на предмет любой подозрительной активности.

1 голос
/ 21 июня 2020

Насколько мне известно, заголовки HTTP_X_FORWARDED_FOR отправляются клиентом / прокси ( wiki ), вы не делаете никаких элементов управления содержимым $ _SERVER ['HTTP_X_FORWARDED_FOR'].

Итак, да, кто-то пробовал инъекцию SQL, но в данном случае она не чувствительна (просто вывод в текстовый файл). Вы должны проверить содержимое $ ipAddress перед выводом в файл (например, с регулярным выражением или с this ).

Edit: Вы можете воспроизвести это поведение с:

  curl -H 'X-Forwarded-For: 1.1.1.1' https://www.example.com/mypage
  curl -H 'X-Forwarded-For: <SOME RANDOM INPUT>' https://www.example.com/mypage

Надеюсь на эту помощь

...