2017-03-01 86 views
1

我無法弄清楚爲什麼服務器的響應不允許我驗證驗證碼。我的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。但我很確定這不太可能阻止機器人......任何想法?謝謝...

編輯:我剛剛在我的網站(ZED攻擊代理,OWASP基金會的安全工具)上運行ZAP攻擊。它無法完成註冊表單(在此之前,它能夠在一分鐘內創建100個用戶!)。所以這意味着一些機器人會被阻塞。我還是希望把它做正確雖然...

+0

你可以嘗試呼應輸出:'回聲$出;' - 這給你什麼? –

+0

你好,是的,我試着用strval來回應它,但它是空的... –

+0

在解碼之前回顯輸出怎麼樣? –

回答

0

你可以嘗試把你的數據,這樣的一個數組:

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

它沒有工作。 –