reCaptcha GET / POST
reCaptcha GET / POST
我正在通过一个小列表升级我已经完成的部分网络系统,其中之一是确保我的 Google reCaptcha 的安全性是正确的。
目前,我使用这个代码:
//reCaptcha
$Url = "https://www.google.com/recaptcha/api/siteverify";
$SecretKey = "----Secret Key----";
$Response = file_get_contents($Url."?secret=".$SecretKey."&response=".$_POST['Response']);
$Robot = json_decode($Response);
这很好用,但是 Google 的文档说你应该使用 POST 方法而不是 get 方法,显然是为了确保别人不会得到我的密钥。但是,我不确定如何执行此操作,因此将不胜感激。我知道我可能不得不使用 cURL,但是,我对此一无所知,而且我不确定如何安装它(如果需要的话)。
谢谢,汤姆。
... POST the variables to Google's reCaptcha server instead of sending them via GET.
$Response = file_get_contents($Url."?secret=".$SecretKey."&response=".$_POST['Response']);
而不是将数据嵌入URL(如上面URL中的密钥和响应)并通过GET发送,如果你想将数据发送到Google 服务器通过 HTTP POST 然后你必须使用客户端 URL 库。
引用如下:
你的服务器端 PHP 代码应该是这样的:
$Url = "https://www.google.com/recaptcha/api/siteverify";
$SecretKey = "----Secret Key----";
if(isset($_POST['Response']) && !empty($_POST['Response'])){
//get verified response data
$data = array('secret' => $secret, 'response' => $_POST['Response']);
$ch = curl_init($Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$verifyResponse = curl_exec($ch);
curl_close($ch);
$responseData = json_decode($verifyResponse);
// your code
}else{
echo "Please click on the reCAPTCHA box.";
}
这里有几点需要注意,
- 设置
CURLOPT_RETURNTRANSFER
到true
到return将curl_exec()
的return值作为字符串传输,而不是直接输出出来。
CURLOPT_SSL_VERIFYPEER
可用于验证对等方的证书。如果我们将其指定为 false
,它将接受任何服务器(对等)证书。
CURLOPT_POST
用于执行常规 HTTP POST。这种 POST 是正常的 application/x-www-form-urlencoded
类型,最常被 HTML 形式使用。
CURLOPT_POSTFIELDS
用于指定我们要随此 POST 请求提交的完整数据。 $data
数组应使用 http_build_query()
函数转换为 URL 编码的查询字符串,以便它可以作为 application/x-www-form-urlencoded
. 发送
我正在通过一个小列表升级我已经完成的部分网络系统,其中之一是确保我的 Google reCaptcha 的安全性是正确的。
目前,我使用这个代码:
//reCaptcha
$Url = "https://www.google.com/recaptcha/api/siteverify";
$SecretKey = "----Secret Key----";
$Response = file_get_contents($Url."?secret=".$SecretKey."&response=".$_POST['Response']);
$Robot = json_decode($Response);
这很好用,但是 Google 的文档说你应该使用 POST 方法而不是 get 方法,显然是为了确保别人不会得到我的密钥。但是,我不确定如何执行此操作,因此将不胜感激。我知道我可能不得不使用 cURL,但是,我对此一无所知,而且我不确定如何安装它(如果需要的话)。
谢谢,汤姆。
... POST the variables to Google's reCaptcha server instead of sending them via GET.
$Response = file_get_contents($Url."?secret=".$SecretKey."&response=".$_POST['Response']);
而不是将数据嵌入URL(如上面URL中的密钥和响应)并通过GET发送,如果你想将数据发送到Google 服务器通过 HTTP POST 然后你必须使用客户端 URL 库。
引用如下:
你的服务器端 PHP 代码应该是这样的:
$Url = "https://www.google.com/recaptcha/api/siteverify";
$SecretKey = "----Secret Key----";
if(isset($_POST['Response']) && !empty($_POST['Response'])){
//get verified response data
$data = array('secret' => $secret, 'response' => $_POST['Response']);
$ch = curl_init($Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$verifyResponse = curl_exec($ch);
curl_close($ch);
$responseData = json_decode($verifyResponse);
// your code
}else{
echo "Please click on the reCAPTCHA box.";
}
这里有几点需要注意,
- 设置
CURLOPT_RETURNTRANSFER
到true
到return将curl_exec()
的return值作为字符串传输,而不是直接输出出来。 CURLOPT_SSL_VERIFYPEER
可用于验证对等方的证书。如果我们将其指定为false
,它将接受任何服务器(对等)证书。CURLOPT_POST
用于执行常规 HTTP POST。这种 POST 是正常的application/x-www-form-urlencoded
类型,最常被 HTML 形式使用。CURLOPT_POSTFIELDS
用于指定我们要随此 POST 请求提交的完整数据。$data
数组应使用http_build_query()
函数转换为 URL 编码的查询字符串,以便它可以作为application/x-www-form-urlencoded
. 发送