Hey ik heb een contactformulier ontwikkeld en wil gebruik maken van google recaptcha 3 als beveiliging tegen spam.
De captcha steekt er in maar beschouwd mij als spam.
Kan iemand zeggen wat ik fout doe?
Post zowel php als jquery gedeelte.

<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/huisstijl.css">
<link rel="stylesheet" type="text/css" href="../../css/sjabloon.css">
<link rel="stylesheet" type="text/css" href="../../css/blokken.css">
<link rel="stylesheet" type="text/css" href="../../css/navigatie.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<title>E-services DVC Heilig Hart</title>
<script src="https://www.google.com/recaptcha/api.js?render=6Ldu8MIUAAAAAFEJd1Txxme6GNvnR72V0QmwyJrM"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<style>
#contactblokken
{
display:flex;
flex-direction:row;	
}
ol
{
float:left;
margin-top:-10px;
}
ol li
{
list-style-type:none;
margin:8pt;	
}
label
{
font-family:verdana;
font-size:10pt;	
width:110px;
float:left;
}
#naam
{
width:200px;	
}
#voornaam
{
width:200px;	
}
#email
{
width:200px;	
}
.button
{
color:white;
font-size:10pt; 
font-weight:bold;
height:25pt;
background-color:rgb(192,154,0);
border-radius:25px; 
cursor:pointer;
width:120px;
}
</style>
</head>
<body>
<div id="bovenstrook">
			<img src="https://www.mijndvcheilighart.be/images/banner.jpg">
		</div>
		<div id="container">
			<div id="linkerkolom">
				<nav>
					<ul>
					<?php
					$spagina="contact.php";
					menu($db,$spagina);
					?>
					</ul>
				</nav>
			</div>
			<div id="centrum">
				<section id="onderwerp">
					<div class="onderwerp">
					<div>
					<i class="far fa-envelope fa-2x onderwerpIcoon"></i>
					</div>
					<div>
					<h2 class="h2oranje">Contact</h2>
					</div>
					</div>
				</section>
				<section id="contactblokken">
					<div>
						<h2 class="h2paars">DVC Heilig Hart VZW </h2>
						<ul>
							<li class="naastelkaar">
								<div><i class="fas fa-map-marker-alt"></i></div>
								<div style="margin-left:5px;"><a class="standaard" style="text-decoration:none;" href="https://www.google.co.in/maps/place/Leernsesteenweg+53,+9800+Deinze/@50.9980345,3.5473689,17z/data=!3m1!4b1!4m5!3m4!1s0x47c36c89ac882f15:0x1aa071daa376fa67!8m2!3d50.9980345!4d3.5495576" target="_blank" title="Route naar DVC Heilig Hart">Leernsesteenweg 53, 9800 Deinze, België</a></div>
							</li>
							<li class="naastelkaar">
								<div><i class="far fa-envelope"></i></div>
								<div style="margin-left:5px;"><a class="standaard" style="text-decoration:none;" href="mailto:[email protected]" title="Mail kwalitietscoördinator">[email protected]</a></div>
							</li>
							<li class="naastelkaar">
								<div><i class="fas fa-phone"></i></div>
								<div style="margin-left:5px;"><span class="standaard">09 387 77 11</span></div>
							</li>
							<li class="naastelkaar">
								<div><i class="fas fa-fax"></i></div>
								<div style="margin-left:5px;"><span class="standaard">09 387 77 00</span></div>
							</li>
						</ul>
					</div>
					<div>
					<h2 class="h2paars">Stel hier jouw vraag</h2>
						<form id="frmcontact" name="frmcontact" method="post" action="contact.php">
							<ol>
								<li><label for="naam">Naam</label>
									<input type="text" name="naam" id="naam" autocomplete="on">
								</li>
								<li><label for="voornaam">Voornaam</label>
									<input type="text"  name="voornaam" id="voornaam" autocomplete="on">
								</li>
								<li><label for="email">E-mail</label>
									<input type="email"  name="email" id="email" autocomplete="on">
								</li>
								<li><label for="bericht">Bericht</label>
									<textarea rows="15" cols="60"  name="bericht" id="bericht"></textarea>
								</li>
								<li>
									<input type="submit" value="Verzenden" id="frmcontact" name="frmcontact" class="button"> &nbsp;
									<input type="reset" value="Annuleren" id="reset" name="reset" class="button">
								</li>
							</ol>
						</form>
						<script>
						// na submit form
							$('#frmcontact').submit(function() {
							// tegenhouden verzenden
								event.preventDefault();
							var naam = $('#naam').val();
							var voornaam = $('#voornaam').val();
							var email = $('#email').val();
							var bericht = $('#bericht').val();
							// aanspreken recaptacha
							grecaptcha.ready(function() {
							//recaptcha token
							grecaptcha.execute('mijn token', {action: 'contact'}).then(function(token) {
							// plaats token in form
							$('#frmcontact').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token + '">');
							alert(token);
							$.post("contact.php",{naam: naam, voornaam: voornaam, email: email, bericht: bericht, token: token}, function(result) {
                            console.log(result);
                            if(result.success) {
                                    alert('Thanks for posting comment.')
                            } else {
                                    alert('You are spammer ! Get the @$%K out.')
                            }
                    });
            });;
        });
  });
  </script>
					</div>
				</section>
			</div>
</div>
</body>
</html>

Dit is het stuk jquery en input wordt verzonden naar php hieronder

<?php
$naam, $voornaam, $email, $bericht;$captcha;
  $naam = filter_input(INPUT_POST,'naam',FILTER_SANITIZE_STRING);
  $voornaam = filter_input(INPUT_POST,'voornaam',FILTER_SANITIZE_STRING);
  $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
  $bericht = filter_input(INPUT_POST, 'bericht', FILTER_SANITIZE_STRING);
  $captcha = filter_input(INPUT_POST, 'token', FILTER_SANITIZE_STRING);
  if(!$captcha){
    echo '<h2>Please check the the captcha form.</h2>';
    exit;
  }
  $secretKey = "mijn sleutel";
  $ip = $_SERVER['REMOTE_ADDR'];
  
  // post request to server
  $url = 'https://www.google.com/recaptcha/api/siteverify';
  $data = array('secret' => $secretKey, 'response' => $captcha);

  $options = array(
    'http' => array(
      'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
      'method'  => 'POST',
      'content' => http_build_query($data)
    )
  );
  $context  = stream_context_create($options);
  $response = file_get_contents($url, false, $context);
  $responseKeys = json_decode($response,true);
  header('Content-type: application/json');
  if($responseKeys["success"]) {
    echo json_encode(array('success' => 'true'));
  } else {
    echo json_encode(array('success' => 'false'));
  }
?>

Alles lijkt in orde maar ik krijg geen enkel from verzonden. Telkens zeft hij dat ik spam ben. Kan iemand helpen?
Betekend dit dan na deze regel code?
<?php
if($responseKeys["success"]) {
// hier data verwerken
echo json_encode(array('success' => 'true'));
} else {
echo json_encode(array('success' => 'false'));
}
?>
Ja, daarmee controleer je dat. Ik zou wel een nette controle inbouwen of het true of false is, en niet de waarde van de JSON-request die je terug krijgt naar de gebruiker sturen. Aan 'geheimtaal' heeft diegene niks.

Kijk anders eens wat voor data eruit gaat, en wat je terug krijgt in beide gevallen. Ik neem aan dat er een testmogelijkheid in ReCaptcha zit, al is het misschien een whitelist met IP's die je even fout invult.

Dus zorg in tegenstelling tot je vorige code tot een nette code die de juiste opbouw heeft.
Denk dat ik weg kan.
Zal morgen proberen.
Die code komt uit een tutorial ivm recaptcha en is dus zeker niet mijn idee.
Vandaar ook dat ik het geheel niet snapte.
Alvast bedankt om me verder te helpen.
Adoptive Solution op 16/12/2019 21:54:11

Ben benieuwd wat er op Live Sex Web Cam (2e browser tab) te zien is.
Altijd oppassen met publiceren van schermafdrukken.

Hahaha :-) LOL

Reageren