Проблем с Google reCaptcha

mvmrik

Well-Known Member
Сложих тази капча "Не съм робот" в един мой сайт и не върши никаква работа. Преди съм я слагал на други места и не е имало проблеми, но сега спам коментарите си продължават. Иначе самата капча работи, като я тествам ръчно. Когато не я натисна, излиза съобщението за грешка, а коментара не се добавя. Въпреки това, продължават да се появяват нови коментари в базата през няколко секунди. Това е кода, който ползвам:

PHP:
// Това нещо съм го сложил горе в кода преди </head>

<script src='https://www.google.com/recaptcha/api.js'></script>


//Това е в самата форма

<div class="g-recaptcha" data-sitekey="XXXXX"></div>


//А това е самата проверка

if(isset($_POST['g-recaptcha-response'])){
        $captcha=$_POST['g-recaptcha-response'];
        $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=XXXXX&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
            if($response['success'] == false)
            {
                $error[] = 'Трябва да потвърдите, че сте човек!';
            }
    }
    if (count($error) < 1){
         Тук се добавя коментара в базата
    }

Аз не виждам къде може да има проблем и всичко си работи както трябва, но спам коментарите не спират. Кажете, ако виждате проблем. Възможно ли е тази капча да се пробива толкова лесно или проблема е в мен?
 
От: Проблем с Google reCaptcha

Код:
// Това нещо съм го сложил горе в кода преди </head> 

<script src='https://www.google.com/recaptcha/api.js'></script> 


//Това е в самата форма 

<div class="g-recaptcha" data-sitekey="XXXXX"></div> 


//А това е самата проверка 

if(isset($_POST['g-recaptcha-response'])){ 
        $captcha=$_POST['g-recaptcha-response']; 
        $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=XXXXX&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true); 
            if($response['success'] == false) 
            { 
                $error[] = 'Трябва да потвърдите, че сте човек!'; 
            } 
    } else {
		$error[] = 'Трябва да потвърдите, че сте човек!';
	}
    if (count($error) < 1){ 
         Тук се добавя коментара в базата 
    }

Или така, ако всичко друго ти е ОК би трябвало да работи като предполагам по-нагоре проверяваш дали е изпратена формата. Те просто са я прескачали.
 
От: От: Проблем с Google reCaptcha

Код:
// Това нещо съм го сложил горе в кода преди </head> 

<script src='https://www.google.com/recaptcha/api.js'></script> 


//Това е в самата форма 

<div class="g-recaptcha" data-sitekey="XXXXX"></div> 


//А това е самата проверка 

if(isset($_POST['g-recaptcha-response'])){ 
        $captcha=$_POST['g-recaptcha-response']; 
        $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=XXXXX&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true); 
            if($response['success'] == false) 
            { 
                $error[] = 'Трябва да потвърдите, че сте човек!'; 
            } 
    } else {
		$error[] = 'Трябва да потвърдите, че сте човек!';
	}
    if (count($error) < 1){ 
         Тук се добавя коментара в базата 
    }

Или така, ако всичко друго ти е ОК би трябвало да работи като предполагам по-нагоре проверяваш дали е изпратена формата. Те просто са я прескачали.
Да, проверявам дали е пратена. Също така има и други проверки дали е въведено име, коментар и т.н. Като тествам ръчно всичко си работи, а спамовете не спират :)

Преди 10-на минути промених това if (count($error) < 1 на if (count($error) == 0 и засега няма нищо добавено, но малко се съмнявам това да е проблема.
 
От: От: Проблем с Google reCaptcha

Да, проверявам дали е пратена. Също така има и други проверки дали е въведено име, коментар и т.н. Като тествам ръчно всичко си работи, а спамовете не спират :)

Преди 10-на минути промених това if (count($error) < 1 на if (count($error) == 0 и засега няма нищо добавено, но малко се съмнявам това да е проблема.

Пробвали да попълниш всичко без да капчата?
И по-скоро проверявай с is_array
 
От: Проблем с Google reCaptcha

Пробвах с is_array, пробвах с другия вариант, където дадохте по-горе и спамовете не спират :) Добавя се постоянно, все едно няма капча. Като се пробвам ръчно всичко работи както трябва. Не мога да разбера какво се случва.

Възможно ли е причината да е в това, че проверката става в config.php файл, който се намира извън public_html папката. Не ми се вярва да е от това, но дали има някаква вероятност?
 
От: Проблем с Google reCaptcha

Дай целия код, че боба не показва нищо.
 
От: Проблем с Google reCaptcha

В момента е така и спама си пробива без никакъв проблем. Колкото и да го гледам, не мога да разбера къде е проблема.

Това е в index.php в public_html
Код:
<form method="POST">
<p><input type="text" name="name" class="name" size="30" value="" placeholder="Име *" /></p>														
<p><textarea name="comment" placeholder="Коментар *" class="comment_body" rows="4" cols="33"></textarea></p>

<?php if (count($error) > 0){ 
   foreach ($error as $value){
      echo '<p style="color:red">'.$value.'</p>';
   }
}
?>

<div class="g-recaptcha" data-sitekey="XXXXX"></div>
<input class="btn post_comment_btn" type="submit" value="Коментирай">
</form>

Това е в config.php извън public_html
Код:
if (isset($_POST['comment'])){
    $article_id = mysqli_real_escape_string($con, trim($_GET['id']));
    $name = mysqli_real_escape_string($con, trim($_POST['name']));
    $comment = mysqli_real_escape_string($con, trim($_POST['comment']));
    
    //$error = array();
    if (mb_strlen($name) < 3){
        $error[] = 'Името трябва да е дълго поне 3 символа.';
    }
    if (mb_strlen($comment) < 5){
        $error[] = 'Коментарът трябва да е дълъг поне 5 символа.';
    }
    if(isset($_POST['g-recaptcha-response'])){
        $captcha=$_POST['g-recaptcha-response'];
        $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=XXXXX&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
           
            if($response['success'] == false)
            {
                $error[] = 'Трябва да потвърдите, че сте човек!';
            }
    }
    if (!is_array($error)){
        $com = mysqli_query($con, 'INSERT INTO comments (article_id, date, name, message) VALUES ('.$article_id.', '.time().', "'.$name.'", "'.$comment.'")');
            if (!$com){
                echo 'Грешка при добавяне на коментар';
            } 
    }
}
 
От: Проблем с Google reCaptcha

От телефона пиша и доколкото видях имаш проверка само дали капчата е пратена, ако не ае попълни коментара минава.
 
От: Проблем с Google reCaptcha

Да не мислиш, че ботовете си играят да ти зареждат формата. Директно ти бичат POST заявка. И кода ти с инициализирането на $error никога не се изпълнява.

Код:
 if(isset($_POST['g-recaptcha-response'])){
        $captcha=$_POST['g-recaptcha-response'];
        $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=XXXXX&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
           
            if($response['success'] == false)
            {
                $error[] = 'Трябва да потвърдите, че сте човек!';
            }
} else {
         $error[] = 'Трябва да потвърдите, че сте човек!';
}

И чак после проверката.
 
От: Проблем с Google reCaptcha

Сложих да се прави първо проверка на капчата и ако мине, тогава да се изпълнява всичко останало. Засега вече няколко часа няма никакви проблеми, явно този път сработи. Благодаря за помощта :)
 

Горе