PHP-Formmail - kleines Problem
hubertus
- php
0 Peter Pan0 hubertus
0 Vinzenz Mai0 hubertus
Hallo!
Bitte wer kann mir bei meinem Formular-Problem helfen?
Ü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.
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.
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
$strEmpfaenger = 'xxxxxxxxxxxxxxx.xxxxxxxx';
$strFrom = '"Formmailer" <xxxxxxxxxxxxxxxxxxx>';
#$strSubject = 'Online-Formular';
$strSubject = $_POST["Betreff"];
$strReturnhtml = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';
$strDelimiter = ":\t";
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;
}
?>
Hi!
- Ü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)
- 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
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
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
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
Einstweilen vielen Dank für eure Antworten!
Werde am Abend einiges probieren.
Danke.
Gruss
hubertus