Kleines Problem mit Kontaktformular

M

macbooklover

Mitglied
Thread Starter
Dabei seit
24.07.2006
Beiträge
73
Reaktionspunkte
0
Hallo zusammen.
Hoffe Ihr könnt mir Helfen. Hab ein kleines Problem mit einem Kontaktformular
Hier erst mal der code:


HTML:
<html>
<head>
<title>Kontaktformular mit PHP</title>
</head>
<body>
<?php

$Empfaenger = "empfänger@e-mail.de";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Alle mit einem * gekennzeichneten felder müssen ausgefüllt werden";
   }
   else
   {
      $Mailnachricht = "Eine neue Anfrage: \n\n";
      while(list($Formularfeld, $Wert)=each($_REQUEST))
      {
         if($Formularfeld!="Send")
         {
            $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
         }
      }
	  $Mailnachricht .= "\nDatum/Zeit: ";
      $Mailnachricht .= date("d.m.Y H:i:s");
      $Mailbetreff = "Kontakt: ";
      $Mailbetreff = "Anfrage Webseite";
      mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }
}


?>

<table border="0" cellpadding="1" cellspacing="2">
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
<tr>
  <td>Name:</td>
  <td><input name="Name" size="20" type="text">*</td>
</tr>
<tr>
  <td>eMail:</td>
  <td><input name="Email" size="20" type="text">*</td>
</tr>

<tr>
  <td>Nachricht:</td>
  <td><textarea cols="25" name="Nachricht" rows="5"></textarea></td>
</tr>
<tr>
  <td>Stehempfang</td>
  <td><input checked name="Stehempfang" type="checkbox" value="Gewünscht"></td>
</tr>
<tr>
  <td>Klima</td>
  <td><input checked name="Klima" type="checkbox" value="Gewünscht"></td>
</tr>
<tr>
  <td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken">    <input name="Reset" type="reset" value="Löschen"></td>
</tr>
</form>
</table>
</body>
</html>

So und das eigentliche Problem ist die Empfangen E-Mail. Dort erscheint immer "fontSize: 100". Weis aber nicht wo das her kommt und möchte es auch gerne weg haben. Hier mal ein Beispiel für eine empfrangene Mail:

Eine neue Anfrage:

Name: asdasd
Email: asdasd
Nachricht: asdasdasd
Stehempfang: Gewünscht
Klima: Gewünscht
fontSize: 100

Hoffe Ihr könnt mir Helfen. Danke
 
Zuletzt bearbeitet von einem Moderator:
Aus irgend einem Grund wird wohl der Parameter fontSize über die URL übermittelt.

Folgende Zeile
Code:
if($Formularfeld!="Send")
durch folgende ersetzen
Code:
if($Formularfeld!="Send" && $Formularfeld!="fontSize")

Wo hast Du das Script eigentlich her? Gelinde gesagt ist es nämlich katastrophal. Nicht nur dass man als Angreifer beliebige Felder selbst einbringen kann, man kann auch an beliebige Empfänger senden. Ein super Spam-Script. Check this out.
 
Zuletzt bearbeitet von einem Moderator:
Hast recht. Der code ist nicht der beste. Hab mich aber auch schon davon getrennt. Hab aber noch ne frage zu meinem neuen code:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Kontaktformular</title>

 </head>
<body>

<div style="text-align: center;">
 <h3 align="left">&nbsp;</h3>

 <div align="center">
   <div align="left">
     <?php
if ($_POST) {
$firma = $_POST['firma'];
$name = $_POST['name'];
$strasse = $_POST['strasse'];
$plz = $_POST['betreff'];
$email = $_POST['email'];
$tel = $_POST['tel'];
$anlass = $_POST['anlass'];
$datum = $_POST['datum'];
$uhrzeit = $_POST['uhrzeit'];
$veranstaltungsort = $_POST['veranstaltungsort'];
$personen = $_POST['personen'];
$buffet = $_POST['buffet'];
$gesetzt = $_POST['gesetzt'];
$fingerfood = $_POST['fingerfood'];
$schaelchenservice = $_POST['schaelchenservice'];
$flying_service = $_POST['flying_service'];
$messe_catering = $_POST['messe_catering'];
$dj_band = $_POST['dj_band'];
$kuenstlerprogramm = $_POST['kuenstlerprogramm'];
$kinderunterhaltung = $_POST['kinderunterhaltung'];
$dekorationen = $_POST['dekorationen'];
$location_suche = $_POST['location_suche'];
$einladungen_drucksachen = $_POST['einladungen_drucksachen'];
$sonstiges = $_POST['sonstiges'];



 # Ihr Name:
 $webmaster = "test";

 # Ihre E-Mail-Adresse:
 $an = "test";



 # Diese Nachricht wird an Ihre E-Mail-Adresse gesendet:
 $text = "Hallo,\n Sie haben eine neue Anfrage:  erhalten:\n\n
 
firma: $firma\n
name: $name\n
strasse: $strasse\n
plz: $betreff\n
email: $email\n
tel: $tel\n
anlass: $anlass\n
datum: $datum\n
uhrzeit: $uhrzeit\n
veranstaltungsort: $veranstaltungsort\n
personen: $personen\n
buffet: $buffet\n
gesetzt: $gesetzt\n
fingerfood: $fingerfood\n
schaelchenservice: $schaelchenservice\n
flying_service: $flying_service\n
messe_catering: $messe_catering\n
dj_band: $dj_band\n
kuenstlerprogramm: $kuenstlerprogramm\n
kinderunterhaltung: $kinderunterhaltung\n
dekorationen: $dekorationen\n
location_suche: $location_suche\n
einladungen_drucksachen: $einladungen_drucksachen\n
sonstiges: $sonstiges\n
Sie können unter dieser $email kontakt auf nehmen.";

 # Eine Kopie der Anfrage an das Postfach des Besuchers:
 $inhalt = "";

 @mail($an, $betreff, $text, "From: " . $email);
 echo "$anrede $nachname, Ihre Nachricht wurde gesendet!";

 if(isset($_POST['kopie'])) {
  @mail($email, "Bestätigung", $inhalt, "From: " . $an);
  echo"<br>Sie erhalten eine Kopie Ihrer Anfrage an Ihr Postfach.";
 }
}
else { ?>
     
  <script type="text/javascript">
function eingaben_ueberpruefen(){
 var mail = document.Formular.email.value;
 if (document.Formular.name.value.length < 1) {
  alert("Sie haben noch keinen Vornamen eingegeben!")
  document.Formular.name.focus();
  return false;
 }

 else if (document.Formular.strasse.value.length < 1) {
  alert("Bitte geben Sie Ihren Nachnamen ein");
  document.Formular.strasse.focus();
  return false;
 }
 
 else if (document.Formular.plz.value.length < 1) {
  alert("Bitte geben Sie Ihren Nachnamen ein");
  document.Formular.plz.focus();
  return false;
 }

 else if (mail.length < 3 || mail.indexOf ('@',0) == -1 || mail.indexOf ('.',0) == -1) {
  alert("Bitte geben Sie eine gültige E-Mail-Adresse ein.")
  document.Formular.email.select();
  return false;
 }

 else if (document.Formular.tel.value.length < 5) {
  alert("Bitte geben Sie einen Betreff ein!")
  document.Formular.tel.focus();
  return false;
 }

 else if (document.Formular.anlass.value.length < 1) {
  alert("Bitte geben Sie eine Nachricht ein!")
  document.Formular.anlass.focus();
  return false;
 }

else if (document.Formular.personen.value.length < 1) {
  alert("Bitte geben Sie eine Nachricht ein!")
  document.Formular.personen.focus();
  return false;
 }
 
 else
 return true;
}
   </script>
     
     <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"
 onSubmit="return eingaben_ueberpruefen();">
     <form name="Formular" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"
 onSubmit="return eingaben_ueberpruefen();"><p align="left">		
 Firma<br>
 <input type='text' name='firma' value='' size='60'></input><br><br>		
 Ansprechpartner<br>
 <input type='text' name='name' value='' size='60'></input><br><br>		
 Strasse<br>
 <input type='text' name='strasse' value='' size='60'></input><br><br>		
 PLZ und Ort<br>
 <input type='text' name='plz' value='' size='5'></input>&nbsp;<input type='text' name='ort' value='' size='41'></input><br><br>		
 Email Adresse<br>
 <input type='text' name='email' value='' size='60'></input><br><br>		
 Telefon<br>
 <input type='text' name='tel' value='' size='60'></input><br><br><br>		
 Anlass der Veranstaltung<br>
 <input type='text' name='anlass' value='' size='60'></input><br><br>		
 Datum des Events<br>
 <input type='text' name='datum' value='' size='60'></input><br><br>		
 Beginn des Events<br>
 <input type='text' name='uhrzeit' value='' size='60'></input><br><br>		
 Veranstaltungsort<br>
 <input type='text' name='veranstaltungsort' value='' size='60'></input><br><br>		
 Anzahl der Gäste<br>
 <input type='text' name='personen' value='' size='5'></input><br><br><br>		
 Gewünschte Leistungen<br>
 <input type='checkbox' name='buffet' value="ja"></input> 
 Buffet<br>
 <input type='checkbox' name='gesetzt' value="ja"></input> 
 Gesetztes Essen<br>
 <input type='checkbox' name='stehempfang' value="ja"></input> 
 Stehempfang<br>
 <input type='checkbox' name='fingerfood' value="ja"></input>
 Fingerfood<br><br>
 <input type='checkbox' name='schaelchenservice' value="ja"></input> 
 Schälchenservice<br>
 <input type='checkbox' name='flying_service' value="ja"></input> 
 Flying Service<br>
 <input type='checkbox' name='messe_catering' value="ja"></input> 
 Messe-Catering<br><br>
 <input type='checkbox' name='cocktailbar' value="ja"></input> 
 Cocktailbar<br>
 <input type='checkbox' name='espressobar' value="ja"></input> 
 Espressobar<br><br>
 <input type='checkbox' name='dj_band' value="ja"></input> 
 DJ / Band<br>
 <input type='checkbox' name='kuenstlerprogramm' value="ja"></input> 
 Künstlerprogramm<br>
 <input type='checkbox' name='kinderunterhaltung' value="ja"></input> 
 Kinderunterhaltung<br>
 <input type='checkbox' name='dekorationen' value="ja"></input> 
 Dekorationen<br>
 <input type='checkbox' name='location_suche' value="ja"></input> 
 Location-Suche<br>
 <input type='checkbox' name='einladungen_drucksachen' value="ja"></input> 
 Einladungen / Menükartengestaltung<br><br>		
 Sonstige Informationen oder Wünsche<br><textarea name='sonstiges' cols='30' rows='5'></textarea><br><br> <input type="submit" value="Senden" /></input></p></form>
   <div align="left"><br />
     <br />
     <br />
     <br />
     
     <?php 
}
?>
     </div>
</div>

</body>
</html>

Wie bekomm ich es hin das nur aktivierte checkboxen in der e-mail erscheinen?
 
Zuletzt bearbeitet von einem Moderator:
Code:
if (isset ($_POST['gesetzt']))
    $gesetzt = 'ja';

Davon abgesehen kann über Dein Formular ziemlich leicht Spam verschickt werden...
 
macbooklover gewöhn dir mal an die Code-Tags zu benutzen.
 
Oder nimm für längeren Code gleich einen Paste-Dienst wie LodgeIt oder Pastie.
 
Zuletzt bearbeitet von einem Moderator:
Jau, da bist du Opfer eines Mailbots geworden. Passiert oft, ist ärgerlich, kann man aber was gegen tun.

Der Link von dms scheint ganz gut, habs aber nur überflogen.

Kurzgesagt passiert in...

PHP:
mail($email, "Bestätigung", $inhalt, "From: " . $an);

... folgendes:

Der Befehl mail setzt aus den verschiedenen Parametern eine Email zusammen. Dabei wird die Empfängeradresse verarbeitet, der Inhalt eingefügt und auch die restlichen header gesetzt; in deinem Beispiel nur der From header.

Im Email-Quelltext gibt es eigentlich nur zwei Teile: Header und Body. Diese werden intern durch eine Leerzeile getrennt.

Der "Spam-Bot" geht jetzt hin und hängt an die Absender-Adresse seine eigene Email!!! (als Quelltext)

Da seine Angaben noch im Header-Teil landen, werden diese von manchen Mailservern auch verarbeitet. Sprich er kann sehr bequem Mails über dein Formular versenden.

GEFÄHRLICH!!

Es gibt zwei Maßnahmen, die du unternehmen solltest. Eine ist PFLICHT, die andere Kür:

1) Du musst verhindern dass andere Leute Emails über dein Formular bekommen. Das machst du am einfachsten, indem du die From-Angabe steichst und gegen eine deiner Email-Adressen FEST austauschst (also keine Variable, die von außen kommt!) und die Absender-Adresse in den Email-Text mit einpflegst.

Oder du checkst die Absender-Adresse sehr gründlich. Bitte das nur, wenn du wirklich weißt wie das geht. Kann sonst ärgerlich werden. Erstere Variante ist professioneller aus deiner Sicht.

Das ist die Pflicht!

2) Mit Variante 1) verhinderst du zwar, dass andere Mails bekommen, jedoch wirst du selbst dann ne ganze Menge "Müll" im Postfach haben.

Willst du das verhindern brauchst du ein Captcha (http://de.wikipedia.org/wiki/Captcha). Eine einfachere, aber zweckmäßige Variante ist es, die zeit zu messen zwischen Auslieferung des Formulars und des Abschickens. Dauert dies nicht mindests 10s, ist es ein Bot und die Nachricht wird ignoriert oder gesondert behandelt.

Nun denn, in jedem Fall wünsch ich dir viel Spaß und vergiss den Link von dms nicht!

ciao,

Thomas

<streich>PS: Das mit dem "Browser-System" überlegst du dir dann aber nochmal, ja? ;-)</streich>

edit: gestrichenes gehört gestrichen, falscher Thread......
 
Zurück
Oben Unten