Hallo zusammen,
trotz eingebautes Captcha kommen sehr viele Spam Nachrichten.
Hat jemand eine Ahnung, wie ich dies unterbinden kann?
Vielen dank ![]()
Hallo zusammen,
trotz eingebautes Captcha kommen sehr viele Spam Nachrichten.
Hat jemand eine Ahnung, wie ich dies unterbinden kann?
Vielen dank ![]()
schau dir mal <we:formToken/> und <we:ifFormToken/> an. Das könnte evtl. bei automatisierten Anfragen helfen. Gibt aber noch ein paar weitere Tricks.
Hallo,
ich nutze dagegen mittlerweile mehrere Sachen.
Ein Honeypot. Ein per CSS verstecktes Textfeld, das bei normaler Nutzung des Formulars leer sein sollte. Das stürzen sich die Bots gerne drauf und befüllen es.
Ein Zeitstempel, die Bots versenden eher in 1-2 Sekunden die Formulare, alles unter 10 Sekunden ist bei mir SPAM.
Dann prüfe ich auch bei Textareas oder anderen ausgewählten Feldern den Inhalt auf Keywords wie z.B. Links usw.
Was eigentlich nicht gegen SPAM gedacht ist, sind CSRF-Token welche ich bei jedem Abschicken des Formulars mit einer Session abgleiche und immer wieder aktualisiere. Da hatte ich hier und da auch schon gesehen, dass versucht wurde die Formulare ohne gültige Session zu versenden. Wie oben erwähnt mal <we:ifFormToken/> einsetzen.
Leider werden die Bots immer intelligenter, z.B. langsameres Versenden hier und da, sodass der Zeitstempel nicht mehr greift oder der Honeypot wird auch ab und zu erkannt.
Bisher funktionieren diese Methoden zusammen immer noch sehr gut, als letzte Maßnahme kommt eigentlich nur noch ein Captcha bei mir.
Gruß
Heiko
Ich danke euch vielmals für eure schnellen Antworten ![]()
Hätten Ihr Code Snippets, mit denen ich etwas anfangen könnte?
Wie nutzt man <we:ifFormToken/> am besten in diesem Fall?
@Heiko Ich habe das webedition captcha eingebunden, aber dies schein nicht ausreichend ![]()
Da ich die Formulare per AJAX versende, mache ich alles mit eigener PHP-Programmierung.
Quick & Dirty:
Wir nutzen mittlerweile: https://www.cloudflare.com/products/turnstile/
Bisher bin ich sehr zufrieden, super einfach einzubinden und oft braucht es keine Interaktion des Nutzers.
Die grafischen Captchas werden immer leichter mit Bilderkennung überwunden.
Ich habe gute Erfahrungen mit turnstile bei einer statischen Seite (ohne WE) gemacht und möchte das jetzt auch in WE nutzen. Die Frage ist, wie das am besten im Template eingebunden wird. Vermutlich über eine classe per include.
Hättest Du ein Script-Beispiel für ein Kontaktformular mit we:form?
Ich kann auch noch empfehlen JS zu nutzen um ggf. damit Elemente zu besetzen. Das werten die wenigsten Bots aus, v.a. wenn es in externen Skripten steckt. Gibt genug offene Relays, das sie sich an sowas nicht so schnell die Zähne ausbeißen.
Ich habe gute Erfahrungen mit turnstile bei einer statischen Seite (ohne WE) gemacht und möchte das jetzt auch in WE nutzen. Die Frage ist, wie das am besten im Template eingebunden wird. Vermutlich über eine classe per include.
Hättest Du ein Script-Beispiel für ein Kontaktformular mit we:form?
Das sehr einfach ergänzt.
Du bekommst ja einen public und einen secret key und den Rest an Code kannst du von Cloudflare direkt kopieren.
Das eingesetzte DIV rendert dann mit Hilfe des JS die Prüfung fürs Frontend.
Im Backend nehmen wir dann den übertragenen Key und schicken den an Cloudflare zum prüfen. Es gibt dann einen entsprechenden Response.
Grundsätzlich kannst du beim we:form vorgehen wie bei einem klassischen html form. Ist ja auch eins ![]()
Grundsätzlich kannst du beim we:form vorgehen wie bei einem klassischen html form. Ist ja auch eins
Ahhh, echt? Das muss einem Dummie auch gesagt werden ![]()
So funktioniert es bei mir:
1. Kontaktform
Mit Cloudflare-Script. Absenden verlinkt auf send.php
<we:sessionStart />
<!DOCTYPE HTML>
<html dir="ltr" lang='de'>
<head>
<we:css id="65" />
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" defer></script>
</head>
<body>
<we:ifNotEditmode>
<section class="container mt-5">
<div class="row">
<div class="col-md-6">
<we:form name="kontaktformular" method="post" class="form-horizontal" id="156" remove="Absenden" charset="UTF-8">
<input type="hidden" name="subject" value="Kontaktanfrage">
<h4 class="h3">Formular</h4>
<div class="col-md-12">
<div class="mb-4">
<label for="Name" class="form-label-lg">Name</label>
<input class="form-control border-red" type="text" name="name" id="Name" required placeholder="Ihr Name" required>
</div>
</div>
<div class="col-md-12">
<div class="mb-4">
<label for="Telefon" class="form-label-lg">Telefon</label>
<input class="form-control border-red" type="text" name="telefon" id="Telefon" placeholder="Telefon" required>
</div>
</div>
<div class="col-md-12">
<div class="mb-4">
<label for="email" class="form-label-lg">E-Mail</label>
<input class="form-control border-red" type="email" name="email" id="email" required placeholder="Gültige E-Mail-Adresse" required>
</div>
</div>
<div class="col-md-12">
<div class="mb-4 mt-2">
<label for="Nachricht" class="form-label-lg">Ihre Nachricht</label>
<textarea name="message" class="form-control border-red" id="Nachricht" rows="5" placeholder="Ihre Nachricht" required></textarea>
</div>
</div>
<div class="col-md-12 mb-3">
<p class="small">Mit dem Absenden dieses Formulars akzeptieren Sie unsere <a href="/datenschutzerklaerung.html">Datenschutzerklärung</a>.</p>
</div>
<div class="col-md-12 mb-3">
<div class="cf-turnstile" data-sitekey="YOUR DATA SITE KEY" ></div>
</div>
<div class="mb-4"><input type="submit" name="submit" id="approve" class="btn btn-primary btn-lg" style="width:200px;" value="Absenden"></div>
</we:form>
</div>
</div>
</section>
<we:js id="67" />
</we:ifNotEditmode>
</body>
</html>
Display More
2. send.php -> WE include mit serverseitigem turnstile check
<?php
$msg = '';
// Define your secret key
$secretKey = 'YOUR SECRET KEY';
// Get response token from the form
$responseToken = $_POST['cf-turnstile-response'];
// Get user's IP address
$remoteIP = $_SERVER['REMOTE_ADDR'];
// Prepare data for the POST request
$data = array(
'secret' => $secretKey,
'response' => $responseToken,
'remoteip' => $remoteIP
);
// Initialize curl session
$ch = curl_init();
// Set curl options
curl_setopt($ch, CURLOPT_URL, 'https://challenges.cloudflare.com/turnstile/v0/siteverify');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute the POST request
$response = curl_exec($ch);
// Close curl session
curl_close($ch);
// Decode JSON response
$result = json_decode($response, true);
// Check if verification was successful
if ($result && isset($result['success']) && $result['success'] === true) {
// Verification successful, proceed with sendmail
$msg = 'success';
} else {
// Verification failed, handle error
$msg = 'failed';
}
?>
Display More
3. send.php -> HTML
<we:include type="template" id="29" />
<we:sessionStart />
<!DOCTYPE HTML>
<html dir="ltr" lang='<we:pageLanguage type="language" />'>
<head>
<we:title></we:title>
<we:description></we:description>
<we:keywords></we:keywords>
<we:charset defined="UTF-8">UTF-8</we:charset>
<we:css id="65" />
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" defer></script>
</head>
<body>
<we:ifNotEditmode>
<section class="container mt-5">
<div class="row">
<div class="col-md-6">
<we:comment>sendmail nach Absenden des Formulars</we:comment>
<we:ifVar match="success" name="msg" type="global">
<we:sendMail from="noreply@beispiel.de" recipient="mail@beispiel.de" id="155" subject="Anfrage von der Website"/>
<div class="alert alert-success" role="alert">
Vielen Dank für Ihre Nachricht! Wir melden uns schnellstmöglich bei Ihnen!
</div>
</we:ifVar>
<we:ifVar match="failed" name="msg" type="global">
<div class="alert alert-danger" role="alert">
Fehler - ein Spamversuch ist unterbunden worden.
</div>
</we:ifVar>
</div>
</div>
</section>
<we:js id="67" />
</we:ifNotEditmode>
</body>
</html>
Display More
Ihr müßt nur überlegen, welche Informationen ggf. an den Dienstleister fliesen und dies ggf auch dokumentieren. => Tracking, ....
Exakt, es muss auf jeden Fall in die DSGVO. Je nach Endgerät werden Persönliche Daten (IP-Adresse und weitere Metriken) genutzt um die Besucher zu verifizieren:
Don’t have an account yet? Register yourself now and be a part of our community!