minimale tijd instellen om een mailformulier in te vullen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rob Arnoe

Rob Arnoe

03/05/2017 15:33:20
Quote Anchor link
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:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>
 
PHP hulp

PHP hulp

23/11/2024 01:29:42
 
Marthijn Buijs

Marthijn Buijs

03/05/2017 16:00:30
Quote Anchor link
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.
Gewijzigd op 03/05/2017 16:02:59 door Marthijn Buijs
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2017 16:22:24
Quote Anchor link
@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?
 
Rob Arnoe

Rob Arnoe

03/05/2017 16:43:00
Quote Anchor link
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2017 16:51:03
Quote Anchor link
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...
 
Rob Arnoe

Rob Arnoe

03/05/2017 16:57:29
Quote Anchor link
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
Gewijzigd op 03/05/2017 17:18:00 door Rob Arnoe
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2017 17:08:52
Quote Anchor link
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.
 
Rob Arnoe

Rob Arnoe

03/05/2017 17:16:15
Quote Anchor link
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>
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2017 17:36:25
Quote Anchor link
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.
 
Rob Arnoe

Rob Arnoe

03/05/2017 17:38:42
Quote Anchor link
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
Gewijzigd op 03/05/2017 17:41:21 door Rob Arnoe
 
Thomas van den Heuvel

Thomas van den Heuvel

03/05/2017 17:49:11
Quote Anchor link
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.
Gewijzigd op 03/05/2017 17:51:00 door Thomas van den Heuvel
 
Rob Arnoe

Rob Arnoe

03/05/2017 18:16:55
Quote Anchor link
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?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>
 
- Ariën  -
Beheerder

- Ariën -

03/05/2017 19:09:41
Quote Anchor link
Na je veldvalidatie bovenaan je script kan je de cURL-controle naar de Google server sturen.
 
Rob Arnoe

Rob Arnoe

03/05/2017 19:25:34
Quote Anchor link
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!
 
- Ariën  -
Beheerder

- Ariën -

03/05/2017 19:29:34
Quote Anchor link
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?
 
Rob Arnoe

Rob Arnoe

04/05/2017 12:09:13
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

04/05/2017 13:19:41
Quote Anchor link
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.
 
Rob Arnoe

Rob Arnoe

04/05/2017 13:21:47
Quote Anchor link
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
Gewijzigd op 04/05/2017 13:22:44 door Rob Arnoe
 
- Ariën  -
Beheerder

- Ariën -

04/05/2017 13:33:24
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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]!";    
}

?>


Edit: Quote-fix!
Gewijzigd op 04/05/2017 13:40:04 door - Ariën -
 
Rob Arnoe

Rob Arnoe

04/05/2017 13:40:26
Quote Anchor link
ok tx
 
- Ariën  -
Beheerder

- Ariën -

04/05/2017 13:41:54
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.