2017-03-01 5 views
1

サーバのレスポンスでrecaptchaを検証できない理由がわかりません。私のPHPコードは:PHPフォームでreCAPTCHAを検証できません

$captcha = $_POST['g-recaptcha-response']; 
$secret = "my key"; 
$postdata = "secret=".$secret."&response=".$captcha; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$server_output = curl_exec($ch); 
$out = json_decode($server_output); 
curl_close($ch); 
if($out->success == true){/*make stuff*/} /* when the user clicks, $out->success is not true! */ 

私のHTMLフォームはかなり普通です。

<form method="POST" id="form"> 
<!-- inputs --> 
    <div class="g-recaptcha" data-sitekey="my key" style="margin:10px"></div> 
    <input type="submit" name="submit" value="Valider"> 
</form> 

私は問題が本当に愚かでなければならないことを知っています。私は$out->success==trueかどうかをチェックする代わりに、strlen($captcha) > 1をチェックするという回避策を見つけました。しかし、私はそれがロボットをブロックする可能性はあまりないと確信しています...どんな考えですか?ありがとう...

EDIT:私は自分のWebサイト(ZW攻撃プロキシ、OWASP財団のセキュリティツール)でZAP攻撃を実行しました。サインアップフォームを完成させることができません(その前に、1分以内に100人のユーザーを作成できました!)。つまり、これは、いくつかのロボットがブロックされることを意味します。私はまだ

+0

あなたは、出力エコーしようとすることができます: '$をエコー;'を - これはあなたに何を与えるのですか? –

+0

こんにちは、はい、私はstrvalと、それをエコーし​​ようとしましたが、それは空です... –

+0

どのようにそれを復号化する前に出力をエコー? –

答えて

0

は、あなたがそのような配列としてデータを送信しようとすることができます...それはしかし適切に行わ取得したい:

$postdata = array(
    'secret' => $secret, 
    'response' => $captcha 
); 
+0

動作しませんでした。 –

関連する問題