You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP配置Google reCAPTCHA v2联系表单:REMOTE_ADDR参数疑问

关于Google reCAPTCHA v2中REMOTE_ADDR参数的说明

嘿,别慌!我来帮你搞清楚这个REMOTE_ADDR到底该怎么用。

首先明确一点:你不需要手动填写任何固定IP地址!REMOTE_ADDR是PHP自带的超全局变量$_SERVER里的一个字段,它自动存储的是当前提交表单的用户的IP地址——这正是reCAPTCHA API要求你传的内容。

为什么要传这个参数?

Google的reCAPTCHA用这个IP来做反作弊验证:它会核对提交验证码的请求IP,和用户实际访问你网站的IP是否一致,防止有人用脚本批量恶意提交表单。

关于公司多IP的疑问

你完全不用纠结公司的多个IP,因为这个参数和服务器IP无关,它取的是发起请求的用户端IP。不管你的服务器有多少个对外IP,用户从哪个IP访问过来,REMOTE_ADDR都会自动获取到那个用户的IP值。

特殊情况:服务器在反向代理后面

如果你的网站部署在反向代理(比如Nginx、Cloudflare这类服务)后面,$_SERVER['REMOTE_ADDR']可能会拿到代理服务器的IP,而不是真实用户的IP。这时候可以尝试用$_SERVER['HTTP_X_FORWARDED_FOR']或者$_SERVER['HTTP_CLIENT_IP']来获取真实用户IP,但要注意:这些HTTP头可能被伪造,所以如果用的话最好做一下合法性校验。

示例代码

给你一个简单的调用示例,直接用$_SERVER['REMOTE_ADDR']就好:

// 验证reCAPTCHA的请求
$secretKey = "你的reCAPTCHA密钥";
$responseToken = $_POST['g-recaptcha-response'];
$userIp = $_SERVER['REMOTE_ADDR'];

$verifyUrl = "https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$responseToken}&remoteip={$userIp}";
$verifyResult = json_decode(file_get_contents($verifyUrl), true);

// 检查验证结果
if ($verifyResult['success']) {
    // 验证码验证通过,处理表单提交
} else {
    // 验证失败,提示用户
}

内容的提问来源于stack exchange,提问作者KateG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:19:52