Problem mit Kontaktformular in flash

SixxKiller

Erfahrenes Mitglied
Hi Leutz.

Ich hab ein etwas größeres Problem was mir auch den letzten Nerv raubt.
Ich hab ein Flashseite mit Kontakformular was mir Tobias Menzel eingebaut hat.
Läuft alles prima. Nun hab ich das Problem das über dieses Formular am Tag im Durchschnitt 50 bis 60 Mails mit diversen Inhalten (ich geh nicht näher drauf ein)
mein Postfach zuspammen.
Hier erstmal der Code aus flash:
Code:
sel_mail._list = new Array('info@icedogz.de', 'vorstand@icedogz.de', 'webmaster@icedogz.de');

but_submit._caption = "SENDEN";

tf_mail.restrict = "0-9A-Za-zöäüÖÄÜ@.\\-_";
tf_web.restrict = "0-9A-Za-zöäüÖÄÜ.\\-_/";
tf_icq.restrict = "0-9";

scroller.src = tf_msg;
scroller.h = 6;

var that = this;

var tf = new Array("name", "vname", "mail", "icq", "web", "betr", "msg");

for (var i=0; i<tf.length; i++) {
	var obj = this["tf_" + tf[i]];
	obj.tp = tf[i];
	obj.tabIndex = i;
	obj.onSetFocus = function() {
		high(that["pad_" + this.tp], false);
		tf_display.text = "";
	}
}

function clearAll() {
	for (var i in tf) {
		var obj = this["tf_" + tf[i]];
		obj.text = "";
	}
	tf_display.text = "";
}

function pressed(obj) {
	switch(obj) {
		case but_submit: checkSubmit(); break;
	}
}

function checkSubmit() {
	var err = new Array();
	err["name"] = checkName();
	err["vname"] = checkVName();
	err["mail"] = checkMail();
	err["betr"] = checkBetr();
	err["msg"] = checkMsg();
	var isok = true;
	for (var i in err) {
		high(this["pad_" + i.toString()], err[i]);
		if (err[i]) isok = false;
	}
	if (isok) doSubmit();
}
		
function high(obj, flag) {
	var cl = new Color(obj);
	if (flag) {
		var tr = {rb:255, gb:85, bb:-50};
		var tr0 = {rb:0, gb:0, bb:0};
		var c = 0;
		obj.onEnterFrame = function() {
			c ++;
			if (c % 2 == 0) {
				cl.setTransform(tr0);
			} else {
				cl.setTransform(tr);
			}
			if (c > 3) {
				tr.rb /= 2;
				tr.gb /= 5;
				tr.bb /= 3;
				cl.setTransform(tr);
				delete this.onEnterFrame;
			}
		}
	} else {
		var tr = {rb:0, gb:0, bb:0};
		cl.setTransform(tr);
	}
}

function checkName() {
	var e = (tf_name.text.length < 3);
	return e;
}

function checkVName() {
	var e = (tf_vname.text.length < 3);
	return e;
}

function checkMail() {
	var e = 0;
	e += (tf_mail.text.length < 8);
	e += (tf_mail.text.indexOf("@") < 0);
	e += (tf_mail.text.indexOf("@") != tf_mail.text.lastIndexOf("@"));
	e += (Math.abs(tf_mail.text.indexOf("@") - tf_mail.text.indexOf(".")) < 2);
	return e;
}

function checkBetr() {
	var e = (tf_betr.text.length < 2);
	return e;
}

function checkMsg() {
	var e = (tf_msg.text.length < 8);
	return e;
}

function doSubmit() {
	display("SENDE NACHRICHT ...");
	var lv = new LoadVars();
	for (var i in tf) {
		lv["msg_" + tf[i]] = escape(this["tf_" + tf[i]].text);
	}
	lv.target_mail = sel_mail._value;
	lv.onLoad = function(ok) {
		if (ok && this.resp == "OK") {
			clearAll();
			display("NACHRICHT GESENDET AN: " + sel_mail._value.toUpperCase());
		} else {
			display("SENDEFEHLER");
		}
	}
	lv.sendAndLoad("mailto.php", lv, "POST");
}

function display(msg) {
	tf_display.text = msg;
}
Und hier die mailto.php:
Code:
<?php

$valid_dest = array('info@icedogz.de', 'vorstand@icedogz.de', 'webmaster@icedogz.de');

$dest = $_POST['target_mail'];

if (!in_array($dest, $valid_dest, true)) {
	$dest = $valid_dest[0];
}

$msg_name = rawurldecode($_POST['msg_name']);
$msg_vname = rawurldecode($_POST['msg_vname']);
$msg_name = rawurldecode($_POST['msg_name']);
$msg_mail = makeMail(utf8_decode(rawurldecode($_POST['msg_mail'])));
$msg_icq = rawurldecode($_POST['msg_icq']);
$msg_web = makeURL(utf8_decode(rawurldecode($_POST['msg_web'])));
$msg_betr = utf8_decode(rawurldecode($_POST['msg_betr']));
$msg_msg = utf8_decode(rawurldecode($_POST['msg_msg']));

$msg_ip = $_SERVER['REMOTE_ADDR'];
$msg_date = date('d.m.Y').' um '.date('H:G').' Uhr';;

$head = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<style type="text/css">
body {
	background-color:	#F1F1FF;
	font-family:		Verdana, Arial, Sans-Serif;
	font-size:			12px;
}

li {
	padding:	2px;
}

h4 {
	margin-bottom:	10px;
	margin-top:		5px;
}

p {
	margin-bottom:	20px;
	margin-left:	10px;
}

.hl {
	color:			#AA0000;
}

.infos {
	display:	block;
	border:		1px dotted grey;
	padding:	5px;
	background-color:	#EEFFF1;
	margin-bottom:		10px;
}

.message {
	display:	block;
	border:		1px dotted grey;
	padding:	5px;
	background-color:	#F6F6FF;
	margin-bottom:		10px;
}

</style>
<BODY>';

$foot = '</BODY></HTML>';

$body = '<h2>Besuchernachricht von www.icedogz.de</h2>';
$body.= '<div class="infos">';
$body.= '<h4>Besucherinformationen:</h4><ul>';
$body.= '<li><b>Name:</b> '.$msg_name.', '.$msg_vname.'</li>';
$body.= '<li><b>E-Mail:</b> '.$msg_mail.'</li>';
if (strlen($msg_icq) > 0) {
	$body.= '<li><b>ICQ:</b> '.$msg_icq.'</li>';
}
if (strlen($msg_web) > 0) {
	$body.= '<li><b>Webseite:</b> '.$msg_web.'</li>';
}
$body.= '<li><span class="hl"><b>Datum:</b> '.$msg_date.'</span></li>';
$body.= '<li><span class="hl"><b>IP:</b> '.$msg_ip.'</span></li>';
$body.= '</ul>';
$body.= '</div>';
$body.= '<div class="message">';
$body.= '<h4 >Betreff: </h4>';
$body.= '<p>'.nl2br(htmlentities($msg_betr)).'</p>';
$body.= '<h4>Nachricht:</h4>';
$body.= '<p>'.nl2br(htmlentities($msg_msg)).'</p>';
$body.= '</div>';

$headers = "From: mailer@icedogz.de\n";
$headers.= "MIME-Version: 1.0\n";
$headers.= "Content-type: text/html; charset=iso-8859-1\n";
$headers.= "Content-Transfer-Encodeing: quoted-printable\n";

$ostr = $head.$body.$foot;

if (@mail($dest, 'Besuchernachricht von www.icedogz.de', $ostr, $headers)) {
	echo 'resp=OK';
} else {
	echo 'resp=Sendefehler';
}

function makeURL($str) {
	if (strlen($str) < 3) return "";
	$str = strtolower($str);
	if (substr($str, 0, 7) != 'http://' && substr($str, 0, 6) != 'ftp://') {
		$str = 'http://'.$str;
	}
	return '<a href="'.$str.'">'.$str.'</a>';
}

function makeMail($str) {
	return '<a href="mailto:'.$str.'">'.$str.'</a>';
}

?>

Wie kann ich jetzt eine Art Sicherung einbauen damit ich nicht ständig zugespammt werde? In Flash bin ich Anfänger und php geht so.
Vielleicht hat jemand einen Tip für mich.
Danke für Eure Mühe.

Greetz SixxKiller

P.S.: Falls bei flash falsch bitte verschieben!
 
Hi,

zeig mal den Header so einer Mail - es stellt sich die Frage, ob für jede Mail tatsächlich das Flash-Formular verwendet wird (dann könnte man eine Art Captcha oder auch eine IP-basierte Reloadsperre einbauen), oder ob direkt das PHP-Script zum Versenden von Spam-Mails mißbraucht wird (eigentlich dürften weder im Empfänger noch im Header Daten landen, die vom Benutzer stammen, aber vielleicht habe ich etwas übersehen).

Gruß
.
 
Sorry hab heut morgen aufgeräumt und daher keine Mails mehr da.
Meist stehen nur die Mailadressen drin sonst nichts.
Wie müsste ich dieses Captcha einbauen?
Falls ich mich nicht irre ist das ja mit Codeingabe oder so.

Gruß
SixxKiller
 
Hi,

Du lässt von Flash in einem MovieClip eine Folge aus unterschiedlich rotierten und skalierten Zeichen anzeigen, und erstellst ein weiteres Eingabefeld, in das der Besucher den angezeigten Code eingeben muss.

Für Deine Zwecke dürfte es ausreichen, wenn Du den eingegebenen Code im Klartext und den tatsächlichen Code (der angezeigt wurde) mit einer einfachen Verschlüsselung an den Server überträgst. Sicherer (aber auch aufwändiger) wäre es, den Code auf dem Server zu erzeugen, in einer Session zu speichern und an Flash zu senden.

Eine andere Alternative wäre die, auf dem Server die letzten IP-Adressen abzulegen (z.B. in einer Tabelle oder Textdatei), und neue Anfragen auf Übereinstimmung zu testen (such dazu mal im PHP-Forum unter "Reloadsperre").

Allerdings: Die Anzahl (50-60) der täglichen Mails lässt mich an der Verwendung des Flash-Formulars zweifeln. Ich kann mir zwar vorstellen, dass intelligente Spambots Textfelder und Aktionen auf Schaltflächen in SWF-Dateien prinzipiell auslesen und füllen können, für wahrscheinlich halte ich es aber nicht.

Wahrscheinlicher ist die Möglichkeit, dass das PHP-Script direkt aufgerufen wird (in der Hoffnung, dass an die Zieladresse weitere Adressen (mittels Zeilenumbruch) angefügt werden können. Dies wird zwar fehlschlagen, da die übermittelte Adresse auf Übereinstimmung mit einer Liste geürpft wird, aber zumindest Du bekommst die Mails (vermutlich an die Adresse "info@icedogz.de").

Daher würde ich zum einen eher mit der IP-basierten Reloadsperre arbeiten, und zum anderen eine rudimentäre Plausibilitätsprüfung durchführen: So könnten Mails, in deren Empfänger- oder Absenderadresse Zeilenumbrüche zu finden sind, prinzipiell ignoriert werden.

Mach mal folgendes: Schreibe den kompletten Inhalt von $_POST für ein oder zwei Tage in eine Textdatei (füge neue Aufrufe jeweils hinten an) und poste dann diese Liste hier.

Gruß
.
 
Zuerst vielen Dank Tobias für deine Hilfe.
Was IP-basierten Reloadsperre und rudimentäre Plausibilitätsprüfung
bin ich jetzt wohl im falschen Forum. Werd erstmal die Suche quälen.
Oder hast Du ventuell nen Link dafür?

Greetz SixxKiller
 
Spontan nicht, aber schau ins PHP-Forum - da solltest Du alles relevante finden.

Mein Vorschlag wäre wie gesagt folgendes: Setze mal für 1-2 Tage folgendes an den Anfang Deines PHP-Scripts:
PHP:
$fhd = fopen("spamlog.txt", "a");
fwrite($fhd, date("d.m.Y, H:i:s")."\r\n");
foreach($_POST as $key=>$val) {
  fwrite($fhd, "   ".$key.": ".$val."\r\n");
}
fclose($fhd);
und schau Dir dann den Inhalt der Date "spamlog.txt" mal an.

Gruß
.
 
Okay Tobias.
Hab soweit alles geändert und t auch.
Werde zwei Tage abwarten und dann das Ergebniss hier posten.
Danke nochmal.

Greetz SixxKiller
 

Neue Beiträge

Zurück