У меня есть некоторые проблемы с cURL и Google reCaptcha2, чтобы избежать «Робот» & «Спаммер» Auto-Reg´s.
Поэтому я выбрал Google ReCaptcha2, чтобы проверить пользователя на WWW сайте.
Эта проблема:
после проверки кода, я обнаружил, что есть
Header Injection in 'curl_setopt_array' via '$curlConfig'
Мой сервер reCaptcha с использованием cURL из-за PHP File getContent
заблокирован PHP Config.
Мой код 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! }
Инъекция? Данные = Массив? $ Служить?
Спасибо за помощь
я не вижу здесь никаких уязвимостей при внедрении кода, но вы не показываете нам, как вы справляетесь с событием 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!');}}
Других решений пока нет …