【问题标题】:Capturing an IP Address with Ajax involved使用 Ajax 捕获 IP 地址
【发布时间】:2019-06-03 11:19:20
【问题描述】:

我有一个按钮,当按下该按钮时,用户可以查看目录。我目前没有从用户那里收集任何信息。我只收集他们下载的目录。我想更改它以收集他们的 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();
}

【问题讨论】:

    标签: javascript php ajax pdo ip


    【解决方案1】:

    使用空合并运算符:

    $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 中删除那个美元符号——这应该是字段名称,而不是您要存储在其中的值。

    【讨论】:

    • 完美!感谢您的帮助,它完美运行。顺便说一句 - 感谢您看到我的错字。
    • 另外,X-Forwarded-Forwarded-For: 已被弃用,取而代之的是 Forwarded:
    • @Sammitch 你是说我应该把Fordwarded-For 改成$_SERVER["HTTP_X_FORWARDED"] 吗?
    • 此时您可能必须同时检查两者,并且Forwarded: 标头具有完全不同的格式。但老实说,除非您有特定的理由,否则您根本不应该费心查看代理标头。正如 Alex 所指出的,它们非常容易被欺骗,并且只有在您明确信任设置它们的代理时才应该使用它们。例如:您的 CDN
    • @Sammitch 感谢您的信息!
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多