Profile

Cover photo
Rico Loschke
Works at sevenX
Attended Staatliche Studienakademie Riesa
Lives in Dresden, Deutschland
23 followers|52,057 views
AboutPosts

Stream

Rico Loschke

Shared publicly  - 
 
Man hat einen YouTube Channel und möchte die Videos daraus auch auf der eigenen Website einbinden. Jetzt kann man das Ganze natürlich manuell machen indem man zu jedem Video das Codeschnipsel zur Einbettung in die eigene Website integriert. Das bedeutet aber, dass ich mit jeden neuen Video Upload auch meine Website aktualisieren muss. Abhilfe schafft hier die von Youtube bereitgestellte API v3 mit der ich in der Lage bin, Channel-, Playlist- und Videoinformationen abzurufen und zu verarbeiten. 
 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Spam Emails aus Formularen verhindern
Spammer benutzen Spambots  die das Internet nach Formularen durchsuchen und diese automatisch auszufüllen und abzusenden. Gängige Abwehrmethode ist das bekannte Captcha, das allerdings auch häufig den Benutzer abwehrt, weil dessen kryptische Zeichen und Zahlen nicht gut zu entschlüsseln sind. Deshalb möchte ich hier Methoden vorstellen die ohne Captcha auskommen. Die gute Nachricht ist, Spambots haben Schwächen, die wir uns im Folgenden zu nutze machen werden. Dazu wird es offensichtliche und versteckte Methoden geben, die in Kombination einen sehr guten Spamschutz bieten sollten.
HTML Markup Demo
<form id="phpform" method="post" action="kontakt.php" autocomplete="off">

<p><label for="name">Name</label>
<input type="text" name="name" value=""></p>

<p><label for="email">Email</label>
<input type="text" name="email" value=""></p>

<p><label for="message">Nachricht</label><br />
<textarea name="message" rows="8"></textarea></p>

<p><input type="checkbox" name="human"> Ich versende keinen Spam</p>

<p><input type="submit" name="submit" value="Absenden"></p>

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
</form>
1. Abwehr - Checkbox Schwäche
Die offensichtliche Methode ist die Checkbox am Ende des Formulars, hier bestätigt der Benutzer, dass er es ernst meint. Ältere Spambots  können sehr gut Eingabefelder ausfüllen aber keine Checkboxen aktivieren. Somit hätten wir hier schon die erste Abwehr. Bei der Validierung können wir nun prüfen ob die Checkbox markiert wurde, ist das nicht der Fall, bekommt der reale Benutzer eine Meldung und kann es nachholen, der Spambot allerdings dreht sich im Kreis, weil er die Meldung nicht versteht, das Formular aber ohne Aktivierung nicht abgeschickt werden kann.

Da es sich bei einer Checkbox auch nur um ein HTML Element handelt, können modernere Spambots natürlich auch Checkboxen manipulieren und aktivieren. Das machen wir uns in der nächsten Methode zu nutze, indem wir eine Checkbox platzieren die nicht aktiviert werden darf. Bei der Validierung können wir nun prüfen ob diese Checkbox tatsächlich nicht aktiviert wurde oder ob der fleißige Spambot in seinem Eifer doch den Haken gesetzt hat. Wenn er es hat, wird das Formular nicht abgeschickt werden können.
2. Abwehr - CSS Schwäche
Damit die zweite Checkbox den realen Benutzer nicht verwirrt greifen wir auf eine weitere Schwäche der Spambots zurück. Sie können mit CSS Regeln nichts anfangen, deshalb platzieren wir die zweite Checkbox in einem Container, den wir via CSS Klasse ausblenden.
CSS Code
.terms { display:none; }

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
Wichtig hierbei ist den Container über die Klasse auszublenden. Das Ausblenden durch Inline CSS  <div style="display:none">...</div>  oder <input type="checkbox" style="display:none"> ist nicht geeignet, da Spammer nicht schlafen solche Angaben bereits auswerten können und das Eingabefeld dann ignorieren. Bei Ausblenden via Klasse müsste der Spambot erst einen Abgleich mit der externen CSS Datei machen, was die Hürde weiter nach oben setzt. Für reale Benutzer die CSS deaktiviert haben oder einen Screen Reader benutzen können wir im ausgeblendeten Container eine Mitteilung hinterlassen die auffordert die Felder frei zu lassen.
3. Abwehr - Honeypot
Als Honeypot bezeichnet man Eingabefelder, die vom realen Benutzer frei gelassen werden, den Spambot aber zum Ausfüllen einladen. Bei der PHP Validierung des Formulars prüfen wir dann, ob das Feld tatsächlich leer ist. Ist es nicht leer, konnte der Spambot dieser Versuchung nicht widerstehen und wir haben  die Möglichkeit ihn auszuschließen. Fügen wir unserem Formular also ein weiteres Eingabefeld hinzu
<input type="text" name="repeat_email" />
Der Name des Eingabefeldes sollte so attraktiv wie möglich sein, denn Spambots lernen ständig dazu und ignorieren gekonnt Eingabefelder die darauf schließen lassen, dass sie der Spamabwehr dienen. Im Beispiel heißt das Feld name="repeat_email" . Deshalb heißen die Checkboxen oben name="gender" und  name="terms" ,vor allem  Terms sind vor dem Absenden immer zu bestätigen, was den Spambot zum aktivieren animiert. Reingefallen! Zurück zum Honeypot, da das Eingabefeld leer bleiben soll, brauchen wir es dem realen Benutzer nicht zeigen. Positionieren wir dieses Eingabefeld also im ausgeblendeten CSS Container und machen uns dabei gleich eine weitere Schwäche von Spambots zu nutze.
4. Abwehr - Javascript Schwäche
Die meisten Spambots crawlen das Web mit deaktivierten Javascript. Also fügen wir das neue Eingabefeld per Javascript ein.
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.terms').append('<input type="text" name="repeat_email" />');
});
</script>
Da auf meinen Websites jQuery  im Einsatz ist,  füge ich das Eingabefeld via jQuery .append() hinzu und positioniere es im ausgeblendeten Container, so dass der reale Benutzer es nicht sieht. Kommt nun ein Spambot mit deaktivierten Javascript vorbei, wird der jQuery Code nicht ausgeführt und das Feld ist für den Spambot nicht sichtbar.

Für Benutzer mit deaktivieren Javascript können wir mit <noscript> eine entsprechende Meldung hinterlassen. An der Stelle frage ich mich, wie wohl das Surferlebnis ohne Javascript heutzutage ausschaut, bei all den modernen Javascript Elementen auf den Websites.
<noscript>Bitte aktivieren Sie Javascript zum Absenden des Formulars oder
nutzen Sie eine der alternative Kontaktmöglichkeiten unter www.domain.de/kontakt.htm</noscript>
PHP Validierung
Nach der Kür nun die Pflicht. Validieren wir die Eingaben mit PHP.
<?php
$errors = array();

//Prüfen ob Formular abgesendet
if(isset($_POST['submit'])) {

//Spamcheck mit jedem neuem Absenden zurücksetzen
$spamcheck = false;

//Spamcheck
if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) {
$errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";
} else {
$spamcheck = true;
}

// Eingaben Validieren
if($spamcheck == true) {

if(empty($_POST['name'])) { //Wenn Name leer
$errors[] = "Bitte geben Sie Ihren Namen an";
}

if(empty($_POST['email'])){ //Wenn Email leer
$errors[] = "Bitte Emailadresse angeben";
} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { //Emailformat überprüfen ab PHP 5.2
$errors[] = "Bitte geben Sie ein gültige Emailadresse an";
}

if(empty($_POST['message'])){ //Wenn Nachricht leer
$errors[] = "Bitte geben Sie Ihre Nachricht ein";
}

if(!isset($_POST["gender"])){ //Wenn Spamcheck nicht markiert
$errors[] = "Bitte bestätigen Sie den Spamcheck";
}

}

if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) {
// Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt
// Eintrag in Datenbank oder Email Versand
echo "Alles richtig gemacht";
}

}
?>
Zur Überprüfung der Eingaben nutzen wir einfachstes PHP, was nochmal eine Verbesserung der Spamabwehr darstellt, denn wie oben erwähnt sind viele Spambots mit deaktivierten Javascript unterwegs, was Validierung via Javascript völlig wirkungslos macht.

Gehen wir kurz durch den Code. Wenn das Formular abgeschickt ist, setzen wir $spamcheck = false; , prüfen wir nun die versteckten Spamelemente damit diese den Spambot in frühster Phase ausbremsen. Mit  if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) { ... }  prüfen wir ob unser via Javascript eingefügtes Feld vorhanden ist, weiter wird geprüft ob die beiden versteckten Felder leer gelassen wurden. Ist eines davon nicht leer, speichern wir eine Fehlervariable. Sind beide Felder leer setzen wir  $spamcheck = true; Wurde der Spamcheck bestanden validieren wir nun die anderen Formulareingaben, unter anderen auch die offensichtlich Checkbox die uns auch zur Spamabwehr dient. if(!isset($_POST["gender"])){ ... } Auftretende Fehler speichern wir wieder im Fehlerarray. Wurden der Spamtest bestanden if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) { ... } und es sind keine Validierungsfehler vorhanden, können wir das Formular verarbeiten. Je nach Anwendung entweder mit einem Eintrag in die Datenbank oder halt mit versenden einer Email.

Sorgen wir noch dafür, dass  Benutzer die Fehlermeldungen zu sehen bekommt und positionieren folgenden Code über dem Formular. Hier wandeln wir die Einträge der Fehlervariable in eine Liste um und geben diese aus.
<?php if(isset($_POST['submit']) && empty($errors) === false) {?>
<div style="background:#FCC">
<strong>Bitte überprüfen Sie Ihre Angaben!</strong><br />
<?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>
</div>
<?php } ?>
 Fazit
Spamabwehr wird auch in Zukunft ein heißes Thema sein. Spam wirksam abwehren bedeutet immer auch Abstriche. Vor allem Abstriche in Hinblick auf Nutzerfreundlichkeit und/oder Barrierefreiheit. Ich habe oben genannte Variante bei einigen Formularen jetzt schon eine Weile erfolgreich im Einsatz. Ich bin gespannt wie lange es dauert, bis ich auch über eines dieser Formulare mit Spam bombardiert werde.

Ich habe ein erweitertes Kontaktformular erstellt, was oben genannte Elemente beinhaltet und zusätzlich auch die restlichen Eingabefelder per PHP validiert. Es ist soweit unformatiert, damit ihr es für eure Bedürfnisse anpassen könnt.

Demo Formular Download Code


Hinweis in eigener Sache!

Das Script ist meine persönliche Lösung, ich erhebe keinen Anspruch darauf, dass diese auch die Beste ist. Änderungen, Verbesserungen und Optimierungen am Script sind ausdrücklich erlaubt. Die Benutzung des Scriptes erfolgt auf eigene Gefahr. Für eventuelle Schäden, die durch den Einsatz bzw. die Nutzung des Scriptes entstehen, übernehme ich keine Haftung.


 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Spam Emails aus Formularen verhindern
Spammer benutzen Spambots  die das Internet nach Formularen durchsuchen und diese automatisch auszufüllen und abzusenden. Gängige Abwehrmethode ist das bekannte Captcha, das allerdings auch häufig den Benutzer abwehrt, weil dessen kryptische Zeichen und Zahlen nicht gut zu entschlüsseln sind. Deshalb möchte ich hier Methoden vorstellen die ohne Captcha auskommen. Die gute Nachricht ist, Spambots haben Schwächen, die wir uns im Folgenden zu nutze machen werden. Dazu wird es offensichtliche und versteckte Methoden geben, die in Kombination einen sehr guten Spamschutz bieten sollten.
HTML Markup Demo
<form id="phpform" method="post" action="kontakt.php">

<p><label for="name">Name</label>
<input type="text" name="name" value=""></p>

<p><label for="email">Email</label>
<input type="text" name="email" value=""></p>

<p><label for="message">Nachricht</label><br />
<textarea name="message" rows="8"></textarea></p>

<p><input type="checkbox" name="human"> Ich versende keinen Spam</p>

<p><input type="submit" name="submit" value="Absenden"></p>

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
</form>
1. Abwehr - Checkbox Schwäche
Die offensichtliche Methode ist die Checkbox am Ende des Formulars, hier bestätigt der Benutzer, dass er es ernst meint. Ältere Spambots  können sehr gut Eingabefelder ausfüllen aber keine Checkboxen aktivieren. Somit hätten wir hier schon die erste Abwehr. Bei der Validierung können wir nun prüfen ob die Checkbox markiert wurde, ist das nicht der Fall, bekommt der reale Benutzer eine Meldung und kann es nachholen, der Spambot allerdings dreht sich im Kreis, weil er die Meldung nicht versteht, das Formular aber ohne Aktivierung nicht abgeschickt werden kann.

Da es sich bei einer Checkbox auch nur um ein HTML Element handelt, können modernere Spambots natürlich auch Checkboxen manipulieren und aktivieren. Das machen wir uns in der nächsten Methode zu nutze, indem wir eine Checkbox platzieren die nicht aktiviert werden darf. Bei der Validierung können wir nun prüfen ob diese Checkbox tatsächlich nicht aktiviert wurde oder ob der fleißige Spambot in seinem Eifer doch den Haken gesetzt hat. Wenn er es hat, wird das Formular nicht abgeschickt werden können.
2. Abwehr - CSS Schwäche
Damit die zweite Checkbox den realen Benutzer nicht verwirrt greifen wir auf eine weitere Schwäche der Spambots zurück. Sie können mit CSS Regeln nichts anfangen, deshalb platzieren wir die zweite Checkbox in einem Container, den wir via CSS Klasse ausblenden.
CSS Code
.terms { display:none; }

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
Wichtig hierbei ist den Container über die Klasse auszublenden. Das Ausblenden durch Inline CSS  <div style="display:none">...</div>  oder <input type="checkbox" style="display:none"> ist nicht geeignet, da Spammer nicht schlafen solche Angaben bereits auswerten können und das Eingabefeld dann ignorieren. Bei Ausblenden via Klasse müsste der Spambot erst einen Abgleich mit der externen CSS Datei machen, was die Hürde weiter nach oben setzt. Für reale Benutzer die CSS deaktiviert haben oder einen Screen Reader benutzen können wir im ausgeblendeten Container eine Mitteilung hinterlassen die auffordert die Felder frei zu lassen.
3. Abwehr - Honeypot
Als Honeypot bezeichnet man Eingabefelder, die vom realen Benutzer frei gelassen werden, den Spambot aber zum Ausfüllen einladen. Bei der PHP Validierung des Formulars prüfen wir dann, ob das Feld tatsächlich leer ist. Ist es nicht leer, konnte der Spambot dieser Versuchung nicht widerstehen und wir haben  die Möglichkeit ihn auszuschließen. Fügen wir unserem Formular also ein weiteres Eingabefeld hinzu
<input type="text" name="repeat_email" />
Der Name des Eingabefeldes sollte so attraktiv wie möglich sein, denn Spambots lernen ständig dazu und ignorieren gekonnt Eingabefelder die darauf schließen lassen, dass sie der Spamabwehr dienen. Im Beispiel heißt das Feld name="repeat_email" . Deshalb heißen die Checkboxen oben name="gender" und  name="terms" ,vor allem  Terms sind vor dem Absenden immer zu bestätigen, was den Spambot zum aktivieren animiert. Reingefallen! Zurück zum Honeypot, da das Eingabefeld leer bleiben soll, brauchen wir es dem realen Benutzer nicht zeigen. Positionieren wir dieses Eingabefeld also im ausgeblendeten CSS Container und machen uns dabei gleich eine weitere Schwäche von Spambots zu nutze.
4. Abwehr - Javascript Schwäche
Die meisten Spambots crawlen das Web mit deaktivierten Javascript. Also fügen wir das neue Eingabefeld per Javascript ein.
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.terms').append('<input type="text" name="repeat_email" />');
});
</script>
Da auf meinen Websites jQuery  im Einsatz ist,  füge ich das Eingabefeld via jQuery .append() hinzu und positioniere es im ausgeblendeten Container, so dass der reale Benutzer es nicht sieht. Kommt nun ein Spambot mit deaktivierten Javascript vorbei, wird der jQuery Code nicht ausgeführt und das Feld ist für den Spambot nicht sichtbar.

Für Benutzer mit deaktivieren Javascript können wir mit <noscript> eine entsprechende Meldung hinterlassen. An der Stelle frage ich mich, wie wohl das Surferlebnis ohne Javascript heutzutage ausschaut, bei all den modernen Javascript Elementen auf den Websites.
<noscript>Bitte aktivieren Sie Javascript zum Absenden des Formulars oder
nutzen Sie eine der alternative Kontaktmöglichkeiten unter www.domain.de/kontakt.htm</noscript>
PHP Validierung
Nach der Kür nun die Pflicht. Validieren wir die Eingaben mit PHP.
<?php
$errors = array();

//Prüfen ob Formular abgesendet
if(isset($_POST['submit'])) {

//Spamcheck mit jedem neuem Absenden zurücksetzen
$spamcheck = false;

//Spamcheck
if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) {
$errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";
} else {
$spamcheck = true;
}

// Eingaben Validieren
if($spamcheck = true) {

if(empty($_POST['name'])) { //Wenn Name leer
$errors[] = "Bitte geben Sie Ihren Namen an";
}

if(empty($_POST['email'])){ //Wenn Email leer
$errors[] = "Bitte Emailadresse angeben";
} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { //Emailformat überprüfen ab PHP 5.2
$errors[] = "Bitte geben Sie ein gültige Emailadresse an";
}

if(empty($_POST['message'])){ //Wenn Nachricht leer
$errors[] = "Bitte geben Sie Ihre Nachricht ein";
}

if(!isset($_POST["gender"])){ //Wenn Spamcheck nicht markiert
$errors[] = "Bitte bestätigen Sie den Spamcheck";
}

}

if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) {
// Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt
// Eintrag in Datenbank oder Email Versand
echo "Alles richtig gemacht";
}

}
?>
Zur Überprüfung der Eingaben nutzen wir einfachstes PHP, was nochmal eine Verbesserung der Spamabwehr darstellt, denn wie oben erwähnt sind viele Spambots mit deaktivierten Javascript unterwegs, was Validierung via Javascript völlig wirkungslos macht.

Gehen wir kurz durch den Code. Wenn das Formular abgeschickt ist, setzen wir $spamcheck = false; , prüfen wir nun die versteckten Spamelemente damit diese den Spambot in frühster Phase ausbremsen. Mit  if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) { ... }  prüfen wir ob unser via Javascript eingefügtes Feld vorhanden ist, weiter wird geprüft ob die beiden versteckten Felder leer gelassen wurden. Ist eines davon nicht leer, speichern wir eine Fehlervariable. Sind beide Felder leer setzen wir  $spamcheck = true; Wurde der Spamcheck bestanden validieren wir nun die anderen Formulareingaben, unter anderen auch die offensichtlich Checkbox die uns auch zur Spamabwehr dient. if(!isset($_POST["gender"])){ ... } Auftretende Fehler speichern wir wieder im Fehlerarray. Wurden der Spamtest bestanden if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) { ... } und es sind keine Validierungsfehler vorhanden, können wir das Formular verarbeiten. Je nach Anwendung entweder mit einem Eintrag in die Datenbank oder halt mit versenden einer Email.

Sorgen wir noch dafür, dass  Benutzer die Fehlermeldungen zu sehen bekommt und positionieren folgenden Code über dem Formular. Hier wandeln wir die Einträge der Fehlervariable in eine Liste um und geben diese aus.
<?php if(isset($_POST['submit']) && empty($errors) === false) {?>
<div style="background:#FCC">
<strong>Bitte überprüfen Sie Ihre Angaben!</strong><br />
<?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>
</div>
<?php } ?>
 Fazit
Spamabwehr wird auch in Zukunft ein heißes Thema sein. Spam wirksam abwehren bedeutet immer auch Abstriche. Vor allem Abstriche in Hinblick auf Nutzerfreundlichkeit und/oder Barrierefreiheit. Ich habe oben genannte Variante bei einigen Formularen jetzt schon eine Weile erfolgreich im Einsatz. Ich bin gespannt wie lange es dauert, bis ich auch über eines dieser Formulare mit Spam bombardiert werde.

Ich habe ein erweitertes Kontaktformular erstellt, was oben genannte Elemente beinhaltet und zusätzlich auch die restlichen Eingabefelder per PHP validiert. Es ist soweit unformatiert, damit ihr es für eure Bedürfnisse anpassen könnt.

Demo Formular Download Code


Hinweis in eigener Sache!

Das Script ist meine persönliche Lösung, ich erhebe keinen Anspruch darauf, dass diese auch die Beste ist. Änderungen, Verbesserungen und Optimierungen am Script sind ausdrücklich erlaubt. Die Benutzung des Scriptes erfolgt auf eigene Gefahr. Für eventuelle Schäden, die durch den Einsatz bzw. die Nutzung des Scriptes entstehen, übernehme ich keine Haftung.


 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Neues Bootstrap Carousel: Testimonial Slider | Download Free #Bootstrap  Carousel Collection. http://sevenx.de/demo/bootstrap-carousel/
Bootstrap Carousel Collection - Fullscreen, Thumbnail Slider, Product Carousel, Single Image Carousel
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Blog Beitrag zur neuen Projektseite für kostenlose Bootstrap Carousel und Slider Varianten.

#Bootstrap #Carousel
 ·  Translate
Bootstrap Carousel / Slider Collection - Fullscreen Background, Fullscreen Header, Thumbnail Product Slider
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Genau was ich gesucht habe, perfekte Lösung!
 ·  Translate
1
Add a comment...

Communities

Rico Loschke

Shared publicly  - 
 
Spam Emails aus Formularen verhindern
Spammer benutzen Spambots  die das Internet nach Formularen durchsuchen und diese automatisch auszufüllen und abzusenden. Gängige Abwehrmethode ist das bekannte Captcha, das allerdings auch häufig den Benutzer abwehrt, weil dessen kryptische Zeichen und Zahlen nicht gut zu entschlüsseln sind. Deshalb möchte ich hier Methoden vorstellen die ohne Captcha auskommen. Die gute Nachricht ist, Spambots haben Schwächen, die wir uns im Folgenden zu nutze machen werden. Dazu wird es offensichtliche und versteckte Methoden geben, die in Kombination einen sehr guten Spamschutz bieten sollten.
HTML Markup Demo
<form id="phpform" method="post" action="kontakt.php" autocomplete="off">

<p><label for="name">Name</label>
<input type="text" name="name" value=""></p>

<p><label for="email">Email</label>
<input type="text" name="email" value=""></p>

<p><label for="message">Nachricht</label><br />
<textarea name="message" rows="8"></textarea></p>

<p><input type="checkbox" name="human"> Ich versende keinen Spam</p>

<p><input type="submit" name="submit" value="Absenden"></p>

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
</form>
1. Abwehr - Checkbox Schwäche
Die offensichtliche Methode ist die Checkbox am Ende des Formulars, hier bestätigt der Benutzer, dass er es ernst meint. Ältere Spambots  können sehr gut Eingabefelder ausfüllen aber keine Checkboxen aktivieren. Somit hätten wir hier schon die erste Abwehr. Bei der Validierung können wir nun prüfen ob die Checkbox markiert wurde, ist das nicht der Fall, bekommt der reale Benutzer eine Meldung und kann es nachholen, der Spambot allerdings dreht sich im Kreis, weil er die Meldung nicht versteht, das Formular aber ohne Aktivierung nicht abgeschickt werden kann.

Da es sich bei einer Checkbox auch nur um ein HTML Element handelt, können modernere Spambots natürlich auch Checkboxen manipulieren und aktivieren. Das machen wir uns in der nächsten Methode zu nutze, indem wir eine Checkbox platzieren die nicht aktiviert werden darf. Bei der Validierung können wir nun prüfen ob diese Checkbox tatsächlich nicht aktiviert wurde oder ob der fleißige Spambot in seinem Eifer doch den Haken gesetzt hat. Wenn er es hat, wird das Formular nicht abgeschickt werden können.
2. Abwehr - CSS Schwäche
Damit die zweite Checkbox den realen Benutzer nicht verwirrt greifen wir auf eine weitere Schwäche der Spambots zurück. Sie können mit CSS Regeln nichts anfangen, deshalb platzieren wir die zweite Checkbox in einem Container, den wir via CSS Klasse ausblenden.
CSS Code
.terms { display:none; }

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
Wichtig hierbei ist den Container über die Klasse auszublenden. Das Ausblenden durch Inline CSS  <div style="display:none">...</div>  oder <input type="checkbox" style="display:none"> ist nicht geeignet, da Spammer nicht schlafen solche Angaben bereits auswerten können und das Eingabefeld dann ignorieren. Bei Ausblenden via Klasse müsste der Spambot erst einen Abgleich mit der externen CSS Datei machen, was die Hürde weiter nach oben setzt. Für reale Benutzer die CSS deaktiviert haben oder einen Screen Reader benutzen können wir im ausgeblendeten Container eine Mitteilung hinterlassen die auffordert die Felder frei zu lassen.
3. Abwehr - Honeypot
Als Honeypot bezeichnet man Eingabefelder, die vom realen Benutzer frei gelassen werden, den Spambot aber zum Ausfüllen einladen. Bei der PHP Validierung des Formulars prüfen wir dann, ob das Feld tatsächlich leer ist. Ist es nicht leer, konnte der Spambot dieser Versuchung nicht widerstehen und wir haben  die Möglichkeit ihn auszuschließen. Fügen wir unserem Formular also ein weiteres Eingabefeld hinzu
<input type="text" name="repeat_email" />
Der Name des Eingabefeldes sollte so attraktiv wie möglich sein, denn Spambots lernen ständig dazu und ignorieren gekonnt Eingabefelder die darauf schließen lassen, dass sie der Spamabwehr dienen. Im Beispiel heißt das Feld name="repeat_email" . Deshalb heißen die Checkboxen oben name="gender" und  name="terms" ,vor allem  Terms sind vor dem Absenden immer zu bestätigen, was den Spambot zum aktivieren animiert. Reingefallen! Zurück zum Honeypot, da das Eingabefeld leer bleiben soll, brauchen wir es dem realen Benutzer nicht zeigen. Positionieren wir dieses Eingabefeld also im ausgeblendeten CSS Container und machen uns dabei gleich eine weitere Schwäche von Spambots zu nutze.
4. Abwehr - Javascript Schwäche
Die meisten Spambots crawlen das Web mit deaktivierten Javascript. Also fügen wir das neue Eingabefeld per Javascript ein.
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.terms').append('<input type="text" name="repeat_email" />');
});
</script>
Da auf meinen Websites jQuery  im Einsatz ist,  füge ich das Eingabefeld via jQuery .append() hinzu und positioniere es im ausgeblendeten Container, so dass der reale Benutzer es nicht sieht. Kommt nun ein Spambot mit deaktivierten Javascript vorbei, wird der jQuery Code nicht ausgeführt und das Feld ist für den Spambot nicht sichtbar.

Für Benutzer mit deaktivieren Javascript können wir mit <noscript> eine entsprechende Meldung hinterlassen. An der Stelle frage ich mich, wie wohl das Surferlebnis ohne Javascript heutzutage ausschaut, bei all den modernen Javascript Elementen auf den Websites.
<noscript>Bitte aktivieren Sie Javascript zum Absenden des Formulars oder
nutzen Sie eine der alternative Kontaktmöglichkeiten unter www.domain.de/kontakt.htm</noscript>
PHP Validierung
Nach der Kür nun die Pflicht. Validieren wir die Eingaben mit PHP.
<?php
$errors = array();

//Prüfen ob Formular abgesendet
if(isset($_POST['submit'])) {

//Spamcheck mit jedem neuem Absenden zurücksetzen
$spamcheck = false;

//Spamcheck
if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) {
$errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";
} else {
$spamcheck = true;
}

// Eingaben Validieren
if($spamcheck == true) {

if(empty($_POST['name'])) { //Wenn Name leer
$errors[] = "Bitte geben Sie Ihren Namen an";
}

if(empty($_POST['email'])){ //Wenn Email leer
$errors[] = "Bitte Emailadresse angeben";
} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { //Emailformat überprüfen ab PHP 5.2
$errors[] = "Bitte geben Sie ein gültige Emailadresse an";
}

if(empty($_POST['message'])){ //Wenn Nachricht leer
$errors[] = "Bitte geben Sie Ihre Nachricht ein";
}

if(!isset($_POST["gender"])){ //Wenn Spamcheck nicht markiert
$errors[] = "Bitte bestätigen Sie den Spamcheck";
}

}

if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) {
// Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt
// Eintrag in Datenbank oder Email Versand
echo "Alles richtig gemacht";
}

}
?>
Zur Überprüfung der Eingaben nutzen wir einfachstes PHP, was nochmal eine Verbesserung der Spamabwehr darstellt, denn wie oben erwähnt sind viele Spambots mit deaktivierten Javascript unterwegs, was Validierung via Javascript völlig wirkungslos macht.

Gehen wir kurz durch den Code. Wenn das Formular abgeschickt ist, setzen wir $spamcheck = false; , prüfen wir nun die versteckten Spamelemente damit diese den Spambot in frühster Phase ausbremsen. Mit  if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) { ... }  prüfen wir ob unser via Javascript eingefügtes Feld vorhanden ist, weiter wird geprüft ob die beiden versteckten Felder leer gelassen wurden. Ist eines davon nicht leer, speichern wir eine Fehlervariable. Sind beide Felder leer setzen wir  $spamcheck = true; Wurde der Spamcheck bestanden validieren wir nun die anderen Formulareingaben, unter anderen auch die offensichtlich Checkbox die uns auch zur Spamabwehr dient. if(!isset($_POST["gender"])){ ... } Auftretende Fehler speichern wir wieder im Fehlerarray. Wurden der Spamtest bestanden if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) { ... } und es sind keine Validierungsfehler vorhanden, können wir das Formular verarbeiten. Je nach Anwendung entweder mit einem Eintrag in die Datenbank oder halt mit versenden einer Email.

Sorgen wir noch dafür, dass  Benutzer die Fehlermeldungen zu sehen bekommt und positionieren folgenden Code über dem Formular. Hier wandeln wir die Einträge der Fehlervariable in eine Liste um und geben diese aus.
<?php if(isset($_POST['submit']) && empty($errors) == false) {?>
<div style="background:#FCC">
<strong>Bitte überprüfen Sie Ihre Angaben!</strong><br />
<?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>
</div>
<?php } ?>
 Fazit
Spamabwehr wird auch in Zukunft ein heißes Thema sein. Spam wirksam abwehren bedeutet immer auch Abstriche. Vor allem Abstriche in Hinblick auf Nutzerfreundlichkeit und/oder Barrierefreiheit. Ich habe oben genannte Variante bei einigen Formularen jetzt schon eine Weile erfolgreich im Einsatz. Ich bin gespannt wie lange es dauert, bis ich auch über eines dieser Formulare mit Spam bombardiert werde.

Ich habe ein erweitertes Kontaktformular erstellt, was oben genannte Elemente beinhaltet und zusätzlich auch die restlichen Eingabefelder per PHP validiert. Es ist soweit unformatiert, damit ihr es für eure Bedürfnisse anpassen könnt.

Demo Formular Download Code


Hinweis in eigener Sache!

Das Script ist meine persönliche Lösung, ich erhebe keinen Anspruch darauf, dass diese auch die Beste ist. Änderungen, Verbesserungen und Optimierungen am Script sind ausdrücklich erlaubt. Die Benutzung des Scriptes erfolgt auf eigene Gefahr. Für eventuelle Schäden, die durch den Einsatz bzw. die Nutzung des Scriptes entstehen, übernehme ich keine Haftung.


 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Spam Emails aus Formularen verhindern
Spammer benutzen Spambots  die das Internet nach Formularen durchsuchen und diese automatisch auszufüllen und abzusenden. Gängige Abwehrmethode ist das bekannte Captcha, das allerdings auch häufig den Benutzer abwehrt, weil dessen kryptische Zeichen und Zahlen nicht gut zu entschlüsseln sind. Deshalb möchte ich hier Methoden vorstellen die ohne Captcha auskommen. Die gute Nachricht ist, Spambots haben Schwächen, die wir uns im Folgenden zu nutze machen werden. Dazu wird es offensichtliche und versteckte Methoden geben, die in Kombination einen sehr guten Spamschutz bieten sollten.
HTML Markup Demo
<form id="phpform" method="post" action="kontakt.php" autocomplete="off">

<p><label for="name">Name</label>
<input type="text" name="name" value=""></p>

<p><label for="email">Email</label>
<input type="text" name="email" value=""></p>

<p><label for="message">Nachricht</label><br />
<textarea name="message" rows="8"></textarea></p>

<p><input type="checkbox" name="human"> Ich versende keinen Spam</p>

<p><input type="submit" name="submit" value="Absenden"></p>

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
</form>
1. Abwehr - Checkbox Schwäche
Die offensichtliche Methode ist die Checkbox am Ende des Formulars, hier bestätigt der Benutzer, dass er es ernst meint. Ältere Spambots  können sehr gut Eingabefelder ausfüllen aber keine Checkboxen aktivieren. Somit hätten wir hier schon die erste Abwehr. Bei der Validierung können wir nun prüfen ob die Checkbox markiert wurde, ist das nicht der Fall, bekommt der reale Benutzer eine Meldung und kann es nachholen, der Spambot allerdings dreht sich im Kreis, weil er die Meldung nicht versteht, das Formular aber ohne Aktivierung nicht abgeschickt werden kann.

Da es sich bei einer Checkbox auch nur um ein HTML Element handelt, können modernere Spambots natürlich auch Checkboxen manipulieren und aktivieren. Das machen wir uns in der nächsten Methode zu nutze, indem wir eine Checkbox platzieren die nicht aktiviert werden darf. Bei der Validierung können wir nun prüfen ob diese Checkbox tatsächlich nicht aktiviert wurde oder ob der fleißige Spambot in seinem Eifer doch den Haken gesetzt hat. Wenn er es hat, wird das Formular nicht abgeschickt werden können.
2. Abwehr - CSS Schwäche
Damit die zweite Checkbox den realen Benutzer nicht verwirrt greifen wir auf eine weitere Schwäche der Spambots zurück. Sie können mit CSS Regeln nichts anfangen, deshalb platzieren wir die zweite Checkbox in einem Container, den wir via CSS Klasse ausblenden.
CSS Code
.terms { display:none; }

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
Wichtig hierbei ist den Container über die Klasse auszublenden. Das Ausblenden durch Inline CSS  <div style="display:none">...</div>  oder <input type="checkbox" style="display:none"> ist nicht geeignet, da Spammer nicht schlafen solche Angaben bereits auswerten können und das Eingabefeld dann ignorieren. Bei Ausblenden via Klasse müsste der Spambot erst einen Abgleich mit der externen CSS Datei machen, was die Hürde weiter nach oben setzt. Für reale Benutzer die CSS deaktiviert haben oder einen Screen Reader benutzen können wir im ausgeblendeten Container eine Mitteilung hinterlassen die auffordert die Felder frei zu lassen.
3. Abwehr - Honeypot
Als Honeypot bezeichnet man Eingabefelder, die vom realen Benutzer frei gelassen werden, den Spambot aber zum Ausfüllen einladen. Bei der PHP Validierung des Formulars prüfen wir dann, ob das Feld tatsächlich leer ist. Ist es nicht leer, konnte der Spambot dieser Versuchung nicht widerstehen und wir haben  die Möglichkeit ihn auszuschließen. Fügen wir unserem Formular also ein weiteres Eingabefeld hinzu
<input type="text" name="repeat_email" />
Der Name des Eingabefeldes sollte so attraktiv wie möglich sein, denn Spambots lernen ständig dazu und ignorieren gekonnt Eingabefelder die darauf schließen lassen, dass sie der Spamabwehr dienen. Im Beispiel heißt das Feld name="repeat_email" . Deshalb heißen die Checkboxen oben name="gender" und  name="terms" ,vor allem  Terms sind vor dem Absenden immer zu bestätigen, was den Spambot zum aktivieren animiert. Reingefallen! Zurück zum Honeypot, da das Eingabefeld leer bleiben soll, brauchen wir es dem realen Benutzer nicht zeigen. Positionieren wir dieses Eingabefeld also im ausgeblendeten CSS Container und machen uns dabei gleich eine weitere Schwäche von Spambots zu nutze.
4. Abwehr - Javascript Schwäche
Die meisten Spambots crawlen das Web mit deaktivierten Javascript. Also fügen wir das neue Eingabefeld per Javascript ein.
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.terms').append('<input type="text" name="repeat_email" />');
});
</script>
Da auf meinen Websites jQuery  im Einsatz ist,  füge ich das Eingabefeld via jQuery .append() hinzu und positioniere es im ausgeblendeten Container, so dass der reale Benutzer es nicht sieht. Kommt nun ein Spambot mit deaktivierten Javascript vorbei, wird der jQuery Code nicht ausgeführt und das Feld ist für den Spambot nicht sichtbar.

Für Benutzer mit deaktivieren Javascript können wir mit <noscript> eine entsprechende Meldung hinterlassen. An der Stelle frage ich mich, wie wohl das Surferlebnis ohne Javascript heutzutage ausschaut, bei all den modernen Javascript Elementen auf den Websites.
<noscript>Bitte aktivieren Sie Javascript zum Absenden des Formulars oder
nutzen Sie eine der alternative Kontaktmöglichkeiten unter www.domain.de/kontakt.htm</noscript>
PHP Validierung
Nach der Kür nun die Pflicht. Validieren wir die Eingaben mit PHP.
<?php
$errors = array();

//Prüfen ob Formular abgesendet
if(isset($_POST['submit'])) {

//Spamcheck mit jedem neuem Absenden zurücksetzen
$spamcheck = false;

//Spamcheck
if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) {
$errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";
} else {
$spamcheck = true;
}

// Eingaben Validieren
if($spamcheck = true) {

if(empty($_POST['name'])) { //Wenn Name leer
$errors[] = "Bitte geben Sie Ihren Namen an";
}

if(empty($_POST['email'])){ //Wenn Email leer
$errors[] = "Bitte Emailadresse angeben";
} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { //Emailformat überprüfen ab PHP 5.2
$errors[] = "Bitte geben Sie ein gültige Emailadresse an";
}

if(empty($_POST['message'])){ //Wenn Nachricht leer
$errors[] = "Bitte geben Sie Ihre Nachricht ein";
}

if(!isset($_POST["gender"])){ //Wenn Spamcheck nicht markiert
$errors[] = "Bitte bestätigen Sie den Spamcheck";
}

}

if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) {
// Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt
// Eintrag in Datenbank oder Email Versand
echo "Alles richtig gemacht";
}

}
?>
Zur Überprüfung der Eingaben nutzen wir einfachstes PHP, was nochmal eine Verbesserung der Spamabwehr darstellt, denn wie oben erwähnt sind viele Spambots mit deaktivierten Javascript unterwegs, was Validierung via Javascript völlig wirkungslos macht.

Gehen wir kurz durch den Code. Wenn das Formular abgeschickt ist, setzen wir $spamcheck = false; , prüfen wir nun die versteckten Spamelemente damit diese den Spambot in frühster Phase ausbremsen. Mit  if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) { ... }  prüfen wir ob unser via Javascript eingefügtes Feld vorhanden ist, weiter wird geprüft ob die beiden versteckten Felder leer gelassen wurden. Ist eines davon nicht leer, speichern wir eine Fehlervariable. Sind beide Felder leer setzen wir  $spamcheck = true; Wurde der Spamcheck bestanden validieren wir nun die anderen Formulareingaben, unter anderen auch die offensichtlich Checkbox die uns auch zur Spamabwehr dient. if(!isset($_POST["gender"])){ ... } Auftretende Fehler speichern wir wieder im Fehlerarray. Wurden der Spamtest bestanden if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) { ... } und es sind keine Validierungsfehler vorhanden, können wir das Formular verarbeiten. Je nach Anwendung entweder mit einem Eintrag in die Datenbank oder halt mit versenden einer Email.

Sorgen wir noch dafür, dass  Benutzer die Fehlermeldungen zu sehen bekommt und positionieren folgenden Code über dem Formular. Hier wandeln wir die Einträge der Fehlervariable in eine Liste um und geben diese aus.
<?php if(isset($_POST['submit']) && empty($errors) === false) {?>
<div style="background:#FCC">
<strong>Bitte überprüfen Sie Ihre Angaben!</strong><br />
<?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>
</div>
<?php } ?>
 Fazit
Spamabwehr wird auch in Zukunft ein heißes Thema sein. Spam wirksam abwehren bedeutet immer auch Abstriche. Vor allem Abstriche in Hinblick auf Nutzerfreundlichkeit und/oder Barrierefreiheit. Ich habe oben genannte Variante bei einigen Formularen jetzt schon eine Weile erfolgreich im Einsatz. Ich bin gespannt wie lange es dauert, bis ich auch über eines dieser Formulare mit Spam bombardiert werde.

Ich habe ein erweitertes Kontaktformular erstellt, was oben genannte Elemente beinhaltet und zusätzlich auch die restlichen Eingabefelder per PHP validiert. Es ist soweit unformatiert, damit ihr es für eure Bedürfnisse anpassen könnt.

Demo Formular Download Code


Hinweis in eigener Sache!

Das Script ist meine persönliche Lösung, ich erhebe keinen Anspruch darauf, dass diese auch die Beste ist. Änderungen, Verbesserungen und Optimierungen am Script sind ausdrücklich erlaubt. Die Benutzung des Scriptes erfolgt auf eigene Gefahr. Für eventuelle Schäden, die durch den Einsatz bzw. die Nutzung des Scriptes entstehen, übernehme ich keine Haftung.


 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Spam Emails aus Formularen verhindern
Spammer benutzen Spambots  die das Internet nach Formularen durchsuchen und diese automatisch auszufüllen und abzusenden. Gängige Abwehrmethode ist das bekannte Captcha, das allerdings auch häufig den Benutzer abwehrt, weil dessen kryptische Zeichen und Zahlen nicht gut zu entschlüsseln sind. Deshalb möchte ich hier Methoden vorstellen die ohne Captcha auskommen. Die gute Nachricht ist, Spambots haben Schwächen, die wir uns im Folgenden zu nutze machen werden. Dazu wird es offensichtliche und versteckte Methoden geben, die in Kombination einen sehr guten Spamschutz bieten sollten.
HTML Markup Demo
<form id="phpform" method="post" action="kontakt.php">

<p><label for="name">Name</label>
<input type="text" name="name" value=""></p>

<p><label for="email">Email</label>
<input type="text" name="email" value=""></p>

<p><label for="message">Nachricht</label><br />
<textarea name="message" rows="8"></textarea></p>

<p><input type="checkbox" name="human"> Ich versende keinen Spam</p>

<p><input type="submit" name="submit" value="Absenden"></p>

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
</form>
1. Abwehr - Checkbox Schwäche
Die offensichtliche Methode ist die Checkbox am Ende des Formulars, hier bestätigt der Benutzer, dass er es ernst meint. Ältere Spambots  können sehr gut Eingabefelder ausfüllen aber keine Checkboxen aktivieren. Somit hätten wir hier schon die erste Abwehr. Bei der Validierung können wir nun prüfen ob die Checkbox markiert wurde, ist das nicht der Fall, bekommt der reale Benutzer eine Meldung und kann es nachholen, der Spambot allerdings dreht sich im Kreis, weil er die Meldung nicht versteht, das Formular aber ohne Aktivierung nicht abgeschickt werden kann.

Da es sich bei einer Checkbox auch nur um ein HTML Element handelt, können modernere Spambots natürlich auch Checkboxen manipulieren und aktivieren. Das machen wir uns in der nächsten Methode zu nutze, indem wir eine Checkbox platzieren die nicht aktiviert werden darf. Bei der Validierung können wir nun prüfen ob diese Checkbox tatsächlich nicht aktiviert wurde oder ob der fleißige Spambot in seinem Eifer doch den Haken gesetzt hat. Wenn er es hat, wird das Formular nicht abgeschickt werden können.
2. Abwehr - CSS Schwäche
Damit die zweite Checkbox den realen Benutzer nicht verwirrt greifen wir auf eine weitere Schwäche der Spambots zurück. Sie können mit CSS Regeln nichts anfangen, deshalb platzieren wir die zweite Checkbox in einem Container, den wir via CSS Klasse ausblenden.
CSS Code
.terms { display:none; }

<div class="terms">
Folgende Felder bitte unberührt lassen!
<input type="checkbox" name="terms">
</div>
Wichtig hierbei ist den Container über die Klasse auszublenden. Das Ausblenden durch Inline CSS  <div style="display:none">...</div>  oder <input type="checkbox" style="display:none"> ist nicht geeignet, da Spammer nicht schlafen solche Angaben bereits auswerten können und das Eingabefeld dann ignorieren. Bei Ausblenden via Klasse müsste der Spambot erst einen Abgleich mit der externen CSS Datei machen, was die Hürde weiter nach oben setzt. Für reale Benutzer die CSS deaktiviert haben oder einen Screen Reader benutzen können wir im ausgeblendeten Container eine Mitteilung hinterlassen die auffordert die Felder frei zu lassen.
3. Abwehr - Honeypot
Als Honeypot bezeichnet man Eingabefelder, die vom realen Benutzer frei gelassen werden, den Spambot aber zum Ausfüllen einladen. Bei der PHP Validierung des Formulars prüfen wir dann, ob das Feld tatsächlich leer ist. Ist es nicht leer, konnte der Spambot dieser Versuchung nicht widerstehen und wir haben  die Möglichkeit ihn auszuschließen. Fügen wir unserem Formular also ein weiteres Eingabefeld hinzu
<input type="text" name="repeat_email" />
Der Name des Eingabefeldes sollte so attraktiv wie möglich sein, denn Spambots lernen ständig dazu und ignorieren gekonnt Eingabefelder die darauf schließen lassen, dass sie der Spamabwehr dienen. Im Beispiel heißt das Feld name="repeat_email" . Deshalb heißen die Checkboxen oben name="gender" und  name="terms" ,vor allem  Terms sind vor dem Absenden immer zu bestätigen, was den Spambot zum aktivieren animiert. Reingefallen! Zurück zum Honeypot, da das Eingabefeld leer bleiben soll, brauchen wir es dem realen Benutzer nicht zeigen. Positionieren wir dieses Eingabefeld also im ausgeblendeten CSS Container und machen uns dabei gleich eine weitere Schwäche von Spambots zu nutze.
4. Abwehr - Javascript Schwäche
Die meisten Spambots crawlen das Web mit deaktivierten Javascript. Also fügen wir das neue Eingabefeld per Javascript ein.
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.terms').append('<input type="text" name="repeat_email" />');
});
</script>
Da auf meinen Websites jQuery  im Einsatz ist,  füge ich das Eingabefeld via jQuery .append() hinzu und positioniere es im ausgeblendeten Container, so dass der reale Benutzer es nicht sieht. Kommt nun ein Spambot mit deaktivierten Javascript vorbei, wird der jQuery Code nicht ausgeführt und das Feld ist für den Spambot nicht sichtbar.

Für Benutzer mit deaktivieren Javascript können wir mit <noscript> eine entsprechende Meldung hinterlassen. An der Stelle frage ich mich, wie wohl das Surferlebnis ohne Javascript heutzutage ausschaut, bei all den modernen Javascript Elementen auf den Websites.
<noscript>Bitte aktivieren Sie Javascript zum Absenden des Formulars oder
nutzen Sie eine der alternative Kontaktmöglichkeiten unter www.domain.de/kontakt.htm</noscript>
PHP Validierung
Nach der Kür nun die Pflicht. Validieren wir die Eingaben mit PHP.
<?php
$errors = array();

//Prüfen ob Formular abgesendet
if(isset($_POST['submit'])) {

//Spamcheck mit jedem neuem Absenden zurücksetzen
$spamcheck = false;

//Spamcheck
if(!isset($_POST["repeat_email"]) || !empty($_POST["repeat_email"]) || isset($_POST["terms"])) {
$errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";
} else {
$spamcheck = true;
}

// Eingaben Validieren
if($spamcheck = true) {

if(empty($_POST['name'])) { //Wenn Name leer
$errors[] = "Bitte geben Sie Ihren Namen an";
}

if(empty($_POST['email'])){ //Wenn Email leer
$errors[] = "Bitte Emailadresse angeben";
} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) { //Emailformat überprüfen ab PHP 5.2
$errors[] = "Bitte geben Sie ein gültige Emailadresse an";
}

if(empty($_POST['message'])){ //Wenn Nachricht leer
$errors[] = "Bitte geben Sie Ihre Nachricht ein";
}

if(!isset($_POST["gender"])){ //Wenn Spamcheck nicht markiert
$errors[] = "Bitte bestätigen Sie den Spamcheck";
}

}

if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) {
// Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt
// Eintrag in Datenbank oder Email Versand
echo "Alles richtig gemacht";
}

}
?>
Zur Überprüfung der Eingaben nutzen wir einfachstes PHP, was nochmal eine Verbesserung der Spamabwehr darstellt, denn wie oben erwähnt sind viele Spambots mit deaktivierten Javascript unterwegs, was Validierung via Javascript völlig wirkungslos macht.

Gehen wir kurz durch den Code. Wenn das Formular abgeschickt ist, setzen wir $spamcheck = false; , prüfen wir nun die versteckten Spamelemente damit diese den Spambot in frühster Phase ausbremsen. Mit  if(!empty($_POST["repeat_email"]) || isset($_POST["terms"])) { ... }  prüfen wir ob die beiden versteckten Felder leer gelassen wurden. Ist eines davon nicht leer, speichern wir eine Fehlervariable. Sind beide Felder leer setzen wir  $spamcheck = true; Wurde der Spamcheck bestanden validieren wir nun die anderen Formulareingaben, unter anderen auch die offensichtlich Checkbox die uns auch zur Spamabwehr dient. if(!isset($_POST["gender"])){ ... } Auftretende Fehler speichern wir wieder im Fehlerarray. Wurden der Spamtest bestanden if(isset($_POST['submit']) && empty($errors) && $spamcheck == true) { ... } und es sind keine Validierungsfehler vorhanden, können wir das Formular verarbeiten. Je nach Anwendung entweder mit einem Eintrag in die Datenbank oder halt mit versenden einer Email.

Sorgen wir noch dafür, dass  Benutzer die Fehlermeldungen zu sehen bekommt und positionieren folgenden Code über dem Formular. Hier wandeln wir die Einträge der Fehlervariable in eine Liste um und geben diese aus.
<?php if(isset($_POST['submit']) && empty($errors) === false) {?>
<div style="background:#FCC">
<strong>Bitte überprüfen Sie Ihre Angaben!</strong><br />
<?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>
</div>
<?php } ?>
 Fazit
Spamabwehr wird auch in Zukunft ein heißes Thema sein. Spam wirksam abwehren bedeutet immer auch Abstriche. Vor allem Abstriche in Hinblick auf Nutzerfreundlichkeit und/oder Barrierefreiheit. Ich habe oben genannte Variante bei einigen Formularen jetzt schon eine Weile erfolgreich im Einsatz. Ich bin gespannt wie lange es dauert, bis ich auch über eines dieser Formulare mit Spam bombardiert werde.

Ich habe ein erweitertes Kontaktformular erstellt, was oben genannte Elemente beinhaltet und zusätzlich auch die restlichen Eingabefelder per PHP validiert. Es ist soweit unformatiert, damit ihr es für eure Bedürfnisse anpassen könnt.

Demo Formular Download Code


Hinweis in eigener Sache!

Das Script ist meine persönliche Lösung, ich erhebe keinen Anspruch darauf, dass diese auch die Beste ist. Änderungen, Verbesserungen und Optimierungen am Script sind ausdrücklich erlaubt. Die Benutzung des Scriptes erfolgt auf eigene Gefahr. Für eventuelle Schäden, die durch den Einsatz bzw. die Nutzung des Scriptes entstehen, übernehme ich keine Haftung.


 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Neues #Bootstrap  Theme für mein nächstes Projekt gefunden, tolle Arbeit. :)
 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Free #Bootstrap  3 Carousel / Slider Collection: Demoseite mit verschiedenen Varianten des Bootstrap Carousels inkl. Sourcecode zur freien Verwendung.
 ·  Translate
1
Add a comment...

Rico Loschke

Shared publicly  - 
 
Mein Fundstück der Woche! phpMyAdmin selbst hosten? Kein Problem mit Adminer. Bin begeistert!
 ·  Translate
1
Add a comment...
Communities
Education
  • Staatliche Studienakademie Riesa
    Sport-, Event- & Marketingmanagement, 2002 - 2005
Basic Information
Gender
Male
Links
Contributor to
Work
Occupation
Selbständig
Employment
  • sevenX
    Selbständig, present
Places
Map of the places this user has livedMap of the places this user has livedMap of the places this user has lived
Currently
Dresden, Deutschland
Contact Information
Work
Phone
03513213940
Email
Address
Dresden