Recaptcha V2 wordt niet gecontroleerd - andere code

Status
Niet open voor verdere reacties.
Is het niet handiger om het mailadres van je klant uit het formulier te gebruiken in je Reply-To: header?
 
Er is een foutje in dit stukje code geslopen omdat code van 2 verschillende berichtjes is samengevoegd.
Je krijgt hiermee een dubbele include als de reCaptcha is gelukt én de email is verstuurd.
Code:
if ($hasToken === true && $capVerify === true) {
    if (mail($emailkruse, $onderwerp, $bericht, $headers)) {
        $mailsuccess = true;
        include($nextpage); // Toon de volgende pagina
    } else {
        $mailsuccess = false;
    }
}
if ($mailsuccess === true) {
    // ga naar bedankpagina
    include($nextpage); // Toon de volgende pagina
} else {
    // een bericht dat mail niet is verstuurd
    include($faultpage); // Toon de volgende pagina
}

Je kan het oplossen (en wat korter maken) door de code hierboven te vervangen door de code hieronder.
Code:
$mailsuccess = false;
if ($hasToken === true && $capVerify === true) {
    $mailsuccess = mail($emailkruse, $onderwerp, $bericht, $headers);
}
// $nextpage is bedankpagina. $faultpage is bericht 'email niet verstuurd'
if ($mailsuccess) include($nextpage); else include($faultpage);

aanvulling:
De maximale lengte in een input is <input maxlength="...">
Je hebt een keer een tikfoutje gemaakt en dat overal naar toe gekopieerd ;)
 
Laatst bewerkt:
Bedankt @bron voor de aanvullingen. Het is code van iemand anders en ik ben wat dyslectisch dus fijn dat je het max-length hebt opgemerkt :)
Ik heb de code vervangen getest en het werkt nog steeds ;-)

@php4u ah ja klopt, die websitenaam slaat natuurlijk nergens op bij reply-to.

Nogmaals, dank jullie wel! :thumb:
 
Hallo

Ik haak hier maar ff op in

Ik heb ook Recaptcha V2 in een formulier/

Vaak kan ik gewoon het selectie vakje aanvinken , maar af en toe komen de afbeeldingen en moet men bijv.. de afbeeldingen met auto's aanvinken.

Dit laatste wil ik niet , is hier een oplossing voor?

Of andere methode om form te beveiligen , bijv.. vraag stellen en oplossing in database
 
Dit laatste wil ik niet , is hier een oplossing voor?
Nee, hier is geen oplossing voor omdat dit bij reCaptcha v2 het principe is waar de antispam mee werkt. In het algemeen krijgen mensen die een Google account hebben (bijv. omdat ze Gmail gebruiken) én in Goolge zijn ingelogd de plaatjes minder vaak te zien.

Je kan overstappen op reCaptcha v3 omdat die geen plaatjes laat zien. v3 kijkt naar de manier waarop een formulier wordt ingevuld en geeft in een score aan hoe waarschijnlijk het is dat een mens het formulier heeft ingevuld. v3 is nog in 'beta' fase en wat lastiger implementeren.

btw: de huidige spam software heeft geen moeite met reCaptcha 1, 2 en 3. Ook leest spam software probleemloos alle vervormde letter/cijfer captcha plaatjes. De echte spammers houd je er helaas niet mee tegen.
 
Die plaatjes die je ziet is nou juist de kracht van re-Captcha. Op die manier worden botjes nou buiten gehouden. Je kan in je dashboard wel de gradatie van de controle aanpassen, maar er zijn altijd momenten dat iemand regelmatig een plaatjespuzzel zal zien ;).

Bij V3 gaat de controle 'onder water'. Maar zoals Bron zegt is dit nog in ontwikkeling.
 
Je ziet bijv op youtu.be/F5hasIEO-OA dat reCaptcha v2 niet meer de oplossing is.
Voor reCaptcha v3 is er ook al een programma die dit binnen een paar seconden omzeilt.

Een eenvoudige manier om spam te verminderen is het blokkeren van formulieren waarin // in de tekst van een invulveld staat.
Dan zet je onder het formulier een zin "berichten met // in een invulveld worden niet verstuurd."
Hiermee voorkom je dat je emails met een linkje krijgt (9 op de 10 spammers stuurt een email met een linkje).
 
@bron jeetje zeg dat filmpje, dus er is software die automatisch de juiste bus of oversteekplaats of ... plaatjes selecteert. Goed om zo'n filmpje eens te zien.
Kan je nog uitleggen hoe je dat met // bedoeld? Ik snap het niet.
 
// is onderdeel van een URL, en URL 's worden veel geplaatst door spammers.
 
Voor de liefhebbers een ingekort stukje om spam wat te verminderen.
PHP:
// verplichte veldnamen
$requiredNames = ["naam", "email", "bericht"];

// zwarte lijst > stukken tekst die niet in het bericht mogen staan
$blackPhrase = ["Ð", "dating", "$", "zelf verder uitbreiden"];

// Is method=get? Dan redirect
if (strtoupper($_SERVER["REQUEST_METHOD"]) != "POST") {
    header("Location: https://www.example.nl/");
    exit;
}

// redirect in bijzondere gevallen
foreach ($requiredNames as $key) {
    // Is een verplicht veld niet aanwezig? Dan redirect.
    if (!array_key_exists($key, $_POST)) {
        header("Location: https://www.example.nl/");
        exit;
    }
    // Bevat een veld een url? Dan redirect.
    $regex = "/^((?!https?:|ftp:|www|\.php|\.htm|\\\\|\/\/).)*$/i";
    if (preg_match($regex, $key)) {
        header("Location: https://www.example.nl/");
        exit;
    }
}

// naam
$naam = trim($_POST["naam"]);
if (strlen() < 3) {
    // bericht niet versturen, toon melding dat naam te kort is
}

// email
$email = trim($_POST["email"]);
$regex = "/^([a-z0-9_\+\-\.]{1,40})@([a-z0-9\-\.]{2,40})\.(biz|com|edu|eu|info|int|net|org|outlook|be|dk|de|fi|fr|ie|it|lu|nl|no|at|pt|es|uk|se|ch)$/i";
if (!preg_match($regex, $email) {
    // bericht niet versturen, toon melding dat emailadres onjuist is
}

// bericht. Bevat de textarea woorden op de zwarte lijst?
$message = trim($_POST["bericht"]);
foreach ($blackPhrase as $phrase) {
    if (stripos($message, $phrase) !== false) {
        header("Location: https://www.example.nl/");
        exit;
    }
}
if (strlen($message) < 8) {
    // bericht niet versturen, toon melding dat bericht te kort is
}

Vergeet niet onder je textarea te vermelden dat "Een bericht met een linkje niet wordt verstuurd".
 
Laatst bewerkt:
Ter info: Ik gebruik bij #51 niet deze PHP validatie:
Code:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { ... }
omdat dan a@b.c als ok wordt gevalideerd.

Met de preg_match die ik gebruik moet dit a@bb.nl zijn (of een andere tld in de regex).
Emailadres a@bb.ru wordt dus als 'niet ok' gevalideerd.

Validatie van het emailadres is trouwens niet zinvol tegen spam. Het is alleen bedoeld tegen typfouten van een 'gewone' bezoeker.
 
Laatst bewerkt:
@php4u ik snap het nu, bedankt voor de toelichting ;)

@bron, fijn de aanvulling code die je stuurt.
 
Als extra beveiliging in een formulier heb ik ooit eens een checkbox gemaakt, en die met CSS onzichtbaar gemaakt. Zodra deze checkbox toch aangevinkt was, stopte het script met de uitvoer. Werkte goed i.c.m een captcha.
 
een checkbox gemaakt, en die met CSS onzichtbaar gemaakt.
Dit is een 'honeypot' (honingpot/bijen vs inputveld/spambots).

Een honeypot moet zo aantrekkelijk mogelijk eruit zien voor een spambot, bijvoorbeeld met tekst
Code:
<div style="display:none">
 <label style="display:inherit">Emailaddress</label>
 <input name="emailaddress" placeholder="Enter emailaddress" value="" type="text" style="display:inherit">
</div>
In je validatie moet dit veld leeg zijn, zo niet dan is het een spambot.

Helaas zijn de huidige spambots te intelligent om in een honeypot te vliegen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan