[How2]Spamschutz ohne Captcha!

04/16/2010 00:24 [GA]FreeZoNe#1
Heute wollte ich euch mall zeigen wie einfach ihr einen Spamschutz hinbenkommt ohne einen Captcher also legen wir mall los :)

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 ;))

ür die erste Idee brauchen wir ein Formular (auf das nötigste beschränkt, wird nicht xhtml-valide sein!):

PHP Code:
<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:

PHP Code:
.unsichtbar {  
displayblock;  

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 Code:
<?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:

PHP Code:
<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 Code:
<?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!



[Only registered and activated users can see links. Click Here To Register...]
04/16/2010 00:43 ClOuDy.#2
"display: none;" versteckt ein element.

1. ein bot kann kein feld ausfüllen das er nicht sieht. er erkennt zwar den code, dass er vorhanden ist, reinschreiben kann er trotzdem ncihts. kann er das nicht macht er einfach weiter.

hidden felder werden auch benutzt um abfragen zu prüfen...das stört bots auch nicht.

- eine möglichkeit ein paar bots zu ärgern ist, einfach die felder nicht "mail" sondern z.b. "fingerhut" zu nennen, damit kommen manche bots nicht klar
04/16/2010 00:52 [GA]FreeZoNe#3
Du hast wirklich ein komisches deutsch ^^ ich versteh fast nichts was du da geschrieben hast XDD
04/16/2010 08:28 Noyze#4
Ja weil du keine Ahnung von dem Thema hast für dessen du ein Tutorial geschrieben hast.. oder eher kopiert hast..
04/16/2010 20:02 .nAno#5
Spamschutz geht auch ohne Captcha (siehe Beispiel ICQ und Co.)

Außerdem ist es schon mit kleinen Sprachen wie AutoIT recht einfach deine Vorkehrungen zu umgehn...