我对cURL和Google reCaptcha2有一些麻烦,以避免“机器人”& “垃圾邮件发送者”自动注册。
所以我选择google的reCaptcha2来检查WWW网站上的用户。
问题:
检查完代码后,我发现有一个Header Injection in 'curl_setopt_array' via '$curlConfig'
我的Serverside使用cURL进行reCaptcha,因为PHP Config阻止了PHP File getContent
。
我的reCaptcha代码:
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 String中的数据解码回来:
$jsonResponse = json_decode($response);
if ($jsonResponse->success == "true") { Good } else { Exit not good! }
注射?数据=数组? $ Serve?
感谢您的帮助
答案 0 :(得分:0)
我在这里看不到任何代码注入漏洞,但是你根本没有告诉我们你如何处理POST请求中没有g-recaptcha-response
的事件。最有可能的是,您无法处理该事件,并且黑客需要做的就是通过您的验证码,而不是发送g-recaptcha-response
字段。而不是if (isset($_POST['g-recaptcha-response']))
,请执行if (empty($_POST['g-recaptcha-response'])) {http_response_code(400);die('no captcha answer provided!');}}