Recaptcha V2 werkt niet naar behoren

Status
Niet open voor verdere reacties.

JacquesL

Gebruiker
Lid geworden
16 jan 2018
Berichten
78
Goedemiddag,

Ik heb google recaptcha V2 geïnstalleerd bij een formulier. Echter wordt het formulier toch verzonden zonder een vinkje te zetten dat ik geen robot ben. Gevolg...… veel SPAM.
Kan iemand mij helpen? Wat doe ik verkeerd?

Dit staat in de <head>
Code:
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

En dit is het formulier:

Code:
<form method="post" enctype="multipart/form-data" action="https://www.enjoyetenendrinken.nl/formmail3.php" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript" name="FrontPage_Form1">
    <div class="row">
      <div class="col-25">
        <label for="firma">Firma</label>
      </div>
      <div class="col-75">
        <input type="text" id="firma" name="firmanaam" placeholder="Firmanaam.. (optioneel)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="lname">Achternaam</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="lname" name="achternaam" placeholder="Uw achternaam.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="telefoon">Telefoonnummer</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="tel" id="telefoon" name="telefoon" placeholder="Uw telefoonnummer.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="email">E-mailadres</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="email" name="email" placeholder="Uw e-mailadres.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="datum">Datum</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="datum" name="datum" placeholder="Gewenste datum.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="tijdstip">Tijd</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="tijdstip" name="tijdstip" placeholder="Gewenste tijd.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="tafelgasten">Aantal tafelgasten</label>
      </div>
      <div class="col-75">
        <select id="tafelgasten" name="tafelgasten">
          <option selected>Geef aantal op..</option>
          <option value="1">1 tafelgast</option>
          <option value="2">2 tafelgasten</option>
          <option value="3">3 tafelgasten</option>
          <option value="4">4 tafelgasten</option>
          <option value="5">5 tafelgasten</option>
          <option value="6">6 tafelgasten</option>
          <option value="7">7 tafelgasten</option>
          <option value="8">8 tafelgasten</option>
          <option value="9">9 tafelgasten</option>
          <option value="10">10 tafelgasten</option>
          <option value="meer">meer tafelgasten (neem contact op!!)</option> 
       </select>
      </div>
    </div>
    <div class="row">
      <div class="col-25">
      <label for="info">Aanvullende informatie</label>
      </div>
      <div class="col-75">
      <textarea rows="5" name="informatie" cols="50" placeholder="Aanvullende informatie.."></textarea></div>
    </div>
    <div class="row">
      <div class="col-25">
      </div>
      <div class="col-75">
      </div>
     <div align="center" class="g-recaptcha" data-sitekey="6Ld2KaoUAAAAANY92s2xSVGh9tbtKKZsIqGgrJHF"></div></p>
 		<p align="center">
<input type="submit" value="Reserveren">
    </div>
  </form>

Alvast hartstikke bedankt
Groet Jacques
 
Heb je nog meer code?
Want enkel een javascript bestand en een stukje HTML is niet het enige. Je zult ook serverside (met bijv. PHP) moeten controleren of de check gepasseerd wordt of niet.

Trouwens... FrontPage is best oud!
 
Laatst bewerkt:
Beste PHP4u,

De pagina is in HTML5 en niet in PHP. Maar voor de duidelijkheid hierbij de hele HTML5 code van de pagina.

Code:
<!DOCTYPE HTML>
<html>
	<head>
		<title>Enjoy Eten & Drinken | Wilhelminaplein 3 | Naaldwijk</title>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
		<link rel="stylesheet" href="assets/css/main.css" />
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<style>
* {
    box-sizing: border-box;
}

input[type=text], select, textarea {
    width: 100%;
    padding: 12px;
    border: 1px solid #ccc;
    border-radius: 4px;
    resize: vertical;
}

input[type=tel], select, textarea {
    width: 100%;
    padding: 12px;
    border: 1px solid #ccc;
    border-radius: 4px;
    resize: vertical;
}
label {
    padding: 12px 12px 12px 0;
    display: inline-block;
}

input[type=submit] {
    background-color: #39825c;
    color: white;
    padding: 8px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    float: center;
}

input[type=submit]:hover {
    background-color: #45a049;
}

.container {
    border-radius: 5px;
    padding: 0px;
}

.col-25 {
    float: left;
    width: 25%;
    margin-top: 6px;
}

.col-75 {
    float: left;
    width: 75%;
    margin-top: 6px;
}

/* Clear floats after the columns */
.row:after {
    content: "";
    display: table;
    clear: both;
}

/* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */
@media screen and (max-width: 600px) {
    .col-25, .col-75, input[type=submit] {
        width: 100%;
        margin-top: 0;
    }
}
</style>
</head>
	<body class="is-preload homepage">
		<div id="page-wrapper">

			<!-- Header -->
				<div id="header-wrapper">
					<header id="header" class="container">

						<!-- Logo -->
							<div id="logo">
							</div>

						<!-- Nav -->
							<nav id="nav">
								<ul>
									<li><a href="index.html">Welkom</a></li>
									<li>
										<a href="#">Onze kaart</a>
										<ul>
											<li><a href="lunchkaart.html">Lunchkaart</a></li>
											<li><a href="dinnerkaart.html">Dinerkaart</a></li>
											<li><a href="borrelkaart.html">Borrelkaart</a></li>
											<li><a href="highkaart.html">High Beer, Wine & Gin</a></li>
										</ul>
									</li>
									<li class="current"><a href="reserveren.html">Reserveren</a></li>
									<li><a href="contact.html">Contact</a></li>
									<li><a target="_blank" href="https://www.enjoybicycletours.nl">Bicycle Tours</a></li>
								</ul>
							</nav>

					</header>
				</div>

			<!-- Banner -->
				<div id="banner-wrapper">
					<div id="banner" class="box container">
						<div class="row">
							<div class="col-7 col-12-medium">
								<p align="center">
								<img border="0" src="images/logo.png" style="width: 410px; max-width: 100%; height: auto"></p>
							</div>
							<div class="col-5 col-12-medium">
								<ul>
									<li><a href="reserveren.html" class="button small icon fa-arrow-circle-right">Ok let's eat</a></li>
									<li><a href="contact.html" class="button alt small icon fa-question-circle">Meer info</a></li>
								</ul>
							</div>
						</div>
					</div>
				</div>

			<!-- Features -->
				<div id="features-wrapper">
				</div>

			<!-- Main -->
				<div id="main-wrapper">
					<div class="container">
						<div id="content">

							<!-- Content -->
								<article>

									<h2>Reserveren </h2>

<div class="container">
<form method="post" enctype="multipart/form-data" action="https://www.enjoyetenendrinken.nl/formmail3.php" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript" name="FrontPage_Form1">
    <div class="row">
      <div class="col-25">
        <label for="firma">Firma</label>
      </div>
      <div class="col-75">
        <input type="text" id="firma" name="firmanaam" placeholder="Firmanaam.. (optioneel)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="lname">Achternaam</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="lname" name="achternaam" placeholder="Uw achternaam.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="telefoon">Telefoonnummer</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="tel" id="telefoon" name="telefoon" placeholder="Uw telefoonnummer.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="email">E-mailadres</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="email" name="email" placeholder="Uw e-mailadres.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="datum">Datum</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="datum" name="datum" placeholder="Gewenste datum.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="tijdstip">Tijd</label>
      </div>
      <div class="col-75">
        <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" --><input type="text" id="tijdstip" name="tijdstip" placeholder="Gewenste tijd.. (verplicht)">
      </div>
    </div>
    <div class="row">
      <div class="col-25">
        <label for="tafelgasten">Aantal tafelgasten</label>
      </div>
      <div class="col-75">
        <select id="tafelgasten" name="tafelgasten">
          <option selected>Geef aantal op..</option>
          <option value="1">1 tafelgast</option>
          <option value="2">2 tafelgasten</option>
          <option value="3">3 tafelgasten</option>
          <option value="4">4 tafelgasten</option>
          <option value="5">5 tafelgasten</option>
          <option value="6">6 tafelgasten</option>
          <option value="7">7 tafelgasten</option>
          <option value="8">8 tafelgasten</option>
          <option value="9">9 tafelgasten</option>
          <option value="10">10 tafelgasten</option>
          <option value="meer">meer tafelgasten (neem contact op!!)</option> 
       </select>
      </div>
    </div>
    <div class="row">
      <div class="col-25">
      <label for="info">Aanvullende informatie</label>
      </div>
      <div class="col-75">
      <textarea rows="5" name="informatie" cols="50" placeholder="Aanvullende informatie.."></textarea></div>
    </div>
    <div class="row">
      <div class="col-25">
      </div>
      <div class="col-75">
      </div>
     <div align="center" class="g-recaptcha" data-sitekey="6Ld2KaoUAAAAANY92s2xSVGh9tbtKKZsIqGgrJHF"></div></p>
 		<p align="center">
<input type="submit" value="Reserveren">
    </div>
  </form>
</div>
								</article>

						</div>
					</div>
				</div>
			<!-- Features -->
				<div id="features-wrapper">
					<div class="container">
						<div class="row">
							<div class="col-4 col-12-medium">

								<!-- Box -->
									<section class="box feature">
										<a href="#" class="image featured"><img src="images/pic01f.jpg" alt="" /></a>
									</section>

							</div>
							<div class="col-4 col-12-medium">

								<!-- Box -->
									<section class="box feature">
										<a href="#" class="image featured"><img src="images/pic02f.jpg" alt="" /></a>
									</section>

							</div>
							<div class="col-4 col-12-medium">

								<!-- Box -->
									<section class="box feature">
										<a href="#" class="image featured"><img src="images/pic03f.jpg" alt="" /></a>
									</section>

							</div>
						</div>
					</div>
				</div>

			<!-- Footer -->
				<div id="footer-wrapper">
					<footer id="footer" class="container">
						<div class="row">
							<div class="col-4 col-6-medium col-12-small">

								<!-- Links -->
									<section class="widget links">
										<h3><font color="#FFFFFF">Links</font></h3>
										<ul class="style2">
											<li><a target="_blank" href="http://www.enjoybicycletours.nl">Enjoy Bicycle Tours</a></li>
											<li><a target="_blank" href="http://www.westlandsmuseum.nl">Het &quot;Westlands Museum&quot;</a></li>
											<li><a target="_blank" href="https://sonnehoeck.nl">Historische Druivenkwekerij &quot;Sonnehoeck&quot;</a> </li>
											<li><a target="_blank" href="https://www.bezoek-westland.nl">Bezoek Westland</a></li>
											<li><a target="_blank" href="https://www.royalfloraholland.com/nl">Royal Flora Holland</a></li>
										</ul>
									</section>

							</div>
							<div class="col-4 col-6-medium col-12-small">

								<!-- Links -->
									<section class="widget links">
										<h3><font color="#FFFFFF">Neem contact op</h3>
										<p><font color="#FFFFFF">Enjoy Eten & Drinken<br>
										Wilhelminaplein 3<br>
										2671 GR - Naaldwijk<br>
										Tel: 0174 - 625 517<br>
										E-mail: info@enjoyetenendrinken.nl</font></section></div>
							<div class="col-3 col-6-medium col-12-small">


								<!-- Contact -->
									<section class="widget contact last">
										<h3><font color="#FFFFFF">Of volg ons op</h3>
										<ul>
											<li><a target=_blank href="https://www.facebook.com/enjoyetenendrinken/" class="icon fa-facebook"><span class="label">Facebook</span></a></li>
											<li><a href="#" class="icon fa-instagram"><span class="label">Instagram</span></a></li>
										</ul>
									</section>

							</div>
						</div>
					</footer>

				</div>

			</div>

		<!-- Scripts -->

			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/jquery.dropotron.min.js"></script>
			<script src="assets/js/browser.min.js"></script>
			<script src="assets/js/breakpoints.min.js"></script>
			<script src="assets/js/util.js"></script>
			<script src="assets/js/main.js"></script>

	</body>
</html>
 
Beste PHP4u,
De pagina is in HTML5 en niet in PHP. Maar voor de duidelijkheid hierbij de hele HTML5 code van de pagina.
En dit dan?
Code:
action="https://www.enjoyetenendrinken.nl/formmail3.php"


Want enkel een javascript bestand en een stukje HTML is niet het enige. Je zult ook serverside (met bijv. PHP) moeten controleren of de check gepasseerd wordt of niet.
Je hebt nu nog maar de helft gemaakt, alleen het visuele gedeelte. Je doet nog niks met het antwoord van Google of het spam is of niet en wat er moet gebeuren.
(vermoedelijk een melding tonen dat 'diegene niet toegelaten wordt').
Google's Re-Captcha controleert het enkel, maar blokkeert niks. Die blokkade kan je in formmail3.php plaatsen.

Ikzelf ben meer van mening dat je het formulier en de afhandeling (het controleren, en eventuele blokkeren, en het versturen) beter in één bestand kan. Op die manier kan je alle velden netjes laten oplichten, of een lijstje met validatiefouten tonen welke velden niet correct zijn ingevuld.
 
Laatst bewerkt:
Ja dat is hartstikke leuk, maar ik schiet er niet veel mee op. Het is geen antwoord op mijn vraag. Hoe los ik dit op? Dit is toch een helpmij forum??
 
Je moet daarvoor je PHP-script aanpassen dat er een extra controle in zit.

Ikzelf gebruik dit, maar je moet dit wel op de juiste manier in je PHP-script inpassen, en bij voorkeur op de plek waar je nu al je invoer valideert.
Lees ook het gele commentaar!
PHP:
<?php
    $response = $_POST["g-recaptcha-response"];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
	'secret' => '***jouw secret hier*******',
	'response' => $_POST["g-recaptcha-response"]
    );
    $options = array(
	'http' => array(
	    'method' => 'POST',
	    'content' => http_build_query($data)
	)
    );
    $context = stream_context_create($options);
    $verify = file_get_contents($url, false, $context);
    $captcha_success = json_decode($verify);

    // dit deel is het belangrijkste. En moet je in je validatie-deel verwerken.
    if ($captcha_success->success == false) {
     echo "Je bent niet gevalideerd als een mens! Hier stopt je poging!";
    } else {
    echo "Het is gelukt!";
    //hier volgt de rest van je afhandeling, zoals het mailen. 
    }
?>
 
Laatst bewerkt:
De reCaptcha library met voorbeelden vind je hier (klik).
De autoloader zit er ook bij.
 
Hallo PHP4U,

Ik ben even aan het stoeien geweest maar kom er niet uit.
HTML en HTML5 gaan me goed af. VBA kennis beschik ik ook best wel redelijk en met MS Access kan ik ook aardig uit de voeten, maar PHP is nooit mijn ding geweest. Zou je me willen helpen.

Waar moet ik dat stukje code van jou inpassen. Volgens mij ergens in onderstaand stukje. Klopt dat?

Code:
    //Get the validation code
    $original = "";
    if(isset($_SESSION["captchacode"])){
        $original = $_SESSION["captchacode"];
    }

    $posted = "";
    if(isset($_POST["Captcha"])){
        $posted = $_POST["Captcha"];
    }

	if(isset($_POST["cc"])){
        $cc = $_POST["cc"];
    }
	
    if($posted == $original){ 			
        //Security - Add all fields with stripslashes
        //Prevents - Injections
        if(isset($_POST)){
            foreach($_POST as $key => $value){
                if(is_array($value)){
                    foreach($value as $item => $checkbox){
                        if($checkbox == ""){
                            $checkbox = "";
                        }
                        $_POST[$item] = addslashes($checkbox);
                    }
                }else{
                    if($value == ""){
                        $value = "";
                    }
                    $_POST[$key] = addslashes($value);
                }
            }
        }

        $body_content = "";
        //Dynamic create a form.
        if(isset($_POST)){
            
            foreach($_POST as $key => $value){
                $body_content .= $key. ": ";
                if($value == ""){
                    $body_content .= $charswhennotfilled . "\n\n";
                }else{
                    $body_content .= stripslashes($value) . "\n\n";
                }
            }
        }

Als je het hele PHP script nodig hebt hoor ik het wel.

Alvast bedankt.
Groet Jacques
 
Als je de code tussen php-tags hier zet krijg je lijn-nummers erbij. Dat werkt wat makkelijker met uitleg geven op het forum.
Maar laat je hele php-script eens zien (hopelijk niet al te lang).

PHP:
<?php
test();
?>
 
Laatst bewerkt:
Fijn PHP4U dat je ernaar wilt kijken.

PHP:
<?php
session_start();
	
    //Developed by vydel
    //Version 0.0.1
    //Creator: Joey van der Ende
    //Role: Software engineer

    //Some globals settings
    $mailfrom = "info@enjoyetenendrinken.nl";
    $mailto = "info@enjoyetenendrinken.nl";
    $cc = "";
    $bcc = "";
    
    $subject = "Reserveringsaanvraag via www.enjoyetenendrinken.nl";

    $charswhennotfilled = "-";
    $tmpdirectory = "/tmp/";



    //Get the validation code
    $original = "";
    if(isset($_SESSION["captchacode"])){
        $original = $_SESSION["captchacode"];
    }

    $posted = "";
    if(isset($_POST["Captcha"])){
        $posted = $_POST["Captcha"];
    }

	if(isset($_POST["cc"])){
        $cc = $_POST["cc"];
    }
	
    if($posted == $original){ 			
        //Security - Add all fields with stripslashes
        //Prevents - Injections
        if(isset($_POST)){
            foreach($_POST as $key => $value){
                if(is_array($value)){
                    foreach($value as $item => $checkbox){
                        if($checkbox == ""){
                            $checkbox = "";
                        }
                        $_POST[$item] = addslashes($checkbox);
                    }
                }else{
                    if($value == ""){
                        $value = "";
                    }
                    $_POST[$key] = addslashes($value);
                }
            }
        }

        $body_content = "";
        //Dynamic create a form.
        if(isset($_POST)){
            
            foreach($_POST as $key => $value){
                $body_content .= $key. ": ";
                if($value == ""){
                    $body_content .= $charswhennotfilled . "\n\n";
                }else{
                    $body_content .= stripslashes($value) . "\n\n";
                }
            }
        }

        $files = array();
        //Now we are going to handle the files
        //Upload them with random name
        if(count($_FILES) > 0){
            foreach($_FILES as $key => $value){
                $size = $value["size"];
                $body_content .= $key . ": \n";
                if($size > 0){
                    $tmp_name = $value["tmp_name"];
                    $name = $value["name"];
                    $uploadto = $tmpdirectory.$name;

                    if(move_uploaded_file($tmp_name, $uploadto)){
                        $files[] .= $uploadto;
                        $body_content .= $name . "\n\n";
                    }else{
                        $body_content .= "Unable to upload the file. \n\n";
                    }
                }else{
                   $body_content .= $charswhennotfilled . "\n\n";
                }
            }
        }

        $message = $body_content;


        $headers .= "To: ".$mailto . "\n";
        $headers .= "From: ".$mailfrom . "\n";
        $headers .= "Cc: ".$cc .  "\n";
        $headers .= "Bcc: ".$bcc;


        //Now we are going to e-mail
        // boundary
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";

        $message = "This is a multi-part message in MIME format.\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n" . $message . "\n";
        $message .= "--{$mime_boundary}\n";
        // preparing attachments

        for($x=0; $x<count($files); $x++){
            $file = fopen($files[$x],"rb");
            $data = fread($file, filesize($files[$x]));
                fclose($file);
            $data = chunk_split(base64_encode($data));
            
            $filename = str_replace($tmpdirectory, "", $files[$x]);

            $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$filename\"\n" .
            "Content-Disposition: attachment;\n" . " filename=\"$filename\"\n" .
            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
            $message .= "--{$mime_boundary}\n";

            unlink($files[$x]);
        }

        // sent
        $ok = @mail($mailto, $subject, $message, $headers);
        if ($ok) {
            //echo "<p>Het formulier is met succes verzonden.</p>";
			Redirect('bedanktmail.html', false);
        } else {
            //echo "<p>Door technische redenen is het formulier niet verzonden. Probeer het nog eens.</p>";
			Redirect('foutmail.html', false);
        }
    }else{
        echo "Voer de validatie code in.";
    }
	
	function Redirect($url, $permanent = false)
	{

		if($permanent) {
			header('HTTP/1.1 301 Moved Permanently');
		}
			header('Location: '.$url);
			exit();
		}
?>
 
Boven lijn 37 zou het kunnen passen. Die else statement is dan niet nodig, en de foutmelding zou dan $body_content. kunnen worden geplaatst.

Niet getest overigens....
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan