Formularz kontaktowy php i recaptcha

0

Witam,

Ostatnio na stronach mam problem z botami chciałem zainstalowac reCAPTCHA

a więc tak tradycyjnie w <head>

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

w <html> formularza

<div id="formularz">
<form method="post" action="kontakt.php">

    <label>Imię i nazwisko</label>
    <input name="name" placeholder="np. Jan Kowalski">

    <label>Email</label>
    <input name="email" type="email" placeholder="np. [email protected]">
    
    <label>Numer telefonu</label>
    <input name="phone" type="phone" placeholder="np. 605956353">

    <label>Wiadomość</label>
    <textarea name="message" placeholder="Napisz tu wiadomość"></textarea>
    <div class="g-recaptcha" data-sitekey="6Ldao08UAAAAACLY93948VkaU0IJPFqn8LUA0vRr"></div>

    <input id="submit" name="submit" type="submit" value="Wyślij">

Wyświetla się recaptcha w formularzu i wszysto wyświetla i wysyła bez recaptcha poprawnie
Teraz chce dodac do kodu kontakt.php kod sprawdzający recaptcha wklejam i nic. Dalej wysyła bez sprawdzenia zaznaczenia recaptchy
Co robić? kod php wyglada następujaco:

<?php

// Tworzymy zmienną dla imienia i nazwiska
$name = $_POST['name'];

// Tworzymy zmienną dla adresu email
$email = $_POST['email'];

// Tworzymy zmienną dla adresu phone
$phone = $_POST['phone'];

// Tworzymy zmienną dla wiadomości
$message = $_POST['message'];

// Podajesz adres email z którego ma być wysłana wiadomość
$odkogo = "[email protected]";

// Podajesz adres email na który chcesz otrzymać wiadomość
$dokogo = "[email protected]";

// Podajesz tytuł jaki ma mieć ta wiadomość email
$tytul = "Formularz kontaktowy z wozki-uzywane24.pl - landingpage";

// Przygotowujesz treść wiadomości
$wiadomosc = "";
$wiadomosc .= "Imie i nazwisko: " . $name . "\n";
$wiadomosc .= "Email: " . $email . "\n";
$wiadomosc .= "Telefon kontaktowy: " . $phone . "\n";
$wiadomosc .= "Wiadomość: " . $message . "\n";

// Wysyłamy wiadomość
$sukces = mail($dokogo, $tytul, $wiadomosc, "Od: <$odkogo>");

// Przekierowywujemy na potwierdzenie
if ($sukces){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=potwierdzenie.php\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.html\">";
}
?>

a mam wkleić:

if (isset($_POST['submit'])) {
    $secret = '6LfRORcU***********************1Ei0FdA';
    $response = $_POST['g-recaptcha-response'];
    $remoteip = $_SERVER['REMOTE_ADDR'];
    
    $url = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip");
    $result = json_decode($url, TRUE);
    if ($result['success'] == 1) {
      echo 'Nie jesteś botem';
    }else{
      echo 'Błędnie wypełnione pole reCAPTCHA';
    }
}

co robić? Z góry dziękuje za pomoc

0

jak dla mnie to wystarczy trochę dokładniejsza walidacja font/back+Honey Pot Spam Prevention, w ten sposób recaptcha jest raczej zbędna

0

Użytkownicy recaptchy trenują AI googla za friko, zastanów się, czy chcesz googlowi w tym pomagać, a dwa, re-captcha jest trochę uciążliwa, czasem trrzeba sporo poklikać. Są biblioteki standalone z captchą na githubie, np.: https://github.com/Gregwar/Captcha

0

Sprawdź, czy ten tutorial nie będzie Ci pomocny:

http://zaawansowanywordpress.pl/tutorial-instalacja-recaptcha-php-od-google/

Pod nim masz działający przykład do pobrania i treningu - zajrzyj do pliku index.php po rozpakowaniu, może znajdziesz podpowiedź:
http://zaawansowanywordpress.pl/wp-content/uploads/2016/07/recaptcha.zip

Natomiast to co próbujesz zrobić samodzielnie, jest podobne do tego:
https://www.codexworld.com/new-google-recaptcha-with-php/

<?php
if(isset($_POST['submit']) && !empty($_POST['submit'])):
    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
        //your site secret key
        $secret = '9LuDh9kyetYYYYdT0jsVckScsH8Ks3KA';
        //get verify response data
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success):
            //contact form submission code
            $name = !empty($_POST['name'])?$_POST['name']:'';
            $email = !empty($_POST['email'])?$_POST['email']:'';
            $message = !empty($_POST['message'])?$_POST['message']:'';
            
            $to = '[email protected]';
            $subject = 'New contact form have been submitted';
            $htmlContent = "
                <h1>Contact request details</h1>
                <p><b>Name: </b>".$name."</p>
                <p><b>Email: </b>".$email."</p>
                <p><b>Message: </b>".$message."</p>
            ";
            // Always set content-type when sending HTML email
            $headers = "MIME-Version: 1.0" . "\r\n";
            $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
            // More headers
            $headers .= 'From:'.$name.' <'.$email.'>' . "\r\n";
            //send email
            @mail($to,$subject,$htmlContent,$headers);
            
            $succMsg = 'Your contact request have submitted successfully.';
        else:
            $errMsg = 'Robot verification failed, please try again.';
        endif;
    else:
        $errMsg = 'Please click on the reCAPTCHA box.';
    endif;
else:
    $errMsg = '';
    $succMsg = '';
endif;
?>

Jeśli to się nie uda wdrożyć, może lepiej jednak skorzystać z rodzimych antyspamerskich rozwiązań, np. u mnie działa SBLAM i blokuje wejścia na stronę znanym spamerom, ale trzeba aktualizować sobie ich listę co jakiś czas:
https://sblam.com

0

Recaptcha jest dość prosta do wdrożenia. Całkiem fajnie działa invisible reCaptcha i wcale nie jest taka uciążliwa dla odwiedzających.
Co do Twojego problemu to pamiętaj, że recaptcha zwraca Ci jeszcze response, który możesz sobie zwalidowac po stronie serwera zanim puścisz maila.

To co wkleił dekRe powinno Ci pomóc zrozumieć na czym polega recaptcha i jak jej prawidłowo używać :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1