2017-08-06 31 views
0

我有一些麻烦与cURL和谷歌reCaptcha2,以避免“机器人”&“垃圾邮件”自动注册。PHP cURL谷歌reCaptcha2头注入

所以我选择了google的reCaptcha2来检查WWW网站上的用户。

问题:

检查代码后,我发现有一个 Header Injection in 'curl_setopt_array' via '$curlConfig'

阻断PHP配置由于PHP File getContent我了Serverside验证码使用卷曲。

我的验证码代码:

if (isset($_POST['g-recaptcha-response'])) { 
$captcha = $_POST['g-recaptcha-response']; 
$privatekey = '######### Priv Key ###############'; 
$url = 'https://www.google.com/recaptcha/api/siteverify'; 
$data = array(
    'secret' => $privatekey, 
    'response' => $captcha, 
    'remoteip' => $_SERVER['REMOTE_ADDR'] 
); 



$curlConfig = array(
    CURLOPT_URL => $url, 
    CURLOPT_POST => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_POSTFIELDS => $data 
); 

$ch = curl_init(); 
curl_setopt_array($ch, $curlConfig); 
$response = curl_exec($ch); 
curl_close($ch);} 

所以,作为结果,我们从解码JSON字符串回数据:

$jsonResponse = json_decode($response); 
if ($jsonResponse->success == "true") { Good } else { Exit not good! } 

的注入?数据=数组? $服务?

感谢您的帮助

回答

0

我没有看到任何代码注入漏洞在这里,但你不告诉我们你是如何处理的任何g-recaptcha-response事件在POST请求是在所有。最有可能的是,你不处理这个事件,并且所有黑客需要做的,通过你的验证码,根本不发送g-recaptcha-response字段。而不是if (isset($_POST['g-recaptcha-response'])),做一些像if (empty($_POST['g-recaptcha-response'])) {http_response_code(400);die('no captcha answer provided!');}}

+0

正确,只是使用isset验证码,如果不是那么{错误msg blabla} – VBnoob