2016-12-13 13 views
2

私はすでに完了しているWebシステムの部分を更新していますが、そのうちの1つはGoogleのreCaptchaのセキュリティが正しいことを保証することです。reCaptcha GET/POST

現在、私はこのコードを使用:

//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メソッドを使用する代わりに取得する必要言います。しかし、これをどうやって行うのかは分かりませんので、いくつかの指針に感謝します。私はおそらくcURLを使用する必要があると理解していますが、私はそれについて知識がなく、インストールする方法がわかりません(必要な場合)。

ありがとう、トム。

+0

あなたの質問は正確ですか? * ....私はこれを行う方法がわからない*、何をする? –

+0

変数をGoogleのreCaptchaサーバーにGET経由で送信するのではなく、POSTする。 –

+0

しかし、 '$ _GET'を使って変数を送ることはありません。常に$ _POSTを使って変数を送ります。こちらのドキュメント、[https://developers.google.com/recaptcha/docs/verify](https://developers.google.com/recaptcha/docs/verify)をご覧ください。ちなみに、 '$ _POST ['Response']'は間違っています。$ _POST ['g-recaptcha-response'] 'でなければなりません。 –

答えて

3

...変数をGoogleのreCaptchaサーバーにGET経由で送信する代わりにPOSTします。代わりに、(秘密鍵と上記URLで応答のような)URLにデータを埋め込むと、あなたはその後、HTTP POSTを経由して、Googleのサーバーにデータを送信する場合は、GET経由で送信する

$Response = file_get_contents($Url."?secret=".$SecretKey."&response=".$_POST['Response']); 

クライアントの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_RETURNTRANSFERtrueには、直接出力するのではなく、戻り値curl_exec()の文字列として転送を返すように設定します。
  • 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として送信される必要があります。
+0

$ secretの配列と$ secretkeyの変数の不一致 – Asuquo12