Kontaktformular absichern
Maresa P.
- php
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
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
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©
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
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
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
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
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