SuperMailer Script newsletter.php zur Newsletteranmeldung / Newsletterabmeldung
mit Google reCAPTCHAv3 schützen

Immer öfter werden Scripte durch Bots aufgerufen um zu testen ob diese z.B. für den Spam-Versand geeignet sind. Zur Vermeidung solcher Aufrufe kann ein Captcha oder Google reCAPTCHA verwendet werden.

Alternativ kann ein Captcha mit einem angezeigten Wort auf einem Bild verwendet werden, dieses Captcha setzt jedoch voraus, dass das An-/Abmeldeformular sich innerhalb einer PHP-Datei befindet. Mehr Informationen zum Captcha mit Eingabe eines Wortes.

Einbauanleitung

Das Formular für die Anmeldung/Abmeldung vom/zum Newsletter kann sich innerhalb einer HTML-Datei oder PHP-Datei befinden. Auf dem Server muss PHP 5.2 oder neuer mit aktivierten OpenSSL installiert sein. Für die Anmeldung oder Abmeldung zum Newsletter muss im Browser des Besuchers JavaScript aktiviert sein, ansonsten wird die Anmeldung immer fehlschlagen. Normale Bots, die kein JavaScript ausführen können, sind damit automatisch von der Anmeldung zum Newsletter ausgeschlossen.

 

Bei Google reCAPTCHA anmelden

Sie müssen sich bei Google reCAPTCHA anmelden, um einen geheimen (privaten) und einen Website Schlüssel (öffentlichen Schlüssel) für Ihr eigenes Captcha zu erhalten. Die Anmeldung ist unter https://www.google.com/recaptcha/ möglich.

Das Google reCAPTCHA gibt es als Version 2 und Version 3, hier wird die Version 3 erläutert. Für die Version 2 finden Sie die Anleitung unter https://www.supermailer.de/recaptcha/.

Fügen Sie bei Google reCAPTCHA Ihre eigene Webseite als Version 3, Anfragen anhand einer Punktzahl, hinzu. Geben Sie dabei alle Domains ohne www. ein, die auf den eigenen Webspace verweisen. Nur mit den angegebenen Domains wird das reCAPTCHA später funktionieren. z.B.

Google reCAPTCHA registrieren

Klicken Sie auf "Registrieren", danach werden Websiteschlüssel und geheimer Schlüssel sofort angezeigt. Diese beiden Schlüssel sind für den weiteren Einbau notwendig.

Datei mit dem Anmeldeformular und Script newsletter.php auf den lokalen Rechner speichern

Laden Sie die Datei mit dem An-/Abmeldeformular und das Script newsletter.php auf Ihren lokalen Rechner in einen beliebigen Ordner, falls sich die beiden Dateien nicht auf Ihrem lokalen Rechner befinden.

 

Modifizieren des Scripts newsletter.php und der HTML-Datei

Zur Modifikation der Dateien muss ein reiner Texteditor verwendet werden z.B. der Editor aus dem Windows-Zubehör oder Edit4Win https://www.edit4win.de/. Verwenden Sie auf keinen Fall Word oder WordPad.

 

Die HTML-Datei in diesem Beispiel besitzt folgenden Inhalt, der Aufbau Ihrer eigenen Datei mit dem Formular ist ähnlich:

<html>

<head>

<meta http-equiv="Content-Language" content="de">

<meta name="GENERATOR" content="Edit4Win">

<title>Newsletteranmeldung / Newsletterabmeldung</title>

<meta name="viewport" content="width=device-width, initial-scale=1" />

</head>

<body>

<!--Newsletteranmeldung beginnt hier-->

<form method="POST" action="newsletter.php">

  <p>Vorname:<br>

  <input type="text" name="Vorname" size="36"></p>

  <p>Name:<br>

  <input type="text" name="Nachname" size="36"></p>

  <p>E-Mail-Adresse:<br>

  <input type="text" name="EMail" size="36"></p>

  <p>Sie möchten sich zum Newsletter:</p>

  <p><input type="radio" value="subscribe" checked name="Action">Anmelden<br>

  <input type="radio" name="Action" value="unsubscribe">Abmelden</p>

  <p>&nbsp;</p>

  <p><input type="submit" value="Abschicken" name="SubmitBtn"></p>

</form>

<!--Newsletteranmeldung endet hier-->

</body>

</html>

 

 

Vor </form> fügen Sie diesen HTML-Code ein:

<!-- Google reCAPTCHAv3 -->
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response" />
<!-- Google reCAPTCHAv3 / -->

 

Nach </form> fügen Sie diesen HTML-Code ein, um das Google reCAPTCHA-JavaScript und Code für das Absenden des Formulars einzubinden:

<!-- Google reCAPTCHAv3 -->
<script src="https://www.google.com/recaptcha/api.js?render=<öffentlicher Websiteschlüssel>"></script>
<script>
<!--
function ReCaptchaOnSubmit(){
grecaptcha.ready(function() {
grecaptcha.execute("<öffentlicher Websiteschlüssel>", {action: "newsletteranmeldungabmeldung"}).then(function(token) {
document.getElementById("g-recaptcha-response").value=token;
});
});
return true;
}
var forms = document.getElementsByTagName("form");
for(var j=0; j<forms.length; j++) {
forms[j].onsubmit = ReCaptchaOnSubmit;
}
ReCaptchaOnSubmit();
-->
</script>
<!-- Google reCAPTCHAv3 / -->

Bei der Angabe <öffentlicher Websiteschlüssel> tragen Sie Ihren eigenen öffentlichen Websiteschlüssel ein, den Sie bei Google reCAPTCHA erhalten haben.

 

Übertragen Sie jetzt die modifizierte Datei per (S)FTP auf Ihren Webspace ins korrekte Verzeichnis.

 

 

Öffnen Sie jetzt das PHP-Script newsletter.php im Editor zur Bearbeitung.

Suchen Sie im Script newsletter.php nach ##################################### Spam test

Nach dieser Zeile fügen Sie diesen PHP-Code ein:

/* Google reCAPTCHAv3 */
$PrivateReCaptchaKey="<geheimer Schlüssel>";
$Score=0.5;


$IgnoreCaptcha = false;
if(isset($_GET["IgnoreCaptcha"])) {
$IgnoreCaptcha = true;
}

if ( !$IgnoreCaptcha && ($Action == "subscribe" || $Action == "unsubscribe" || $Action == "edit") ) {
if ( !reCAPTCHACheck() ) {
print "Wir k&ouml;nnen leider Ihre Anmeldung oder Abmeldung zu/von unserem Newsletter nicht akzeptieren!";
exit;
}
}
/* Google reCAPTCHAv3 / */
 

Bei der Angabe <geheimer Schlüssel> fügen Sie Ihren geheimen Schlüssel ein, den Sie bei Google reCAPTCHA erhalten haben. Die Fehlermeldung "Wir k&ouml;nnen leider Ihre Anmeldung oder Abmeldung zu/von unserem Newsletter nicht akzeptieren!" können Sie selbst beliebig anpassen und ebenfalls in andere Sprachen übersetzen. Diese Fehlermeldung wird immer dann ausgegeben werden, wenn kein JavaScript im Browser aktiviert ist, die Google-Bewertung des Besuchers unter 0,5 Punkten liegt oder die Google-Webseite nicht erreichbar ist.

 

Im Script newsletter.php gehen Sie ganz ans Ende der Datei, VOR ?> fügen Sie diesen PHP-Code ein:

/* Google reCAPTCHAv3 */
function AskGoogle($host, $path, $data, $port=80){
$peer_key = version_compare(PHP_VERSION, '5.6.0', '<') ? 'CN_name' : 'peer_name';

$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => "POST",
'content' => $data,
'Connection: close',
// Force the peer to validate (not needed in 5.6.0+, but still works
'verify_peer' => true,
'timeout' => 30,
$peer_key => $host,
),
);

$URL = $host."/".$path;
if($port != 443)
$URL = "https://".$URL;
else
$URL = "https://".$URL;

$context = stream_context_create($options);
$ret = file_get_contents($URL, false, $context);
if($ret === false)
return false;
else
return $ret;
}

function reCAPTCHACheck(){
global $REMOTE_ADDR, $PrivateReCaptchaKey, $Score;
if(empty($_POST["g-recaptcha-response"])) return false;

$data = "secret=".$PrivateReCaptchaKey."&response=".$_POST["g-recaptcha-response"]."&remoteip=".$REMOTE_ADDR;
$errno = "";
$errstr = "";

$resp = AskGoogle("www.google.com", "/recaptcha/api/siteverify", $data, 443);

if (!$resp || strpos($resp, '"success": true') === false) {
return false;
}

$responseKeys = json_decode($resp, true);
if(!isset($responseKeys))
return false;

if ( !isset($responseKeys["action"]) || $responseKeys["action"] != "newsletteranmeldungabmeldung" ) {
return false;
}

if ( !isset($responseKeys["score"]) || floatval(str_replace(",", ".", $responseKeys["score"])) < $Score ) {
return false;
}

unset($_POST["g-recaptcha-response"]);

return true;
}

/* Google reCAPTCHAv3 / */

 

Speichern Sie die Datei und übertragen Sie diese ebenfalls auf Ihren Webspace ins korrekte Verzeichnis.

 

Rufen Sie jetzt im Browser die Seite mit der Newsletter-Anmeldung auf und testen Sie die Anmeldung/Abmeldung, dabei muss unten rechts das Google reCAPTCHA-Logo erscheinen.


Beispiel:

Browseransicht reCAPTCHA 

 

Abmeldelink für den Newsletter selbst modifizieren

Sollten Sie im Newslettertext selbst einen Abmeldelink zum direkten Abmelden vom Newsletter verwenden, dann müssen Sie diesen Link korrigieren, d.h. um einen Parameter &IgnoreCaptcha=1 erweitern.

Ist der Abmeldelink unter Menü Projekt – Abmeldelink eingetragen, dann fügen Sie nach &Action=unsubscribe &IgnoreCaptcha=1 in der HTML- und Textvariante des Links hinzu. Die übrigen Scriptparameter müssen unbedingt erhalten bleiben!

Ist der Abmeldelink direkt im E-Mail-Text hinterlegt, dann klicken Sie im SuperMailer mit der rechten Maustaste auf den Link und wählen Sie Hyperlinkeigenschaften. Fügen Sie nach &Action=unsubscribe &IgnoreCaptcha=1 ein. Die übrigen Scriptparameter müssen unbedingt erhalten bleiben!

Beispiel:

Änderung des Abmeldelinks in SuperMailer 

 

Jetzt ist das Script newsletter.php mit reCAPTCHA geschützt.
Die Texte im Anmeldeformular können natürlich verändert werden. Ebenfalls kann eine HTML-Seite, anstatt der Fehlermeldung im Script newsletter.php analog der nicht oder falsch eingegebenen E-Mail-Adresse ausgegeben werden. Die Modifikation müssen Sie selbst vornehmen.

 

Copyright © 2016-2019 Mirko Böer Softwareentwicklungen, Newsletter Software, Serienmail, Werbemail und Rundmail Software SuperMailer

 

 

 

Siehe dazu auch:
SuperMailer Script newsletter.php zur Newsletteranmeldung / Newsletterabmeldung mit einem Captcha schützen
SuperMailer Script newsletter.php zur Newsletteranmeldung / Newsletterabmeldung mit einem reCAPTCHAv2 schützen