recaptcha V3
Ik ben een redelijke amateur op het gebied van PHP.
Naast mijn normale dagelijkse werk ben ik bezig met fotografie en ben bezig om een nieuwe website te maken.
Dit gaat in de basis best goed. Echter ik krijg op mijn huidige site redelijk wat spam binnen via het contact formulier.
Dit wil ik dan ook aanpakken met recaptcha v3. Ik heb netjes de sleutels opgevraagd en een test opstelling aangemaakt en de sleutels ingevuld.
Als ik alle velden nu in het formulier invul dan lijkt het goed gekeurd maar ik ontvang geen mail.
Hier onder het script wat ik heb gebruikt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Google reCAPTCHA v3</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_RECAPTCHA_SITE_KEY"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('YOUR_RECAPTCHA_SITE_KEY', { action: 'contact' }).then(function (token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>
</head>
<body>
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-half">
<form method="POST">
<h1 class="title">
reCAPTCHA v3 testformulier
</h1>
<div class="field">
<label class="label">Name</label>
<div class="control">
<input type="text" name="name" class="input" placeholder="Name" required>
</div>
</div>
<div class="field">
<label class="label">Email</label>
<div class="control">
<input type="email" name="email" class="input" placeholder="Email Address" required>
</div>
</div>
<div class="field">
<label class="label">Message</label>
<div class="control">
<textarea name="message" class="textarea" placeholder="Message" required></textarea>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button type="submit" class="button is-link">Send Message</button>
</div>
</div>
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
</form>
</div>
</div>
</div>
</section>
</body>
<?php // Check if form was submitted:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = 'YOUR_RECAPTCHA_SECRET_KEY';
$recaptcha_response = $_POST['recaptcha_response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
// Take action based on the score returned:
if ($recaptcha->score >= 0.5) {
// Verified - send email
} else {
// Not verified - show form error
}
} ?>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Google reCAPTCHA v3</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_RECAPTCHA_SITE_KEY"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('YOUR_RECAPTCHA_SITE_KEY', { action: 'contact' }).then(function (token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>
</head>
<body>
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-half">
<form method="POST">
<h1 class="title">
reCAPTCHA v3 testformulier
</h1>
<div class="field">
<label class="label">Name</label>
<div class="control">
<input type="text" name="name" class="input" placeholder="Name" required>
</div>
</div>
<div class="field">
<label class="label">Email</label>
<div class="control">
<input type="email" name="email" class="input" placeholder="Email Address" required>
</div>
</div>
<div class="field">
<label class="label">Message</label>
<div class="control">
<textarea name="message" class="textarea" placeholder="Message" required></textarea>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button type="submit" class="button is-link">Send Message</button>
</div>
</div>
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
</form>
</div>
</div>
</div>
</section>
</body>
<?php // Check if form was submitted:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = 'YOUR_RECAPTCHA_SECRET_KEY';
$recaptcha_response = $_POST['recaptcha_response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
// Take action based on the score returned:
if ($recaptcha->score >= 0.5) {
// Verified - send email
} else {
// Not verified - show form error
}
} ?>
</html>
Nogmaals ik ben een leek op dit gebied.
Ik begrijp ook niet hoe recaptcha ziet naar welk mail adres het gestuurd moet worden.
Wie kan mij helpen.
Gr,
Roland van Haastregt
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 28/01/2019 15:30:37 door - Ariën -
https://stackoverflow.com . Voor jouw vraag, kijk even naar het eerste antwoord op deze vraag: https://stackoverflow.com/questions/50405977/how-to-verify-google-recaptcha-v3-response
Het is in het Engels, maar als je vragen hebt over (website) programmeren, kijk dan altijd op mail of phpMailer.
ReCaptcha controleert enkel maar of iemand een mens is (in V3 a.d.v. een score), en jij moet in dat geval de mail sturen. (regel 86)
Recaptcha stuurt niks naar een mailadres, dat moet jij doen met ReCaptcha controleert enkel maar of iemand een mens is (in V3 a.d.v. een score), en jij moet in dat geval de mail sturen. (regel 86)
Gewijzigd op 28/01/2019 15:47:37 door - Ariën -
Echter heb ik naar de regel 86 gekeken maar en daar mail command toegepast maar ontvang nog steeds geen mail :(
$recaptcha_secret = 'YOUR_RECAPTCHA_SECRET_KEY';
Op welke manier mail je? Lokaal of op een hostingserver?
Ik mail via de hostingsite one.com
Met mijn oude site kon ik gewoon mijn mail adres in de html verwerken en wordt het met de submit butten naar mijn mail adres gestuurd.
Het nieuwe test formulier heb ik wel geüpload om het “live” te krijgen.
Ik zie dan wel netjes onderin het scherm het recaptcha logo.
Na het invullen van het formulier wordt het scherm ververst zonder enige melding.
Laat je relevante code eens zien.
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Google reCAPTCHA v3</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
<script src='https://www.google.com/recaptcha/api.js?render=6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF', {action: 'action_name'})
.then(function(token) {
// Verify the token on the server.
});
});
</script>
</head>
<body>
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-half">
<form method="POST">
<h1 class="title">
reCAPTCHA v3 testformulier
</h1>
<div class="field">
<label class="label">Name</label>
<div class="control">
<input type="text" name="name" class="input" placeholder="Name" required>
</div>
</div>
<div class="field">
<label class="label">Email</label>
<div class="control">
<input type="email" name="email" class="input" placeholder="Email Address" required>
</div>
</div>
<div class="field">
<label class="label">Message</label>
<div class="control">
<textarea name="message" class="textarea" placeholder="Message" required></textarea>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button type="submit" class="button is-link">Send Message</button>
</div>
</div>
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
</form>
</div>
</div>
</div>
</section>
</body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php // Check if form was submitted:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '6Le5dowUAAAAAMl0DMB4BLOaRKq3uUNz1K5J4UP9';
$recaptcha_response = $_POST['recaptcha_response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
// Take action based on the score returned:
if ($recaptcha->score >= 0.5) {
// Verified - send email
$to = '[email protected]';
} else {
// Not verified - show form error
}
} ?>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '6Le5dowUAAAAAMl0DMB4BLOaRKq3uUNz1K5J4UP9';
$recaptcha_response = $_POST['recaptcha_response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
// Take action based on the score returned:
if ($recaptcha->score >= 0.5) {
// Verified - send email
$to = '[email protected]';
} else {
// Not verified - show form error
}
} ?>
</html>
Toevoeging op 29/01/2019 10:18:11:
Geen idee wat ik nu verkeerd doe maar er wordt weer een deel in de normale tent geplaatst ????
Gewijzigd op 29/01/2019 10:37:19 door Roland Haastregt
Verder sla je nu enkel een variabele op met een mailadres, en mail je nog niet.
Zie ook: mail.
Op lijn 19 moet je een foutmelding plaatsen als de controle zegt dat het niet goed is.
Gewijzigd op 29/01/2019 11:20:47 door - Ariën -
Nog een puntje:
Waarom zet je jouw PHP-code neer na je </body> tag?
De body-sectie is bedoeld voor alle content van de website, en gezien je PHP-script een melding hoort te tonen ("De mail is verstuurd" of "De controle heeft aangetoond dat je een robot bent!") hoort dit op je juiste plek in de body-sectie.
Weer aan het stoeien geweest en ben nu wel zo ver dat ik een opgegeven text "Herstel uw fout!" als foutmelding krijg. Echter wat ik nu ook aan informatie invul zelf met serieuze info die echt klopt invul geeft hij deze fout melding.
Ook heb ik nog geprobeerd om de ingestelde controle waarde van 0,5 op 0,1 te zetten om te kijken of hij dan wel door de controle heen komt. Maar nee :(
Ook heb ik de PHP code nu boven aan gezet.
Ook gekeken naar je link naar de PHP mail manual, maar als leek weet ik niet zo goed wat ik daar mee aan moet. Kwestie van copieren en er gewoon inplakken of moeten alle waardes dan nog in gevuld worden.
Zal in elk geval kijken of ik de code met code tags nogmaal kan tonen.
Toevoeging op 29/01/2019 20:57:39:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php // Check if form was submitted:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '6Le5dowUAAAAAMl0DMB4BLOaRKq3uUNz1K5J4UP9';
$recaptcha_response = $_POST['recaptcha_response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
// Take action based on the score returned:
if ($recaptcha->score >= 0.5) {
// Verified - send email
$to = '[email protected]';
echo '<br><p>Uw bericht is verstuurd!</p><br>';
} else {
// Not verified - show form error
echo '<br><p>Herstel uw fout!</p><br>';
}
} ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Google reCAPTCHA v3</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
<script src='https://www.google.com/recaptcha/api.js?render=6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF', {action: 'action_name'})
.then(function(token) {
// Verify the token on the server.
});
});
</script>
</head>
<body>
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-half">
<form method="POST">
<h1 class="title">
reCAPTCHA v3 testformulier
</h1>
<div class="field">
<label class="label">Name</label>
<div class="control">
<input type="text" name="name" class="input" placeholder="Name" required>
</div>
</div>
<div class="field">
<label class="label">Email</label>
<div class="control">
<input type="email" name="email" class="input" placeholder="Email Address" required>
</div>
</div>
<div class="field">
<label class="label">Message</label>
<div class="control">
<textarea name="message" class="textarea" placeholder="Message" required></textarea>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button type="submit" class="button is-link">Send Message</button>
</div>
</div>
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
</form>
</div>
</div>
</div>
</section>
</body>
</html>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '6Le5dowUAAAAAMl0DMB4BLOaRKq3uUNz1K5J4UP9';
$recaptcha_response = $_POST['recaptcha_response'];
// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);
// Take action based on the score returned:
if ($recaptcha->score >= 0.5) {
// Verified - send email
$to = '[email protected]';
echo '<br><p>Uw bericht is verstuurd!</p><br>';
} else {
// Not verified - show form error
echo '<br><p>Herstel uw fout!</p><br>';
}
} ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Google reCAPTCHA v3</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
<script src='https://www.google.com/recaptcha/api.js?render=6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('6Le5dowUAAAAADMX375viwZaVPi7OsncpTeYUSeF', {action: 'action_name'})
.then(function(token) {
// Verify the token on the server.
});
});
</script>
</head>
<body>
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-half">
<form method="POST">
<h1 class="title">
reCAPTCHA v3 testformulier
</h1>
<div class="field">
<label class="label">Name</label>
<div class="control">
<input type="text" name="name" class="input" placeholder="Name" required>
</div>
</div>
<div class="field">
<label class="label">Email</label>
<div class="control">
<input type="email" name="email" class="input" placeholder="Email Address" required>
</div>
</div>
<div class="field">
<label class="label">Message</label>
<div class="control">
<textarea name="message" class="textarea" placeholder="Message" required></textarea>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button type="submit" class="button is-link">Send Message</button>
</div>
</div>
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
</form>
</div>
</div>
</div>
</section>
</body>
</html>
Gewijzigd op 29/01/2019 21:00:30 door Roland Haastregt
Kijk eens naar de 'examples' op de mail-uitleg van php.net.
Gewijzigd op 29/01/2019 21:06:16 door - Ariën -
aangepast! zat daarmee in elk geval warm
En kijk eens met print_r($recaptcha); wat die voor waarde bevat.
Code (php)
1
2
3
2
3
stdClass Object ( [success] => [error-codes] => Array ( [0] => missing-input-response ) )
Herstel uw fout!
Herstel uw fout!
Gewijzigd op 29/01/2019 21:22:52 door Roland Haastregt
Kan diverse oorzaken hebben.
zal morgen daar zelf ook ff kijken of ik iets kan vinden.