Hallo Flashforum.
Ich denke das Problem mit den nervigen Bots dürfte jedem bekannt sein.
Die kleinen Bildchen mit dem Zahlencode den man korrekt abtippen muss funktionieren zwar, aber ins seröse Konzept passen die nun wirklich nicht.
Eine andere Lösung als so ein Bildchen oder andere Abfrage ist mir allerdings nicht bekannt.Deshalb hab ich hier mal ein Skript geschrieben, was zumindest etwas seriöser wirkt:
Klick mich hier
Das ganze funktioniert so: Das Skript generiert eine Zufallsrechnung (Addition/Subtraktion) mit den Zahlen von 1 bis 20. Es wird immer nach der Lösung der Rechnung gefragt. Die Frage wird in 4 unterschiedlichen Formaten
präsentiert.
Meine Fragen nun:
- Reicht das bereits aus um einen Spambot abzuwehren?
- Kann man einen Bot irgendwo geziehlt auf ein Skript hetzen, damit ich live erleben kann ob es funktioniert?
- Sind die Fragen zu schwer?
- Gibt es vielleicht einfach noch einen anderen wirksamen Schutz der die Bots fernhält und dabei auf Usereingaben verzichtet?
Hier für Interessierte der Code:
PHP-Code:
<?php
// Zuerst wird die Antispamrechnung erstellt
// =================================================================================================================
// Hier wird die Aufgabe per Zufallsgenerator erstellt
$zahl1 = rand(10,20); // Erste Zahl 10-20
$zahl2 = rand(1,10); // Zweite Zahl 1-10
$operator = rand(1,2); // + oder -
if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}
// Hier wird das Ergebnis krass fett Verschluesselt. md5 duerfte von jeden dummen Spambot ausreichen ;-)
$schluessel = md5($ergebnis);
// Hier wird die Rechnung erstellt
// Dies geschieht nach einem Zufallsprinzip, damit der Spambot es nicht allzu einfach hat. Moegliche Formate:
// 1 + 10 (1); 1 addiert zu 10 (2); Eins addiert zu Zehn (3); Zehn plus Eins (4);
// 1 - 10 (1); 1 subtrahiert von 10 (2); Eins subtrahiert von Zehn (3); Zehn minus Eins (4);
$auswahl = rand(1,4); // Waehlt eine Zufallszahl nach der die Ausgabe gestaltet wird
// ...1
if($auswahl == "1"){
$rechnung = "$zahl1 $operatorzeichen $zahl2?";
}
// ...2
if($auswahl == "2"){
if($operator == "1") {
$operatorzeichen2 = "addiert zu";
} else {
$operatorzeichen2 = "subtrahiert von";
}
$rechnung = "$zahl2 $operatorzeichen2 $zahl1?";
}
// ...3
if($auswahl == "3"){
// Hier werden die Ziffern ins ausgeschriebene Zahlen umgewandelt
$woerter = array("","Eins","Zwei","Drei","Vier","Fünf","Sechs","Sieben","Acht","Neun","Zehn","Elf","Zwölf","Dreizehn","Vierzehn","Fünfzehn","Sechzehn","Siebzehn","Achtzehn","Neunzehn","Zwanzig");
$zahl11 = $woerter[$zahl1];
$zahl22 = $woerter[$zahl2];
if($operator == "1") {
$operatorzeichen2 = "addiert zu";
} else {
$operatorzeichen2 = "subtrahiert von";
}
$rechnung = "$zahl22 $operatorzeichen2 $zahl11?";
}
// ...4
if($auswahl == "4"){
// Hier werden die Ziffern ins ausgeschriebene Zahlen umgewandelt
$woerter = array("","Eins","Zwei","Drei","Vier","Fünf","Sechs","Sieben","Acht","Neun","Zehn","Elf","Zwölf","Dreizehn","Vierzehn","Fünfzehn","Sechzehn","Siebzehn","Achtzehn","Neunzehn","Zwanzig");
$zahl11 = $woerter[$zahl1];
$zahl22 = $woerter[$zahl2];
if($operator == "1") {
$operatorzeichen2 = "plus";
} else {
$operatorzeichen2 = "minus";
}
$rechnung = "$zahl11 $operatorzeichen2 $zahl22?";
}
// Hier wird das letzt Ergebnis überprueft
$usereingabe = $_REQUEST['sicherheitscode'];
$systemeingabe = $_REQUEST['spamreferenz'];
$aufschluessel = md5($usereingabe);
if("$systemeingabe" == "$aufschluessel") {
$spamschutz = "1";
} else {
$spamschutz = "0";
}
// Ab hier findet sich das Skript zum Versenden der Mails
// =================================================================================================================
if($_REQUEST['Submit'])
{
// Ueberpruefung, ob alle Felder mit ein * ausgefuellt wurden, falls nein: Fehlerausgabe
if(empty($_REQUEST['name']) || empty($_REQUEST['unternehmen']) || empty($_REQUEST['mail']) || empty($_REQUEST['text']))
{
echo"<br><br><b>Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder mit * aus!</b><br><br>";
}
else
{
// Ueberpruefung, ob die angegebne email Adresse dem ueblichen Format entspricht. Falls nein: Fehlermeldung.
// Man koennte hier darueber nachdenken, nur bestimmte email Endungen zuzulassen, also zum Beispiel ".de", ".com", ".fr" und so weiter und Endungen wie ".ru" garnicht erst zuzulassen
if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$_REQUEST['mail']))
{
echo"<br><br><b>Bitte gehen Sie <a href=\"javascript:history.back();\">zuück</a> und geben eine korrekte E-Mail Adresse an</b><br><br>";
}
else
// Jetzt wird noch ueberprueft ob das Ergebnis korrekt ist
{
if ($spamschutz == "1") {
// Die eMail wird geschrieben und versand an $Empfaenger. Sollte in der Finalen Version auf jeden Fall noch richtig gestellt werden ;-) (info@xxx.de)
$Empfaenger = "kontakt@kontakt.net";
$Datum = date("d.m.Y");
$Zeit = date("H:i:s");
$Name = $_REQUEST['name'];
$eMail = $_REQUEST['mail'];
$Unternehmen = $_REQUEST['unternehmen'];
$Anschrift = $_REQUEST['anschrift'];
$Telefon = $_REQUEST['fon'];
$Nachricht = $_REQUEST['text'];
$Mailnachricht = "Über das Kontaktformular auf Ihrer Internetpräsenz ist am $Datum um $Zeit folgende Nachricht eingegangen: \n
Absender:
Name: $Name
Unternehmen: $Unternehmen
Anschrift: $Anschrift
Telefon: $Telefon
eMail: $eMail\n
Mitteilung: \n
$Nachricht \n";
$Mailbetreff = "Eingehende User-Nachricht von www.test.de";
mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['mail']);
echo"<br><br><b>Vielen Dank für Ihre Nachricht!</b><br><br>";
}
else
{
echo"<br><br><b>Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und geben das richtige Ergebnis an!</b><br><br>";
}
}
}
}
?>
<p><span class="headline">Kontakt</span></p>
<p>Sie erreichen uns entweder über das unten stehende Kontaktformular oder ganz klassisch über <a href="./index.php?src=impressum">Fax, Telefon und Post</a>.<br>
Leider müssen auch wir uns vor Spam Mails schützen und bitten Sie deshalb, die Felder mit * auszufüllen sowie die kleine Aufgabe am Ende des Formulars zu lösen. Vielen Dank für Ihr Verständnis. </p>
<p> </p>
<div style="margin:auto; text-align:left; width:505px">
<form name="kontaktformular" method="post" action="kontakt.php">
<p> Name*<br>
<label>
<input name="name" type="text" class="form" tabindex="2" size="80">
</label>
</p>
<p> Unternehmen*<br>
<label>
<input name="unternehmen" type="text" class="form" tabindex="3" size="80">
</label>
</p>
<p> Anschrift<br>
<label>
<input name="anschrift" type="text" class="form" tabindex="4" size="80">
</label>
</p>
<p> Email*<br>
<label>
<input name="mail" type="text" class="form" tabindex="5" size="80">
</label>
</p>
<p> Telefon<br>
<label>
<input name="fon" type="text" class="form" tabindex="6" size="80">
</label>
</p>
<p> Mitteilung*<br>
<label>
<textarea name="text" class="form" cols="60" rows="10" tabindex="7"></textarea>
</label>
</p>
<!-- An dieser Stelle bekommt der User die Spamschutzrechnung praesentiert und muss das Ergebnis eintippen. -->
<!-- Im versteckten Feld wird das Ergebnis verschluesselt uebergeben-->
<p> Spamschutz: Was ist <?php echo"$rechnung"; ?> (tragen Sie das Ergebniss als Ziffer ein) <br />
<label>
<input name="sicherheitscode" class="form" type="text" size="80" tabindex="8"/>
<input name="spamreferenz" type="hidden" value="<?php echo"$schluessel"; ?>" />
</label>
<br>
</p>
<p>
<label>
<input type="submit" name="Submit" value="Abschicken" tabindex="9"/>
</label>
</p>
</form>
</div>