minimale tijd instellen om een mailformulier in te vullen
Een klant van mij ontvangt erg veel spam.
Ik lees nu op internet dat je ipv recaptcha misschien beter een minimale invultijd in kan stellen.
Mensen hebben vaak wat langer nodig om een emailformulier in te vullen dan een bot.
Weet iemand misschien hoe ik dit in kan stellen?
Dit is overigens mijn php formulier welke ik gebruik om het emailformulier te laten verzenden:
Ik lees nu op internet dat je ipv recaptcha misschien beter een minimale invultijd in kan stellen.
Mensen hebben vaak wat langer nodig om een emailformulier in te vullen dan een bot.
Weet iemand misschien hoe ik dit in kan stellen?
Dit is overigens mijn php formulier welke ik gebruik om het emailformulier te laten verzenden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])) {
echo 'U heeft niet alle velden ingevuld!';
exit;
}
$naam = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$tijd = time();
$datum = strftime('%d/%m/%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$message.'
------------------------------------';
mail('[email protected]', 'Bericht van website', $message, 'From: '.$email);
header('location:http://www.dongenculinair.com/bedankt.html');
?>
if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])) {
echo 'U heeft niet alle velden ingevuld!';
exit;
}
$naam = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$tijd = time();
$datum = strftime('%d/%m/%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$message.'
------------------------------------';
mail('[email protected]', 'Bericht van website', $message, 'From: '.$email);
header('location:http://www.dongenculinair.com/bedankt.html');
?>
Ik heb zoiets ooit opgelost door door een hidden input mee te geven in de form-tag met de tijd (time-functie) en vervolgens de time-functie gebruiken als er op de knop is gedrukt die secondes met elkaar vergelijken, een bot doet alles binnen 10 seconden lijkt mij, een mens niet.
Edit:
Verder zou ik op de website geen afbeeldingen gebruiken van 1.2 MB, dit kost allemaal laadtijd en bandbreedte.
Edit:
Verder zou ik op de website geen afbeeldingen gebruiken van 1.2 MB, dit kost allemaal laadtijd en bandbreedte.
Gewijzigd op 03/05/2017 16:02:59 door Marthijn Buijs
@Rob, je hebt het over ReCaptcha, maar ik zie in bovenstaande formuliervalidatie geen controle hierop? Weet je zeker dat je de ReCaptcha wel op de goede manier gebruikt?
Gebruik je uberhaupt Recaptcha of een ander middel om spam buiten te houden, zoals bijvoorbeeld een random token?
Gebruik je uberhaupt Recaptcha of een ander middel om spam buiten te houden, zoals bijvoorbeeld een random token?
Thomas, Ik heb ook geen recaptcha ingesteld, vandaar dat je hier niets van ziet.
Maarten. Wat jij zegt lijkt me een goed idee.
Maar ik heb geen idee hoe ik dat zou moeten doen.
Moet ik iets toevoegen aan het bestaand php formulier?
Moet ik iets toevoegen in mijn html pagina waar het formulier staat?
Maarten. Wat jij zegt lijkt me een goed idee.
Maar ik heb geen idee hoe ik dat zou moeten doen.
Moet ik iets toevoegen aan het bestaand php formulier?
Moet ik iets toevoegen in mijn html pagina waar het formulier staat?
Die 10 seconden gaan niet altijd werken lijkt mij. Stel dat iemand iets verkeerd invult, de validatie schopt je dan terug naar het formulier als het goed is? De gebruiker vult het foute gegeven in een mum van tijd aan. Het formulier wordt binnen het tijdsbestek opnieuw gepost. Wat gebeurt er dan?
En wat als iemand vaker dit formulier invult (mits van toepassing). Browsers hebben zoiets als "autocomplete" - dit stelt iemand in staat om redelijk rap een formulier in te vullen. Afhankelijk van het type formulier en het gebruik is 10 seconden mogelijk niet altijd toereikend dus deze oplossing zal niet in alle gevallen bruikbaar zijn.
Ik denk, persoonlijk, dat je al een heel eind komt met een controle die nagaat of het formulier wordt verstuurd vanaf jouw site middels het eerder genoemde random token. En als er wat geavanceerdere bots op je site actief zijn kun je nadenken over additionele maatregelen zoals een "honeypot", een verborgen element waar een normale gebruiker niets mee doet maar een bot grif iets in zal vullen.
Ook zou je de spam zelf kunnen analyseren en bij kunnen houden waar de form-submits vandaan komen. Mogelijk beperken deze zich tot één of enkele IP's. Deze zou je dan op een blacklist kunnen gooien.
Of je implementeert bestaande oplossingen, zoals een (Re)Captcha...
En wat als iemand vaker dit formulier invult (mits van toepassing). Browsers hebben zoiets als "autocomplete" - dit stelt iemand in staat om redelijk rap een formulier in te vullen. Afhankelijk van het type formulier en het gebruik is 10 seconden mogelijk niet altijd toereikend dus deze oplossing zal niet in alle gevallen bruikbaar zijn.
Ik denk, persoonlijk, dat je al een heel eind komt met een controle die nagaat of het formulier wordt verstuurd vanaf jouw site middels het eerder genoemde random token. En als er wat geavanceerdere bots op je site actief zijn kun je nadenken over additionele maatregelen zoals een "honeypot", een verborgen element waar een normale gebruiker niets mee doet maar een bot grif iets in zal vullen.
Ook zou je de spam zelf kunnen analyseren en bij kunnen houden waar de form-submits vandaan komen. Mogelijk beperken deze zich tot één of enkele IP's. Deze zou je dan op een blacklist kunnen gooien.
Of je implementeert bestaande oplossingen, zoals een (Re)Captcha...
Met recaptcha ben ik al een hele dag bezig maar dit krijg ik niet werkend.
Ik heb op 2 websites de recaptcha staan:
Bij beide pagina's kan ik gewoon de mail verzenden zonder eerst de recaptcha op te hoeven lossen.
Op deze pagina van google : https://www.google.com/recaptcha/admin#site/337619931 staat:
"Step2 server side integration"
Ik heb geen flauw benul wat ik hier moet doen.
Ben bij elkaar al anderhalve dag bezig met recaptcha of eventuele andere oplossingen zonder enig resultaat. Wordt er langzaamaan gek van. Het zou niet zo heel moeilijk moeten zijn.
Via het mailformulier van heb ik sinds gisteren meer dan 50 mailtjes ontvangen zonder inhoud.
Allemaal andere afzenders, maar hoofdzakelijk gmail.
De namen vd afzenders is telkens iets in de geest van 5909e24365fb of
De namen beginnen allemaal met 5908 of 5909, wat hierachter staat varieert steeds
Ik heb op 2 websites de recaptcha staan:
Bij beide pagina's kan ik gewoon de mail verzenden zonder eerst de recaptcha op te hoeven lossen.
Op deze pagina van google : https://www.google.com/recaptcha/admin#site/337619931 staat:
"Step2 server side integration"
Ik heb geen flauw benul wat ik hier moet doen.
Ben bij elkaar al anderhalve dag bezig met recaptcha of eventuele andere oplossingen zonder enig resultaat. Wordt er langzaamaan gek van. Het zou niet zo heel moeilijk moeten zijn.
Via het mailformulier van heb ik sinds gisteren meer dan 50 mailtjes ontvangen zonder inhoud.
Allemaal andere afzenders, maar hoofdzakelijk gmail.
De namen vd afzenders is telkens iets in de geest van 5909e24365fb of
De namen beginnen allemaal met 5908 of 5909, wat hierachter staat varieert steeds
Gewijzigd op 03/05/2017 17:18:00 door Rob Arnoe
Begin bij het begin. Heb je een API-key aangemaakt voor dat domein? Dat stelt je in staat om de ReCaptcha op een specifieke website te gebruiken.
ja.
ik heb dit geplaatst net voor de "head tag"
<script src='https://www.google.com/recaptcha/api.js'></script>
en ik heb dit geplaatst op de plaats waar de recaptcha moet komen te staan
<div class="g-recaptcha" data-sitekey="6Lfbqx8UAAAAAM2i4q9qAnJtrUCDe2tyjPR7SYM4"></div>
ik heb dit geplaatst net voor de "head tag"
<script src='https://www.google.com/recaptcha/api.js'></script>
en ik heb dit geplaatst op de plaats waar de recaptcha moet komen te staan
<div class="g-recaptcha" data-sitekey="6Lfbqx8UAAAAAM2i4q9qAnJtrUCDe2tyjPR7SYM4"></div>
Dan ben je volgens mij al een heel eind? Het enige wat je dan nog moet doen is "het antwoord controleren" na submitten van een formulier in de validatiestap. Als je altijd door je ReCaptcha heenkomt zonder dat je de doorgaans verplichte stappen hebt doorlopen is er iets mis natuurlijk.
En hier is waar het fout gaat.
Op de pagina van google staat "Step2 server side integration"
Ik heb geen flauw benul wat ik hier moet doen.
Hier staat uitleg waar ik echt geen bal van snap:
https://developers.google.com/recaptcha/docs/verify
Op de pagina van google staat "Step2 server side integration"
Ik heb geen flauw benul wat ik hier moet doen.
Hier staat uitleg waar ik echt geen bal van snap:
https://developers.google.com/recaptcha/docs/verify
Gewijzigd op 03/05/2017 17:41:21 door Rob Arnoe
Teken eens een plaatje.
Iemand submit een formulier, in de informatie die je ontvangt zit tevens een POST veld genaamd g-recaptcha-response. Deze krijg je terug van de ReCaptcha functionaliteit. Vervolgens vraag je opnieuw aan ReCaptcha (met behulp van g-recaptcha-response) via bijvoorbeeld een cURL POST of de submit geldig was. Je krijgt dan wat JSON data terug, waaronder het veld "success". Hier kun je uit afleiden of de "ReCaptcha challenge" is volbracht.
Kort door de bocht schakel je dus een externe partij in (ReCaptcha) die beoordeelt of een formulier-submit door een mens is verricht of een robot. Vervolgens vraag je na afloop opnieuw aan deze partij "dit is de informatie die ik terug ontvangen hebt, ziet dit er kosher uit?" waarop de externe partij antwoordt met "ja" of "nee". Indien het antwoord "ja" is kun je met een aan zekerheid grenzende waarschijnlijkheid aannemen dat het een valide submit was waarna je het formulier verder kunt verwerken.
Iemand submit een formulier, in de informatie die je ontvangt zit tevens een POST veld genaamd g-recaptcha-response. Deze krijg je terug van de ReCaptcha functionaliteit. Vervolgens vraag je opnieuw aan ReCaptcha (met behulp van g-recaptcha-response) via bijvoorbeeld een cURL POST of de submit geldig was. Je krijgt dan wat JSON data terug, waaronder het veld "success". Hier kun je uit afleiden of de "ReCaptcha challenge" is volbracht.
Kort door de bocht schakel je dus een externe partij in (ReCaptcha) die beoordeelt of een formulier-submit door een mens is verricht of een robot. Vervolgens vraag je na afloop opnieuw aan deze partij "dit is de informatie die ik terug ontvangen hebt, ziet dit er kosher uit?" waarop de externe partij antwoordt met "ja" of "nee". Indien het antwoord "ja" is kun je met een aan zekerheid grenzende waarschijnlijkheid aannemen dat het een valide submit was waarna je het formulier verder kunt verwerken.
Gewijzigd op 03/05/2017 17:51:00 door Thomas van den Heuvel
Ik begrijp het principe wel maar weet niet hoe dit toe te passen.
moet ik iets toevoegen aan mijn huidige php beatdn die er voor zorgt dat het mailformulier werkt?
moet ik een apart php bestand maken en daarnaar verwijzen?
Dit is mijn huidig php bestand wat er voor zorgt dat de mail verzonden wordt.
Moet ik hier iets aan toevoegen?
Zo ja, wat en waar?
moet ik iets toevoegen aan mijn huidige php beatdn die er voor zorgt dat het mailformulier werkt?
moet ik een apart php bestand maken en daarnaar verwijzen?
Dit is mijn huidig php bestand wat er voor zorgt dat de mail verzonden wordt.
Moet ik hier iets aan toevoegen?
Zo ja, wat en waar?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])) {
echo 'U heeft niet alle velden ingevuld!';
exit;
}
$naam = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$tijd = time();
$datum = strftime('%d/%m/%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$message.'
------------------------------------';
mail('[email protected]', 'Bericht van website', $message, 'From: '.$email);
header('location:http://www.dongenculinair.com/bedankt.html');
?>
if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])) {
echo 'U heeft niet alle velden ingevuld!';
exit;
}
$naam = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$tijd = time();
$datum = strftime('%d/%m/%y %H:%M', $tijd);
$ip = getenv('REMOTE_ADDR');
$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:
____________________________________
'.$message.'
------------------------------------';
mail('[email protected]', 'Bericht van website', $message, 'From: '.$email);
header('location:http://www.dongenculinair.com/bedankt.html');
?>
Na je veldvalidatie bovenaan je script kan je de cURL-controle naar de Google server sturen.
Ik wil in eerste instantie iedereen bedanken die mij probeert te helpen.
Maar ik ben een ABSOLUTE LEEK op het gebied van php.
Ik ga me daar zsm meer in verdiepen maar daar heb ik nu niets aan.
Op deze pagina van google staat wat uitleg waar ik (zoals eerder gezegd) GEEN BAL VAN SNAP.
https://developers.google.com/recaptcha/docs/verify
Ook deze zin ("Na je veldvalidatie bovenaan je script kan je de cURL-controle naar de Google server sturen.") die ongetwijfeld goed bedoeld is, had wat mij betreft net zo goed in het chinees kunnen zijn.
Waar kan ik de php code vinden die ik moet plaatsen?????
Zelf schrijven is voor mij natuurlijk geen optie.
Kan iemand anders mijn huidige php script aanpassen met de juiste code erin?
Ik begrijp dat ik in feite alles zelf zou moeten doen maar ik heb geen idee waar te beginnen.
Het is geen gemakzucht, ben al anderhalve dag bezig!
Maar ik ben een ABSOLUTE LEEK op het gebied van php.
Ik ga me daar zsm meer in verdiepen maar daar heb ik nu niets aan.
Op deze pagina van google staat wat uitleg waar ik (zoals eerder gezegd) GEEN BAL VAN SNAP.
https://developers.google.com/recaptcha/docs/verify
Ook deze zin ("Na je veldvalidatie bovenaan je script kan je de cURL-controle naar de Google server sturen.") die ongetwijfeld goed bedoeld is, had wat mij betreft net zo goed in het chinees kunnen zijn.
Waar kan ik de php code vinden die ik moet plaatsen?????
Zelf schrijven is voor mij natuurlijk geen optie.
Kan iemand anders mijn huidige php script aanpassen met de juiste code erin?
Ik begrijp dat ik in feite alles zelf zou moeten doen maar ik heb geen idee waar te beginnen.
Het is geen gemakzucht, ben al anderhalve dag bezig!
Ik zal vanavond eens wat proberen te bakken, eerst maar even thuiskomen ;-)
Toevoeging op 04/05/2017 09:58:26:
Heb je eigenlijk al een formulier in HTML?
Toevoeging op 04/05/2017 09:58:26:
Heb je eigenlijk al een formulier in HTML?
Ik ben vandaag weer 5 uur bezig geweest en ik heb het werken kunnen maken met behulp van deze pagina:
http://www.codexworld.com/new-google-recaptcha-with-php/
iedereen bedankt voor de tips
http://www.codexworld.com/new-google-recaptcha-with-php/
iedereen bedankt voor de tips
Fijn dat het met die tutorial gelukt is. Ik raad wel aan om geen @'jes te gebruiken in je script, omdat je daarmee daarmee foutmeldingen weg kan moffelen. Gebruik daarom een mooi if-else structuur bij je mail-functie om te kijken of er wel of niet gemaild is vanuit PHP.
Zoals eerder gezegd ben ik een leek op het gebied van php en heb dus geen idee wat je hiermee bedoeld.
Ben blij dat het werkt en durf er niets meer aan te veranderen
Ben blij dat het werkt en durf er niets meer aan te veranderen
Gewijzigd op 04/05/2017 13:22:44 door Rob Arnoe
Er staat voor de mail() functie nu een @, als je het script van Codexworld hebt gevolgd. En mocht de mail vanwege technische mankementen, of een fout in je mailfunctie niet verstuurd worden, dan krijgt de gebruiker gewoon onterecht een bericht over dat zijn mail verstuurd zal zijn.
Dus daarom is het raadzaam om met if-else te controleren of mail() goed werkt:
Edit: Quote-fix!
Dus daarom is het raadzaam om met if-else te controleren of mail() goed werkt:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php // deze regel is alleen vanwege de kleuren in de codeblok!!!
if(mail($to,$subject,$htmlContent,$headers)){
$succMsg = 'Your contact request have submitted successfully.';
} else {
$errMsg = "Technical failure: Mail can't send by us. Please mail the webmaster at: [email protected]!";
}
?>
if(mail($to,$subject,$htmlContent,$headers)){
$succMsg = 'Your contact request have submitted successfully.';
} else {
$errMsg = "Technical failure: Mail can't send by us. Please mail the webmaster at: [email protected]!";
}
?>
Edit: Quote-fix!
Gewijzigd op 04/05/2017 13:40:04 door - Ariën -
ok tx
Ok, veel plezier ermee!
En ik raad je aan om je toch eens te verdiepen in PHP, dan weet je in ieder geval wat er in je script gebeurt en hoe het werkt.
En ik raad je aan om je toch eens te verdiepen in PHP, dan weet je in ieder geval wat er in je script gebeurt en hoe het werkt.




