hubertus: PHP-Formmail - kleines Problem

Hallo!

Bitte wer kann mir bei meinem Formular-Problem helfen?

  1. Über Formularfelder meiner HTML-Seite übergebe ich per
    "Submit" folgende Variablen an ein PHP-Script:
    Nachnahme, Vorname, Land, Plz, Ort, Strasse, Zimmer, Telefon, und E-mail-Adresse.

  2. Ich möchte im nachfolgenden PHP-Script dann, die Variablen: Land, Plz, Ort und Strasse als eine Variable zusammenfassen - als eine Zeile "Adresse:". (Die Variablen sind auf der HTML-Seite absichtlich extra und nicht als Adresszeile zusammengefasst, damit nicht jeder irgendwie die Adresse in ein Textfeld reintippt). Rauskommen soll über PHP aus den einzelnen Variablen dann z.B. Adresse: D-47443 Moers, Talstrasse 11.

  3. Ich möchte im PHP-Script vor den Formulardaten ein paar Textzeilen hinzufügen und Zeilenabstände einfügen.

Bitte wie muss ich das nachstehende Script ändern, ohne dass es (eventuell angreifbar für Spammer wird. Wer kann einem PHP-Einsteiger wie mir, rasch unter die Arme greifen? Also 3-4 Variablen zusammenfügen als Eine und zusätzliche Zeilen in PHP einbauen mit dem vorhandenen Script.

Vielen Dank!

<?php

Konfiguration

Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!

An welche Adresse sollen die Mails gesendet werden?

$strEmpfaenger = 'xxxxxxxxxxxxxxx.xxxxxxxx';

Welche Adresse soll als Absender angegeben werden?

(Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)

$strFrom       = '"Formmailer" <xxxxxxxxxxxxxxxxxxx>';

Welchen Betreff sollen die Mails erhalten?

#$strSubject    = 'Online-Formular';
$strSubject = $_POST["Betreff"];

Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?

Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!

$strReturnhtml = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';

Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?

$strDelimiter  = ":\t";

Ende Konfiguration

if($_POST)
{
 $strMailtext = "";

while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strDelimiter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strDelimiter.$value."\n";
  }
 }

if(get_magic_quotes_gpc())
 {
  $strMailtext = stripslashes($strMailtext);
 }

mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Nachricht konnte nicht uebermittelt werden!");
 header("Location: $strReturnhtml");
 exit;
}

?>

  1. Hi!

    1. Über Formularfelder meiner HTML-Seite übergebe ich per
      "Submit" folgende Variablen an ein PHP-Script:
      Nachnahme

    Du zahlst erst bei Erhalt der Ware?

    D-47443 Moers, Talstrasse

    Jetzt Mal im Ernst: da war doch mal die Post und ein sehr guter Chinesischer Imbiss, oder?
    Aber ich glaube die PLZ ist 47445 (Repelen und Utfort)

    1. Ich möchte im PHP-Script vor den Formulardaten ein paar Textzeilen hinzufügen und Zeilenabstände einfügen.

    Dann gib diese aus - bzw. lass Dein Script das tun!

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Mit PHP kenne ich mich leider (noch) nicht aus.
      Ich habe das freie PHP-Script nur im Web gefunden, kopiert und hochgeladen. Jetzt hänge ich leider etwas! Über eine konkrete, ernstgemeinte Hilfe auf mein Formmail-Problem wäre ich daher dankbar!

      Wer hilft mir mit dem PHP-Script, bitte?

      Danke im voraus
      hubertus

      1. Hi,

        Mit PHP kenne ich mich leider (noch) nicht aus.

        dann nutze das Manual.

        Über eine konkrete, ernstgemeinte Hilfe auf mein Formmail-Problem wäre ich daher dankbar!

        was die Sicherheit betrifft: alles in $strMailtext ist ungefährlich. Du kannst mit diesem String also bedenkenlos experimentieren. Die Schleifen im Script kannst Du freilich nicht nutzen, sondern musst die POST-Daten einzeln abfragen und zusammensetzen.

        freundliche Grüße
        Ingo

  2. Hallo,

    Bitte wie muss ich das nachstehende Script ändern, ohne dass es (eventuell angreifbar für Spammer wird. Wer kann einem PHP-Einsteiger wie mir, rasch unter die Arme greifen? Also 3-4 Variablen zusammenfügen als Eine und zusätzliche Zeilen in PHP einbauen mit dem vorhandenen Script.

    mit dieser Änderung des einfachen Formmailers von Patrick Canterino wirst Du anfällig für Header-Injektion.

    Welchen Betreff sollen die Mails erhalten?

    #$strSubject    = 'Online-Formular';
    $strSubject = $_POST["Betreff"];

    Du solltest alle Zeilenumbrüche aus $strSubject entfernen, bzw. bei Vorhandensein von Zeilenumbrüchen keine Mail verschicken. Siehe dazu folgenden Archivthread, der noch weitere Probleme beim Mailversand anspricht. Noch besser unterbleibt das Kopieren in eine zusätzliche Variable, damit Du gleich siehst, dass dieser Inhalt aus einer potentiell bösen Eingabe kommt.

    # Pseudocode: Validierung der Eingabe im Betreff-Feld
       Wenn $_POST['Betreff'] Zeilenumbruchzeichen (\r oder \n) enthält
           Leite auf eine Fehlerseite weiter
       Ende Wenn

    Merke: Jede Eingabe ist böse!
    Entsprechend benötigst Du grundsätzlich gesehen eine Validierung für Deine Eingabefelder. Bitte schieße dabei aber nicht über das Ziel hinaus (haben wir hier schon oft gesehen). Du darfst Deine Validierung hier gerne vorstellen.

    Ob es sich bei Deinem Formular noch lohnt, alle Felder in einer Schleife zu durchlaufen, ist fraglich - wie bereits Ingo erwähnte.

    Das Entfernen der Magic Quotes, so vorhanden, solltest Du am Skriptbeginn vornehmen. Wie es geht, entnimmst Du dem zweiten Beispiel im PHP-Handbuchabschnitt Disabling Magic Quotes.

    Warum am Anfang? Dann hast Du es an zentraler Stelle und kannst Dein Skript leicht korrigieren, wenn dieses Feature mit PHP6 verschwindet.

    Freundliche Grüße

    Vinzenz

    1. Einstweilen vielen Dank für eure Antworten!
      Werde am Abend einiges probieren.
      Danke.

      Gruss
      hubertus