Zur Navigation

Mein Wettbewerbsbeitrag für einen WBW des Landes BaWü [2]

11 StiffmasterX

ich geb dir lieber gleich mein skript zu verbesserung

<?php
//Wenn du error_reporting(0); nicht mehr als Kommentar lässt, dann werden evt.
//durch PHP generierte Fehlermeldung ausgeschaltet, so dass er User diese nicht
//mehr sehen kann!
//error_reporting(0);

//IP ermitteln
$ip=getenv("REMOTE_ADDR");

//Aktuelles Datum + Zeit ermitteln
$t=date("d"); //Tag TT
$m=date("m"); //Monat MM
$y=date("Y"); //Jahr YYYY
$g=date("G"); //Stunden 0-23
$i=date("i"); //Minuten 00-59
$d=$t.".".$m.".".$y." ".$g.":".$i; //Zusammenfassung

//Standardmässig OK = YES
$ok="yes";

//Auslesen der Daten und festlegen ob ausgefüllt
if(empty($HTTP_POST_VARS['name']))
{
	$ok="no";$name="";
}
else
{
	$name=$HTTP_POST_VARS['name'];
}

/*
if(empty($HTTP_POST_VARS['mail']))
{
	$ok="no";$mail="";
}
else
{
	$mail=$HTTP_POST_VARS['mail'];
}

//Sonderprüfung der Mailadresse:
if(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $mail))
{
	$ok="no";$mail="";
}
*/

if(empty($HTTP_POST_VARS['betreff']))
{
	$ok="no";$betreff="";
}
else
{
	$betreff=$HTTP_POST_VARS['betreff'];
}

if(empty($HTTP_POST_VARS['text']))
{
	$ok="no";$text="";
}

else
{
	$text=$HTTP_POST_VARS['text'];
}

//Das Feld Bewertung kann nicht leer sein, da Auswahlliste. Daher hier keine Abfrage ob es ausgefüllt wurde
$bewertung=$HTTP_POST_VARS['bewertung'];

//Wenn OK = no ist mindestens ein Feld nicht richtig ausgefüllt. Es wird geprüft welche/s Feld/er
//nicht richtig ausgefüllt wurden und die entsprechende Fehlermeldung generiert und der User
//aufgefordert die Felder auszufüllen. Per JavaScript zurück erreicht man, dass bereits ausgefüllte
//Felder weiterhin so erscheinen. Man könnte auch die Datei formular.htm angeben. Das bedeutet dann
//aber, dass alle bisherigen Angaben wieder leer sind!!!
if($ok=="no")
{
	//Definition was als Einleitung erscheinen soll
	$error1="<h1>Fehler</h1><p>Du hast das Formular leider nicht vollst&auml;ndig ausgef&uuml;llt.
	Bitte erg&auml;nze nachfolgende Angaben:</p>
	<ul>";
	
	//Fehlende Angaben
	if (empty($name))
	{
		$error2="<li>Name</li>";
	}
	else
	{
		$error2="";
	}
/*	if (empty($mail))
	{
		$error3="<li>Mail</li>";
	}
	else
	{
		$error3="";
	}
			*/
	if (empty($betreff))
	{
		$error4="<li>Betreff</li>";
	}
	else
	{
		$error4="";
	}
	if (empty($text))
	{
		$error5="<li>Mitteilung</li>";
	}
	else
	{
		$error5="";
	}
	
	//Definition was anschließend folgt
	$error6="</ul><p><a href='javascript:history.back()'>Zur&uuml;ck</a></p>";
	
	//Ausgabe des Textes
	echo $error1.$error2.$error3.$error4.$error5.$error6;
}
else
{

	//Definition der Email:
	$an_mail = "{e-mail-adresse}";
	$mailinhalt= "Verschickt von Mauer Projekt\nFolgende Nachricht wurde versendet:\n".$d."\n\nName: ".$name."\nMail: ".$mail."\n\nMitteilung:\n".$text."\n\nBewertung:\n".$bewertung."\n\nIP: ".$ip."\n";

	//Mail wird versendet:
	mail($an_mail,$betreff,$mailinhalt,"From:$name<$mail>\n");

	//Dankesmeldung
	echo "<h1>Vielen Dank</h1><p>Wir danke dir und werden dir gegebenenfalls so schnell wie möglich antworten!</p>";
	//echo $mailinhalt;

}
?>
		</td>

Edit Rudy: E-Mail-Adresse aus Spamschutzgründen entfernt.

15.11.2008 19:00 | geändert von Rudy: 15.11.2008 19:14

12 StiffmasterX

oh thx...
Neuer CODE mit schutz??
<?php
//Wenn du error_reporting(0); nicht mehr als Kommentar lässt, dann werden evt.
//durch PHP generierte Fehlermeldung ausgeschaltet, so dass er User diese nicht
//mehr sehen kann!
//error_reporting(0);

//IP ermitteln
$ip=getenv("REMOTE_ADDR");

//Aktuelles Datum + Zeit ermitteln
$t=date("d"); //Tag TT
$m=date("m"); //Monat MM
$y=date("Y"); //Jahr YYYY
$g=date("G"); //Stunden 0-23
$i=date("i"); //Minuten 00-59
$d=$t.".".$m.".".$y." ".$g.":".$i; //Zusammenfassung

//Standardmässig OK = YES
$ok="yes";

//Auslesen der Daten und festlegen ob ausgefüllt
if(empty($HTTP_POST_VARS['name']))
{
	$ok="no";$name="";
}
else
{
	$name=$HTTP_POST_VARS['name'];
}

/*
if(empty($HTTP_POST_VARS['mail']))
{
	$ok="no";$mail="";
}
else
{
	$mail=$HTTP_POST_VARS['mail'];
}
*/
//Sonderprüfung der Mailadresse:
if(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $mail))
{
	$ok="no";$mail="";
}


if(empty($HTTP_POST_VARS['betreff']))
{
	$ok="no";$betreff="";
}
else
{
	$betreff=$HTTP_POST_VARS['betreff'];
}

if(empty($HTTP_POST_VARS['text']))
{
	$ok="no";$text="";
}

else
{
	$text=$HTTP_POST_VARS['text'];
}

//Das Feld Bewertung kann nicht leer sein, da Auswahlliste. Daher hier keine Abfrage ob es ausgefüllt wurde
$bewertung=$HTTP_POST_VARS['bewertung'];

//Wenn OK = no ist mindestens ein Feld nicht richtig ausgefüllt. Es wird geprüft welche/s Feld/er
//nicht richtig ausgefüllt wurden und die entsprechende Fehlermeldung generiert und der User
//aufgefordert die Felder auszufüllen. Per JavaScript zurück erreicht man, dass bereits ausgefüllte
//Felder weiterhin so erscheinen. Man könnte auch die Datei formular.htm angeben. Das bedeutet dann
//aber, dass alle bisherigen Angaben wieder leer sind!!!
if($ok=="no")
{
	//Definition was als Einleitung erscheinen soll
	$error1="<h1>Fehler</h1><p>Du hast das Formular leider nicht vollst&auml;ndig ausgef&uuml;llt.
	Bitte erg&auml;nze oder korrigiere nachfolgende Angaben:</p>
	<ul>";
	
	//Fehlende Angaben
	if (empty($name))
	{
		$error2="<li>Name</li>";
	}
	else
	{
		$error2="";
	}
	if (empty($mail))
	{
		$error3="<li>Mail</li>";
	}
	else
	{
		$error3="";
	}

	if (empty($betreff))
	{
		$error4="<li>Betreff</li>";
	}
	else
	{
		$error4="";
	}
	if (empty($text))
	{
		$error5="<li>Mitteilung</li>";
	}
	else
	{
		$error5="";
	}
	
	//Definition was anschließend folgt
	$error6="</ul><p><a href='javascript:history.back()'>Zur&uuml;ck</a></p>";
	
	//Ausgabe des Textes
	echo $error1.$error2.$error3.$error4.$error5.$error6;
}
else
{
  $betreff = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $betreff);
  $mailinhalt = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $mailinhalt);
  $name = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $name);
  $mail = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $mail );


	//Definition der Email:
	$an_mail = "Mail";
	$mailinhalt= "Verschickt von Mauer Projekt\nFolgende Nachricht wurde versendet:\n".$d."\n\nName: ".$name."\nMail: ".$mail."\n\nMitteilung:\n".$text."\n\nBewertung:\n".$bewertung."\n\nIP: ".$ip."\n";

	//Mail wird versendet:
	mail($an_mail,$betreff,$mailinhalt,"From:$name<$mail>\n");

	//Dankesmeldung
	echo "<h1>Vielen Dank</h1><p>Wir danke dir und werden dir gegebenenfalls so schnell wie möglich antworten!</p>";
	//echo $mailinhalt;

}
?>
		</td>

15.11.2008 19:17 | geändert: 15.11.2008 19:19

13 Rudy

Füg mal oberhalb der Zeile mit dem mail()-Befehl folgendes ein:

$mail = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $mail);
$mail = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $mail);
$name = preg_replace( "/[^a-z0-9ÄÖÜäöü !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $name);
$name = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $name);

Der Mail-Header, den Du aus $mail und $name zusammenstellst, ist sonst wie Du ihn hast nicht geschützt. Teste das auf jeden Fall, auch mit Umlauten im Namen, ob es richtig funktioniert.

Edit:
Neuer CODE mit schutz??

Nein, aber Du hast Deine E-Mail-Adresse im Code von Beitrag 11 gepostet. Die habe ich entfernt, da sie sonst mit Sicherheit von einem E-Mail-Harvester aufgegriffen und zugespamt würde.

15.11.2008 19:20 | geändert: 15.11.2008 19:23

14 StiffmasterX

ok habe jetzt mein zeug wieder rausgeschmissen und dein reingemacht

15.11.2008 19:29

Nur Mitglieder können in diesem Forum Antworten schreiben.

Login | Registrieren