PHP-Mail: Kontaktformular-Hack?

Hallo PHP-Spezis,

seit kurzem bekomme ich immer wieder über das Kontaktformular einer meiner Websites auf einen Schlag mehrere Nachrichten, die ganz offensichtlich nicht mit der Hand eingegeben wurden. Es schaut so aus, als ob da jemand mein Script aufruft, um irgendwelchen Schrott (Viren…?) zu versenden. Es handelt sich da um ein ganz normales, popeliges Formular, von dem aus mit „POST“ ein PHP-Script aktiviert wird, welches dann mit „mail“ die Daten an meine Mail-Adresse schickt.

Hat jemand schon Erfahrung mit sowas und was könnte ich dagegen tun? Die „Holzhammermethode“, nämlich das Kontaktformular einfach für einige Zeit stilllegen, möchte ich nur im äußerstem Notfall; gibt’s hier einfachere und doch wirkungsvolle Methoden? Kann ich irgendwie herausfinden, woher dieser unberechtigte Aufruf kommt (die IP dürfte sicherlich nicht die Orginal-IP des Übeltäters sein)?

Ich bin euch für jeden Tipp dankbar und wünsche noch ein schönes (Rest-)Wochenende.

Robi

Moin…

Wie heissen denn Deine Input-Felder?
Sind deren Namen so eindeutig, dass ein Robot das übernehmen könnte?

Ein paar Tipps, die was bringen könnten, aber nicht unbedingt helfen müssen…

  1. Wenn das Formular „contact“ o.ä. heisst - benenn es um
  2. Schreibe in den Quelltext des Formulars, dass es von Suchmaschinen nicht indiziert werden soll.
  3. Benenne die Formulareingabefelder „zufällig“ und nicht mit eindeutigen Namen
  4. Setze einen Validierungscode ein…
    Beispiel:
    Du trägst beim Seitenaufruf einen Code in eine Datenbank ein.
    Diesen Code zeigst Du in der Seite als „input type=hidden“ an.
    Wird der Code richtig übergeben lösche ihn aus der Datenbank und sende die mail.

Moin…

Wie heissen denn Deine Input-Felder?
Sind deren Namen so eindeutig, dass ein Robot das übernehmen
könnte?

Sind sie. :frowning: Name, email etc. sind ja nun wirklich eindeutig.

Ein paar Tipps, die was bringen könnten, aber nicht unbedingt
helfen müssen…

  1. Wenn das Formular „contact“ o.ä. heisst - benenn es um

Hieß zwar nicht so, habe es dennoch schon umbenannt, dann war auch längere Zeit Ruhe, aber nu ging das wieder los…

  1. Schreibe in den Quelltext des Formulars, dass es von
    Suchmaschinen nicht indiziert werden soll.

Ich habe da zwar schon mal gelesen, dass das möglich ist (ich glaube, hier im Forum), muss das mal wieder suchen. Vorerst habe ich die Seite mal in „robots.txt“ mit disallow eingetragen.

  1. Benenne die Formulareingabefelder „zufällig“ und nicht mit
    eindeutigen Namen

Mache ich doch gleich!

  1. Setze einen Validierungscode ein…
    Beispiel:
    Du trägst beim Seitenaufruf einen Code in eine Datenbank ein.
    Diesen Code zeigst Du in der Seite als „input type=hidden“ an.
    Wird der Code richtig übergeben lösche ihn aus der Datenbank
    und sende die mail.

Daran habe ich auch schon gedacht, mir erschien nur der Aufwand ziemlich hoch. Obwohl - eigentlich stimmt das nicht, so ein DB-Zugriff geht eigentlich ratz-fatz und sooooo viele Nachrichten werden über das Formular ja nun auch wieder nicht geschickt.

Ich habe auch schon daran gedacht, eine Abfrage einzubauen, ob der Aufruf des Mail-Scripts auch wirklich von meiner Formular-Seite kommt ($_HTTP_REFERER). Kann ja beides kombinieren.

Komisch, dass ich das nur bei dieser einen Website habe. Bei allen anderen kam sowas (bislang) noch nicht vor. Ob’s vielleicht auch mit daran liegt, dass dies die einzige Seite ist, bei der ich die Eingabe-Prüfungen noch mit JavaScript mache (muss ich mal umstellen)?

Danke für die Tipps!

Schönen Sonntag noch!

Robi

PS. Hier in Dresden scheint die Sonne, vom Schneechaos im Rest-Deutschland keine Spur.

Was ist Schnee???

  1. Schreibe in den Quelltext des Formulars, dass es von
    Suchmaschinen nicht indiziert werden soll.

Ich habe da zwar schon mal gelesen, dass das möglich ist (ich
glaube, hier im Forum), muss das mal wieder suchen. Vorerst
habe ich die Seite mal in „robots.txt“ mit disallow
eingetragen.

würde ich nicht nur in die robots.txt schreiben :wink:
die wird auch nicht von allen Spidern ausgelesen…

Ich habe auch schon daran gedacht, eine Abfrage einzubauen, ob
der Aufruf des Mail-Scripts auch wirklich von meiner
Formular-Seite kommt ($_HTTP_REFERER). Kann ja beides
kombinieren.

davon würde ich abraten…
In Opera10 ist es einstellbar, ob der Referer noch mitgeschickt wird. Bei manchen Firewalls wird dieser auch rausgefiltert. Du würdest dann auch keine Mails bekommen, zumal automatisierte Scripte wohl auch keinen Referer mitschicken würden…

PS. Hier in Dresden scheint die Sonne, vom Schneechaos im
Rest-Deutschland keine Spur.

Was ist Schnee???

class schnee
{
var $degree;
var $color;
var $orientation;
var $height;
var $location;
function do\_snow()
 {
 if ($this-\>location == "Muenchen") $this-\>color = "matschgrau";
 if ($this-\>degree location != "Dresden") echo "ich bin kalt, ich bin $this-\>color, ich schneie von $this-\>orientation und ich bin $this-\>height hoch :smile:";
 }
}

Hallo,

das ganze hört sich nach Email-Injection an, d.h. jemand versucht dein Mail-Formular als SMTP Proxy zu missbrauchen und Spam darüber zu versenden:

http://securephp.damonkohler.com/index.php/Email_Inj…

Gruß
Till

Hallo !

Ergänzend: Schaue dir mal das Script an, ob das wirklich Spamsicher ist. Wenn du beispielsweise den Absender aus der Eingabe an mail() übergibst, solltest du selbigen auf zulässige Zeichen überprüfen (nicht das da einer \n und 100e Zeilen Bcc: mitschickt…).

Ich bekam den Müll immer mehrmals hintereinander von der gleichen IP, daher habe ich bei mir das Formular nech dem 2. Absenden für eine Stunde für die sendende IP gesperrt…

Alexander

Hallo Alexander!

Ergänzend: Schaue dir mal das Script an, ob das wirklich
Spamsicher ist. Wenn du beispielsweise den Absender aus der
Eingabe an mail() übergibst, solltest du selbigen auf
zulässige Zeichen überprüfen (nicht das da einer \n und 100e
Zeilen Bcc: mitschickt…).

Ich fürchte mal, genau das ist geschehen, so wie’s aussieht. Ich denke mal, dass mein größter Fehler der war, dass ich die Eingabeprüfung mit JavaScript gemacht habe (ist 'ne etwas ältere Seite, sollte damals schnell gehen und da habe ich es mir einfach gemacht). Seit ich jetzt komplett auf PHP umgestellt und einige der hier erhaltenen Tipps befolgt habe, ist der Spuk (hoffentlich für immer) vorbei.

Gruß Robi

Interessante Seite, Danke für den Hinweis!

Gruß

Robi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]