Spam sicheres mailing script
Patrick
- php
0 Stefan Bach0 Patrick
0 Henryk Plötz0 Patrick
Hallo
wie kann man ein Mailing script spam sicher machen??
wenn man bei mir die bestätigungsseite immer wieder aktualiesiert wird ja die funktion wiederholt und immer wieder eine mail verschickt. da gibt es bestimmt so ein paar leute die sowas gerne mal machen.
Mit freundlichen Grüssen,
Patrick
Hallo,
wenn man bei mir die bestätigungsseite immer wieder aktualiesiert wird ja die funktion wiederholt und immer wieder eine mail verschickt. da gibt es bestimmt so ein paar leute die sowas gerne mal machen.
Wenn es dir nur darum geht, dann fallen mir spontan zwei Möglichkeiten ein:
a) Du versendest anstelle deiner Bestätigungsseite einen Location Header welcher dann deine richtige Bestätigungsseite aufruft. Diese zeigt nur die Bestätigung an und versendet keine Mail. Sie kann also beliegib oft aktualisiert werden.
b) Du sicherst die IPs der letzten Sendungen bis zu einem Zeitraum von vielleicht 5 Minuten. Wenn jetzt jemand eine Mail versenden möchte und die IP in deiner Liste steht, dann lehnst du es ab.
Ich würde an deiner Stelle Möglichkeit a) favorisieren, da du dafür serverseitig nichts speichern musst.
Viele Grüße,
Stefan
Hallo
a) Du versendest anstelle deiner Bestätigungsseite einen Location Header welcher dann deine richtige Bestätigungsseite aufruft. Diese zeigt nur die Bestätigung an und versendet keine Mail. Sie kann also beliegib oft aktualisiert werden.
ja daran habe ich auch schon gedacht aber da brauch man doch nur auf zurück klichen und dann verschickt er wieder die mail und man wird wieder weitergleitet. also muss mann dann nur anstatt aktualisieren zurück klicken oder??
b) Du sicherst die IPs der letzten Sendungen bis zu einem Zeitraum von vielleicht 5 Minuten. Wenn jetzt jemand eine Mail versenden möchte und die IP in deiner Liste steht, dann lehnst du es ab.
wo sollte ich die denn speichern??
Mit freundlichen Grüssen,
Patrick
Hallo,
a) Du versendest anstelle deiner Bestätigungsseite einen Location Header welcher dann deine richtige Bestätigungsseite aufruft.
ja daran habe ich auch schon gedacht aber da brauch man doch nur auf zurück klichen
Ich denke nicht. Wenn du die Weiterleitung über einen Location Header machst, dann landet man beim Klick auf Zurück für gewöhnlich auf der Seite von welcher aus das Formular abgesendet wurde. (Ok, dort kann man dann einfach wieder auf senden drücken, aber das lässt sich so einfach nicht verhindern. Allerdings würde dir hier Henryks Ansatz mit den Tickets helfen.)
b) Du sicherst die IPs der letzten Sendungen bis zu einem Zeitraum von vielleicht 5 Minuten. Wenn jetzt jemand eine Mail versenden möchte und die IP in deiner Liste steht, dann lehnst du es ab.
wo sollte ich die denn speichern??
Woher soll ich das wissen?!? In deinem Homeverzeichnis, im Arbeitsverzeichnis deines Scriptes, meinetwegen auch im Rootverzeichnis. Das ist im Endeffekt so was von egal.
Viele Grüße,
Stefan
Moin,
wenn man bei mir die bestätigungsseite immer wieder aktualiesiert wird ja die funktion wiederholt und immer wieder eine mail verschickt.
Am besten gibst du Tickets aus: Beim ersten Aufruf des Formulars wird eine Zufallszahl generiert und zusammen mit dem Zeitpunkt auf dem Server gespeichert. Pro Zufallszahl kann man nur eine Mail verschicken, dann wird die Zahl ungültig gemacht. (Genauso nach etwas längerer Zeit.)
Um das ganze dann vor automatisierten Skripten zu schützen, kannst du dir mal in der aktuellen c't den Artikel zum Thema Captchas (Completely Automated Public Turing test to tell Computers and Humans Apart) ansehen bzw. Google dazu befragen.
Hallo
Am besten gibst du Tickets aus: Beim ersten Aufruf des Formulars wird eine Zufallszahl generiert und zusammen mit dem Zeitpunkt auf dem Server gespeichert. Pro Zufallszahl kann man nur eine Mail verschicken, dann wird die Zahl ungültig gemacht. (Genauso nach etwas längerer Zeit.)
kannst du mir ein beispiel zeigen oder mir es genau erklären wie ich es realisiere??
Mit freundlichen Grüssen,
Patrick
Moin,
kannst du mir ein beispiel zeigen oder mir es genau erklären wie ich es realisiere??
Was hast du denn nicht verstanden?
Also du gibst doch sicher zunächst mal ein Formular aus indem man seinen Text eintragen kann. Dieses Formular musst du jetzt von einem serverseitigen Skript erzeugen lassen. Das Skript generiert eine gute, lange, zufällig aussehende Zahl oder etwas anderes das sich nicht vorhersagen lässt. Ein MD5-Hash über die aktuelle Serverzeit als Timestamp, einen festen, geheimen String und eine Zufallszahl ist zum Beispiel keine ganz schlechte Idee. Dieser Wert wird als Ticket dienen und du speicherst ihn nun zum einen zusammen mit der aktuellen Serverzeit irgendwo (in einer Datei, einer Datenbank oder was auch immer) und gibst ihn auch in das Formular in ein Hidden-Feld aus.
Wenn der User das Formular ausgefüllt und abgeschickt hat, dann prüft dein Skript welches die Mail versenden soll erst einmal ob bei dem abgeschickten Formular ein Ticket welches du vorher erzeugt hast dabei ist (indem es in der Liste nachsieht) und ob es auch nicht allzu alt ist (da musst du dann eine eigene Grenze setzen). Bei der Gelegenheit kann es auch gleich alle alten Tickets aus der Liste löschen, damit die nicht ins Unermessliche wächst, wenn User das Formular aufrufen und nicht abschicken.
Wenn die Prüfung erfolgreich verlaufen ist verschickt dein Skript die Mail und löscht anschließend das Ticket aus der Liste. Wenn nun einfach ein User auf Neuladen oder Zurück und Absenden drückt, wird das selbe Ticket mehrfach verwendet. Da es aber nach der ersten Verwendung vom Server gelöscht wurde, wird die zweite Anfrage nicht durchgelassen. Der User muß nun das Formular ganz neu laden und seinen Text neu eintippen (oder aus der Zwischenablage kopieren) oder selber ein Skript schreiben, welches das automatisch erledigt. Gegen ersteres kannst du dich nur schützen, indem du nur eine bestimmte Anzahl Mails pro Zeiteinheit verschickst (von Beschränkungen pro IP-Addresse halte ich wegen der Nichteindeutigkeit der Zuordnung IP-User nichts). Gegen die automatischen Skripte helfen wie erwähnt Captchas.