Maresa P.: Kontaktformular absichern

Hallo Forum,

auf einer Website verwende ich ein Kontaktformular, welches mittels PHP verarbeitet wird. Das Ergebnis wird per PHP mail() an einen Empfänger versendet.

Nun rief mich letztens mein Provider an und meinte, dass sie das Formular vorübergehend aus dem Netz nehmen mussten, da es jemand gefloodes hat... Es wurden 60.000 Mails über das Formular verschickt.

Technisch ist soetwas ja ganz einfach... einfach in einer Schleife die PHP-Datei des Kontaktformulars requesten und die entsprechenden Parameter mitposten.

Wie kann ich soetwas verhindern. Ich meine mal etwas mit einer Challenge, welche einer Session-ID entspricht und in einem Hidde-Field übermittelt wird, gehört zu haben. Der genaue Ablauf ist mir allerdings nicht klar.

Wer kann mit mit einem Lösungsansatz weiterhelfen?

Vielen Dank und Gruß

Maresa

  1. Hallo Maresa,

    auf einer Website verwende ich ein Kontaktformular, welches mittels PHP verarbeitet wird. Das Ergebnis wird per PHP mail() an einen Empfänger versendet.

    Nun rief mich letztens mein Provider an und meinte, dass sie das Formular vorübergehend aus dem Netz nehmen mussten, da es jemand gefloodes hat... Es wurden 60.000 Mails über das Formular verschickt.

    Technisch ist soetwas ja ganz einfach... einfach in einer Schleife die PHP-Datei des Kontaktformulars requesten und die entsprechenden Parameter mitposten.

    Wie kann ich soetwas verhindern. Ich meine mal etwas mit einer Challenge, welche einer Session-ID entspricht und in einem Hidde-Field übermittelt wird, gehört zu haben. Der genaue Ablauf ist mir allerdings nicht klar.

    Wer kann mit mit einem Lösungsansatz weiterhelfen?

    darüber gab es kürzlich eine Diskussion.
    Aber bei dieser Form von Attacke ist das einfache Speichern der IP-Adresse ausreichend:

    /docroot
        |
        |-/ip_verzeichnis
        |
        `-kontakt.php

      
    <?php  
    /* kontakt.php */  
    clearstatcache();  
    $c=count($d=scandir('ip_verzeichnis'));  
    $t=time()-120; # hier die Zeit in Sekunden einstellen  
    for($i=0;$i<$c;$i++){  
     $a=stat('ip_verzeichnis/'.$d[$i]);  
     if($a[9]<$t){  
      unlink('ip_verzeichnis/'.$d[$i]);  
      unset($d[$i]);  
     }  
    }  
    if(in_array($_SERVER['REMOTE_ADDR'],$d))  
     die('Von Ihrer IP-Adresse wurde in den letzten zwei Minuten bereits eine Nachricht versendet.');  
      
    touch('ip_verzeichnis/'.$_SERVER['REMOTE_ADDR']);  
      
    // kontaktformularverarbeitung und Mail senden  
    ?>  
    
    

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
  2. Moin @ All,

    auf einer Website verwende ich ein Kontaktformular, welches mittels PHP verarbeitet wird. Das Ergebnis wird per PHP mail() an einen Empfänger versendet.

    Nun rief mich letztens mein Provider an und meinte, dass sie das Formular vorübergehend aus dem Netz nehmen mussten, da es jemand gefloodes hat... Es wurden 60.000 Mails über das Formular verschickt.

    ich habe da mal eine Verständnisfrage. Bei einem Kontaktformular ist ja der Empfänger immer der gleiche. Vorausgesetzt, dass man nicht versucht das Formular über den Inhalt zu manipulieren, was macht es dann für einen Sinn 60.000 Mails an den gleichen Empfänger zu schicken?

    @Maresa,
    oder wurde das Formular (erfolgreich) manipuliert?

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Hello Mike,

      ich habe da mal eine Verständnisfrage. Bei einem Kontaktformular ist ja der Empfänger immer der gleiche. Vorausgesetzt, dass man nicht versucht das Formular über den Inhalt zu manipulieren, was macht es dann für einen Sinn 60.000 Mails an den gleichen Empfänger zu schicken?

      Du kannst der Meinung sein, dass die Eingaben des Formulars lediglich an Dich als Empfänger gehen...

      Wenn Du es zulässt, dass Eingaben des Benutzers (ungeprüft) in die Header der eMail einzug halten können, dann hast Du eine entsprechende Lücke.

      Dazu gehören

      • To
      • From
      • Subject
      • Reply To
      • ...

      Schau Dir mal eine Mail eines Standard-Mailclients an. Dann weißt Du doch, was wo landet.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

    2. Moin @ All,

      Hi

      oder wurde das Formular (erfolgreich) manipuliert?

      Du hast vollkommen recht. Die Mail ging 60.000 mal an die gleiche (fest hinterlegte) E-Mail Adresse. Der Empfänger wurde nicht manipuliert.

      regds
      Mike©

      Gruß
      Maresa

      1. Hello,

        Du hast vollkommen recht. Die Mail ging 60.000 mal an die gleiche (fest hinterlegte) E-Mail Adresse. Der Empfänger wurde nicht manipuliert.

        Darin sehe ich aber keine hinreichende Begründung dafür, dass das Script vom Netz genommen werden muss. Das könnte man schließlich auch mit extern zugeführten eMails erreichen.

        Allerdings wird der Provider sicher auch "Erfahrungswerte" haben.

        Derartige Scripte sollten grundsätzlich nur mit POST arbeiten, da sie dann nicht "on the fly" von jedem x-beliebigen Browser aus missbraucht werden können.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

  3. Hi,

    Nun rief mich letztens mein Provider an und meinte, dass sie das Formular vorübergehend aus dem Netz nehmen mussten, da es jemand gefloodes hat... Es wurden 60.000 Mails über das Formular verschickt.

    wenn Du die Absender-Mail unvalidiert ins from von mail() schreibst, koennen Dir Header oder cc'/bcc's untergejubelt werden. Pruefe also vor allem, ob Zeilenumbrueche in der Absender-Email stecken. Du kannst auch mal nach der php-Klasse "validate" googeln, die validiert alles moegliche, auch e-mail-Adressen.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.