|
|||
Per PHP aufgerufenes Kontaktformular wird missbraucht
Hallo zusammen!
Vor einiger Zeit baute ich in meine Website ein per PHP aufgerufenes Kontaktformular ein, gemäss der in Stefan Münz Buch Professionelle Websites gegebenen Anleitung. Bis vor kurzem hatte das auch wunderbar funktioniert. Doch seit einigen Tagen werde ich von hunderten eMails überschwemmt, welche an die in kontakt.php festgelegte eMail-Adresse und über den von mir benutzten Mail-Server (aber nicht mit dem von mir festgelegten Betreff) an mich verschickt werden. Offenbar will mir jemand etwas beweisen oder mich einfach belästigen. Mir ist nicht klar, wie der/die das überhaupt fertigbringt/en, da ich selbst es per Browser nicht schaffe, Einblick in die in der PHP-Datei angegebenen Daten zu bekommen. In einem Archiv kontakt gibt es drei Dateien: kontaktformular.html, danke.html und kontakt.php. Die PHP-Datei beginnt so: Code:
<?php $mailto = "meine@adresse.org"; $form_file = "kontaktformular.html"; $thanks_file = "danke.html"; $standard_legend = "Text"; $error_legend = "Text"; Das Formular in der Datei kontaktformular.html beginnt mit folgenden Angaben: Code:
<form action="[%pfad%]" method="post" accept-charset="UTF-8" onsubmit="return formular_pruefen()"> <fieldset> <input type="hidden" name="return" value="danke.html" /> <input type="hidden" name="subject" value="festgelegter Betreff" /> Weshalb kann jemand meinen Mails-Server so für seine Zwecke benutzen? Was kann ich dagegen tun? Dieser Beitrag scheint dem Thema Sicherheit von eigenem PHP Kontaktformular ähnlich zu sein, die dort gegebenen Antworten verstehe ich aber nicht. Und noch eine Nebenfrage: Im Betreff kann ich keine Umlaute benutzen, denn diese kommen dann im Mail-Client unlesbar an. Warum ist das so? Danke für eure hilfreichen Antworten. |
Sponsored Links |
|
|||
Das geht ganz einfach.
Zum Beispiel öffne ich mit der PHP-Erweiterung "Curl" eine Verbindung zu deinem Server, schicke auf der richtigen Seite einen POST-Request ab mit meinen Daten. Da du den Betreff nur über ein verstecktes Feld regelst kann ich den wunderbar manipulieren. Ich wäre nun so böse und setze eine Endlosschleife. SChwups spame ich die Mailbox x mit Tausenden von Mails voll... Du musst nicht Einblick in die Datei bekommen. Es reicht, wenn man einen Browser "simuliert" und wie ein Browser das Formular abschickt. |
Sponsored Links |
|
||||
Zitat:
|
|
|||
Ich würde diese Möglichkeit bevorzugen:
Einfache Fragen, die zufälligerweise aus der Datenbank ausgelesen werden mit zufälligem name-Attribut. Damit verwirrst du Bots scharf. Wenn das Feld nicht ausgefüllt wird => Block Wenn es falsch ist => Block Einfache Fragen wären zum Beispiel "Du hast 3 Eier und verteilst diese an 3 Kinder. Wieviele Eier bekommt jedes Kind?" Diese Fragen kann ja wohl jeder Primarschüler lösen. Konnte sogar mein kleiner Bruder lösen als er im Kindergarten war ^^ Ein paar solche Fragen, zufällig ausgelesen, und du hast eine weniger Barrierebehaftete Lösung. Wenn ich zum Beispiel grad mit der Shell rumsurfe seh ich diese Bildchen net ^^ |
|
||||
Zitat:
|
|
|||
Zitat:
Mit simplen, Deuschten Sätze kannst du da viel machen. Spielen. "Siebzehn multipliziert mit eins." |
Sponsored Links |
|
|||
Beim beschriebenen Problem hatte es sich um eMail-Injection gehandelt. Die im Internet dazu gefundenen Lösungsvorschläge waren vielfältig, und – um zu verstehen, was ich tue – musste ich mich zuerst ein wenig in PHP einarbeiten.
Der erste Lösungsversuch war ein leeres und durch CSS unsichtbar gemachtes Eingabefeld im Kontaktformular einzubauen. Das PHP-Script sollte die Mitteilung nur abschicken können, wenn das anfangs leere und unsichtbare Feld immer noch leer bleib. Trotz dieser Massnahme wurden aber weiterhin unerwünschte Werbe-eMails über mein Kontaktformular verschickt. Unbefriedigend an dieser Lösung war zudem, dass das leere Feld, welches leer bleiben musste, ohne CSS sichtbar war. Also musste eine andere Lösung her. Unterdessen bin ich zwar immer noch PHP-Neuling, habe nun jedoch eine Lösung zusammengebastelt, die bis jetzt zu funktionieren scheint. Einer meiner Fehler war gewesen, den Betreff im HTML-Dokument festzulegen. Dieser ist jetzt wie alle andern Angaben auch im PHP-Script integriert. Die einzeiligen Eingabefelder werden auf eventuell vorkommende, eingeschleuste Zeilenumbrüche überprüft. Das mehrzeilige Textfeld für die Mitteilungen wird auf Ausdrücke wie to:, cc: und bcc:, aber auch auf Worte wie V*i*a*g*r*a und ähnliches kontrolliert. Wenn keine dieser Eingaben vorkommt und auch alle andern Eingaben als richtig anerkannt werden, kann die Mitteilung verschickt werden. Danke für die hier gegebenen Tipps! |
Sponsored Links |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Kontaktformular nur per PHP? | suppenelse | Serveradministration und serverseitige Scripte | 6 | 12.03.2010 19:42 |
PHP Kontaktformular und verschiedene Browser | HTMLLernender | (X)HTML | 1 | 22.01.2010 12:08 |
Dateien auslagern - Include und PHP | ArcVieh | Serveradministration und serverseitige Scripte | 17 | 27.03.2008 19:09 |
Sicherheit von eigenem PHP Kontaktformular | Lloyd Larkin | Serveradministration und serverseitige Scripte | 13 | 01.10.2006 13:02 |