Zurück   Flashforum > Flash und Server > Server-Seite allgemein

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-08-2007, 00:18   #1 (permalink)
MoX reicht aus
 
Benutzerbild von MoX.de.tt
 
Registriert seit: Jul 2004
Ort: Berlin
Beiträge: 253
php Kontaktformular - Kampf den Bots

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:
  1. Reicht das bereits aus um einen Spambot abzuwehren?
  2. Kann man einen Bot irgendwo geziehlt auf ein Skript hetzen, damit ich live erleben kann ob es funktioniert?
  3. Sind die Fragen zu schwer?
  4. 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&uuml;nf","Sechs","Sieben","Acht","Neun","Zehn","Elf","Zw&ouml;lf","Dreizehn","Vierzehn","F&uuml;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&uuml;nf","Sechs","Sieben","Acht","Neun","Zehn","Elf","Zw&ouml;lf","Dreizehn","Vierzehn","F&uuml;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&uuml;ck</a> und f&uuml;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&uuml;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&uuml;ck</a> und geben das richtige Ergebnis an!</b><br><br>";      
      }
      }
     }
}
?>
<p><span class="headline">Kontakt</span></p>
<p>Sie erreichen uns entweder &uuml;ber das unten stehende Kontaktformular oder ganz klassisch &uuml;ber <a href="./index.php?src=impressum">Fax, Telefon und Post</a>.<br>
  Leider m&uuml;ssen auch wir uns vor Spam Mails sch&uuml;tzen und bitten Sie deshalb, die Felder mit   * auszuf&uuml;llen sowie die kleine Aufgabe am Ende des Formulars zu l&ouml;sen. Vielen Dank f&uuml;r Ihr Verst&auml;ndnis. </p>
  <p>&nbsp; </p>
  <div style="margin:auto; text-align:left; width:505px">
    <form name="kontaktformular" method="post" action="kontakt.php">
      <p>&nbsp;Name*<br>
        <label>
            <input name="name" type="text" class="form" tabindex="2" size="80">
        </label>
      </p>
          <p>&nbsp;Unternehmen*<br>
            <label>
            <input name="unternehmen" type="text" class="form" tabindex="3" size="80">
            </label>
        </p>
          <p>&nbsp;Anschrift<br>
            <label>
            <input name="anschrift" type="text" class="form" tabindex="4" size="80">
            </label>
        </p>
          <p>&nbsp;Email*<br>
            <label>
            <input name="mail" type="text" class="form" tabindex="5" size="80">
            </label>
        </p>
          <p>&nbsp;Telefon<br>
            <label>
            <input name="fon" type="text" class="form" tabindex="6" size="80">
            </label>
          </p>
          <p>&nbsp;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>&nbsp;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>
__________________
take it as a compliment

www.moxstyle.net

Geändert von MoX.de.tt (26-08-2007 um 01:01 Uhr)
MoX.de.tt ist offline   Mit Zitat antworten
Alt 26-08-2007, 00:51   #2 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

wieso bist du der meinung das eine captcha abfrage nicht "seriös" wäre?
also das mit dem rechnen ist ja auch nix neues aber ob das jetzt seriöser
wage ich zu bezweifeln.

wenns dir um das aussehen des captcha feldes geht, das kann man
sicherlich nach eigenen wünschen anpassen.
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist gerade online   Mit Zitat antworten
Alt 26-08-2007, 00:59   #3 (permalink)
MoX reicht aus
 
Benutzerbild von MoX.de.tt
 
Registriert seit: Jul 2004
Ort: Berlin
Beiträge: 253
In den letzten Monaten sind captcha Abfragen, die wir bis jetzt eingesetzt haben, mehrfach geknackt worden. Dabei ließ sich keine Sicherheitslücke im Skript feststellen und als wir anfingen, die Bilder bunter und chaotischer zu gestalten, zum Teil mit Hintergrundbildern, wurde es wieder besser. Daher gehe ich mal davon aus, dass der Bot das Bild lesen kann .
Aber ein knallbuntes Bildchen passt leider in die wenigsten Layouts.
Zudem hätte diese Art der Abfrage den Vorteil, dass man sie einfach in ein bestehendes Layout einfügen kann und css die Sache so darstellt, dass sie nicht aus dem Umfeld hervorsticht.
__________________
take it as a compliment

www.moxstyle.net
MoX.de.tt ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele