Tutorials
[ Zurück ]


Spamschutz ohne Captcha!


Die Frage, um die es in diesem Tutorial gehen soll, ist:

Wie erstelle ich einen Spamschutz ohne Captchas und ohne das die Besucher davon irgendetwas merken?

Der Nachteil eines Captchas ist schnell erklärt: Er ist für Besucher, die mit einem Textbrowser unterwegs sind, nicht lösbar.
Außerdem ist es oft lästig, auf Webseiten bestätigen zu müssen, dass man ein Mensch ist!

Dafür habe ich mir zwei Sachen überlegt.
Erstens: Ein Feld, das nicht ausgefüllt werden muss, aber als eMail-Feld benannt wird. Natürlich schreiben wir dazu, dass Besucher es nicht ausfüllen dürfen.
Zweitens: Eine Zeitüberprüfung. Ein Bot liefert eine Seite nach Sekunden zurück mit den eingetragenen Sachen, ein Mensch wird das nicht machen (und wenn doch hat er Pech ;))


Für die erste Idee brauchen wir ein Formular (auf das nötigste beschränkt, wird nicht xhtml-valide sein!):
 
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<form action="verarbeiten.php" method="post">
Name: <input type="text" name="name"><br>
Email-Adresse: <input type="text name="email"><br>
<span class="unsichtbar">
Email-Adresse nicht eintragen: <input type="text" name="email2">
</span>
<input type="submit" name="submit" value="Abschicken">
</form>
</body>
</html>
 In Zeile 9 wird die Style-Klasse "unsichtbar" angewendet, die entsprechende style.css sieht so aus:
.unsichtbar {
display: block;
}

Dadurch wird verhindert, dass diese Zeilen angezeigt werden. Auch Textbrowser verstehen das, Bots aber (noch) nicht.
Jetzt muss noch abgeprüft werden, ob diese Zeilen auch wirklich nicht ausgefüllt worden sind. Wenn Sie ausgefüllt worden sind, dann kann man davon ausgehen, dass es ein Bot war!

Die Datei "verarbeiten.php" sieht dann so aus:
 

<?php
if($_POST['email2'] != ""){
// Bot!
die("Bitte gehen Sie zurück und kontrollieren Sie Ihre Angaben!");
}
else {
// normale Anweisungen, kein Bot!
}
?>

Noch kurz die Erklärung: In der zweiten Zeile wird überprüft, ob das Feld email2, also genau das, was nur der Bot sieht, ausgefüllt wurde. Wenn ja, und das ist die erste Verzweigung, dann wird das Script mit die(); abgebrochen, ansonsten wird ganz normal weiter gemacht!
Damit hätten wir die erste Idee abgeschlossen.

Kommen wir zur zweiten Idee: Die Zeitabfrage.
Dazu benutzen wir unser erstes Formular, nur leicht abgeändert. Wir fügen ein hidden-Feld hinzu, indem die aktuelle Zeit (Rückgabe von time()) gespeichert wird.
Das sieht dann so aus:
 

<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<form action="verarbeiten.php" method="post">
Name: <input type="text" name="name"><br>
Email-Adresse: <input type="text name="email"><br>
<input type="hidden" name="uhrzeit" value="<?php echo time(); ?>">
<input type="submit" name="submit" value="Abschicken">
</form>
</body>
</html>

In Zeile 9 wird ein Formularfeld definiert, was als Typ hidden ist, also nicht angezeigt wird. In diesem Feld wird das aktuelle Datum gespeichert.

Der PHP-Teil in der Datei "verarbeiten.php" müsste dann so aussehen:
 

<?php
if($_POST['uhrzeit'] <= (time() - 10){
// Bot, denn die Seite wurde in unter 10 Sekunden abgeschickt!
die("Bitte gehen Sie zurück und kontrollieren Sie Ihre Angaben!");
}
else {
// normale Anweisungen, kein Bot!
}
?>


 
Damit müsste ein relativ guter Spamschutz realisiert sein! Am Besten ist natürlich, man kombiniert beide Möglichkeiten.

 

Noch Fragen?

Sprich mich an!


Erstellt:11.03.09 16:51
Autor: kaenguruhs

Letzte Änderung: 11.03.09 21:07
Geändert von: kaenguruhs

Bewertungen:4
Bewertung: 3.5

Freigeschaltet: Ja
Views 6070

Klicke einfach auf einen Stern!
Wollen Sie wirklich das Tutorial löschen?
Wollen Sie wirklich dieses Tutorial zulassen?
Betreff: Report tutorial [id = 61] !
Absender:
Kommentar:
Wollen Sie wirklich dieses Tutorial zulassen?
Absender:
Kommentar:
Folgende User sind hier gerade aktiv:
-

ANZEIGE