Google капча и PHP скрипт для отправки email

Статус
В этой теме нельзя размещать новые ответы.

volkinson

Гуру форума
Регистрация
13 Июн 2014
Сообщения
186
Реакции
74
Всем доброго времени суток. Столкнулся с неприятной ситуацией. Мучался над капчей, думал решил проблему, после того, как она заработала. Но нет! Скрипт отправки не проверяет ответ от капчи. То есть я могу отправить все равно письмо. Вопрос знатокам: где же допущена ошибка? Есть ли у этой формы критические дыры? Буду благодарен за любой полезный совет!
Скрытое содержимое доступно для зарегистрированных пользователей!
 
  • Заблокирован
  • #2
Я же тебе когда ее делал уже говорил, тебе надо проверить что приходит в $response, сейчас там сделана проверка по этой документации Для просмотра ссылки Войди или Зарегистрируйся возможно у тебя ответ немного иначе выглядит чем в документации.

PHP:
$response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret='.$secretkey.'&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);

        if((bool) $response['success'] === false && in_array('error-codes', $response))
        {
            /* lets set the error message for the alert... */
            if ($alert=='')
                $alert = '<div class="alert alert-danger" role="alert">Some how you have been detected has a spammer.</div>';
            }

можно так попробовать еще
 
Я же тебе когда ее делал уже говорил, тебе надо проверить что приходит в $response, сейчас там сделана проверка по этой документации Для просмотра ссылки Войди или Зарегистрируйся возможно у тебя ответ немного иначе выглядит чем в документации.

PHP:
$response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret='.$secretkey.'&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);

        if((bool) $response['success'] === false && in_array('error-codes', $response))
        {
            /* lets set the error message for the alert... */
            if ($alert=='')
                $alert = '<div class="alert alert-danger" role="alert">Some how you have been detected has a spammer.</div>';
            }

можно так попробовать еще
Он просто пропускает капчу. Не проверяет, то есть ему все, есть ли там ввод капчи или нету.
 
  • Заблокирован
  • #4
Все, вопрос решен. Спасибо специалисту!
Рабочий код:
PHP:
<?php 
$to = 'info@svkpro.com';
$subject = 'Support Message';

// keys from Google reCaptcha https://www.google.com/recaptcha/admin 
$sitekey = 'Сайт кей сюды';
$secretkey = 'Секрет сюда'; 

$alert = ''; 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
$email = $message = $captcha = ''; 

if (isset($_POST['email']) && !empty($_POST['email']))
$email = $_POST['email']; 

if (isset($_POST['message']) && !empty($_POST['message']))
$message = $_POST['message']; 

if (isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response']))
$captcha = $_POST['g-recaptcha-response']; 


if (! $captcha || $captcha === '') {
$alert = '<div class="alert alert-warning" role="alert">Please wait until the captcha protection give you a check mark.</div>'; 
} else {
$response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret='.$secretkey.'&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);



if((bool) $response['success'] === false && in_array('error-codes', $response))
{
/* lets set the error message for the alert... */
if ($alert=='')
$alert = '<div class="alert alert-danger" role="alert">Some how you have been detected has a spammer.</div>';
} else { 
/* the email to you */ 
$headers = 'From: '.$to.'' . "\r\n" . 
'Reply-To: '.$email.'' . "\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
mail($to, $subject, $message, $headers); 
/* the copy of the email to the *client* */ 
$headers = 'From: '.$email.'' . "\r\n" . 
'Reply-To: '.$to.'' . "\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
mail($email, 'COPY - '. $subject, $message, $headers); 
/* lets set the success message for the alert... */ 
$alert = '<div class="alert alert-success" role="alert">Your email has been sent.</div>'; 
} 
} 
} 
?> 

<?=$alert?> 


<form id="comment_form" action="" method="post"> 
<input name="email" type="email" placeholder="Type your email" size="40" class="form-control" value="<?=@$email?>" ><br><br> 
<textarea name="message" rows="8" cols="39" class="form-control" placeholder="Your message to us..." ><?=@$message?></textarea><br> 
<div class="g-recaptcha" data-sitekey="<?=$sitekey?>"></div><br> 
<input type="submit" name="submit" value="Send message" class="btn btn-default"><br> 
</form> 

<script src='https://www.google.com/recaptcha/api.js'></script>
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху