Захват IP-адреса с участием Ajax - PullRequest
0 голосов
/ 08 января 2019

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

Все, что мне нужно сделать, это создать переменную в моем PHP-файле следующим образом: $ip = $_SERVER["REMOTE_ADDR"];

Затем добавить его в мой оператор PDO для вставки в БД?

Я читал, что многие также рекомендуют проверять $_SERVER["HTTP_X_FORWARDED_FOR"]. Как я могу проверить оба и назначить их одной переменной?

Я делаю это правильно?

AJAX

$('.downloadButton').on('click', function (event) {
    $.ajax({
        url: 'downloadCatalogSend.php',
        type: 'POST',
        data: {
            catalog_name: catalog_name,
            button_triggered: button_triggered
        }
    });
});

PHP

$ip = $_SERVER["REMOTE_ADDR"];
try {
    $con = getConfig('pdo');
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $catalog_download_insert = "INSERT INTO catalog_download_now
                (catalog_name, button_triggered, date_sent, $ip)
                VALUES(?, ?, NOW(), ?)
            ";
    $catalog_download_stmt = $con->prepare($catalog_download_insert);
    $catalog_download_stmt->execute(array($catalog_name, $button_triggered, $ip));

    $hasError = false;

    echo $hasError;
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

1 Ответ

0 голосов
/ 08 января 2019

Используйте оператор объединения нулей:

$ip = $_SERVER["HTTP_X_FORWARDED_FOR"] ?? $_SERVER["REMOTE_ADDR"];

При этом предпочтение будет отдано HTTP_X_FORWARDED_FOR (IP-адрес клиента, если запрос поступил от прокси-сервера), если он задан, иначе возвращается к REMOTE_ADDR (фактический IP-адрес, с которого поступил запрос.)

Предупреждение: HTTP_X_FORWARDED_FOR может быть легко подделан клиентом.

Также обратите внимание, у вас есть это:

$catalog_download_insert = "INSERT INTO catalog_download_now
            (catalog_name, button_triggered, date_sent, $ip)
            VALUES(?, ?, NOW(), ?)
        ";

Удалите этот знак доллара из $ip - это должно быть имя поля, а не значение, которое вы пытаетесь сохранить в нем.

...