• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Formular-Check

rapid10

Mitglied
Ich wollte einmal fragen, ob dieses Formular in Ordnung ist, oder unsicher ist. Habt ihr Tipps zur Verbesserung, damit es sicher wird, oder einfach besser wird?
PHP:
<?php
                $subject = isset($_POST["subject"]) ? $_POST["subject"] : "";
                $prename = isset($_POST["prename"]) ? $_POST["prename"] : "";
                $surname = isset($_POST["surname"]) ? $_POST["surname"] : "";
                $email = isset($_POST["email"]) ? $_POST["email"] : "";
                $website = isset($_POST["website"]) ? $_POST["website"] : "";
                $company = isset($_POST["company"]) ? $_POST["company"] : "";
                $address = isset ($_POST["address"]) ? $_POST["address"] : "";
                $postcode = isset($_POST["postcode"]) ? $_POST["postcode"] : "";
                $location = isset($_POST["location"]) ? $_POST["location"] : "";
                $country = isset($_POST["country"]) ? $_POST["country"] : "";
                $message = isset($_POST["message"]) ? $_POST["message"] : "";
                $error = "";
                
                $to = "[email protected]";
                $subject_email = "[Anfrage] ".$subject;
                $text = "<p><strong>Name:</strong> ".$_POST["prename"]." ".$_POST["surname"]."</p><p><strong>Webseite:</strong> ".$_POST["website"]."</p><p><strong>Firma:</strong> ".$_POST["company"]."</p><p><strong>Anschrift:</strong> ".$_POST["address"].", ".$_POST["postcode"]." ".$_POST["location"]."</p><p><strong>Land:</strong> ".$_POST["country"]."</p><p><strong>Nachricht:</strong></p>".nl2br($_POST["message"]);
                $header  = "MIME-Version: 1.0"."\r\n";
                $header .= "Content-type: text/html; charset=iso-8859-1"."\r\n";
                $header .= "From:".$prename." ".$surname."<".$email.">"."\r\n";
                
                $formular = <<<form
            <form action="contact.php" method="post">
                <p>
                    <label for="subject"><em>Betreff:</em></label>
                    <input type="text" name="subject" id="subject" value="$subject" tabindex="6" />
                </p>
                <p>
                    <label for="prename">Vorname:</label>
                    <input type="text" name="prename" id="prename" value="$prename" tabindex="7" />
                </p>
                <p>
                    <label for="surname">Nachname:</label>
                    <input type="text" name="surname" id="surname" value="$surname" tabindex="8" />
                </p>
                <p>
                    <label for="email"><em>E-Mail Adresse:</em></label>
                    <input type="text" name="email" id="email" value="$email" tabindex="9" />
                </p>
                <p>
                    <label for="website">Webseite:</label>
                    <input type="text" name="website" id="website" value="$website" tabindex="10" />
                </p>
                <p>
                    <label for="company">Firma:</label>
                    <input type="text" name="company" id="company" value="$company" tabindex="11" />
                </p>
                <p>
                    <label for="address">Anschrift:</label>
                    <input type="text" name="address" id="address" value="$address" tabindex="12" />
                </p>
                <p>
                    <label for="postcode">Postleitzahl:</label>
                    <input type="text" name="postcode" id="postcode" value="$postcode" tabindex="13" />
                </p>
                <p>
                    <label for="location">Ort:</label>
                    <input type="text" name="location" id="location" value="$location" tabindex="14" />
                </p>
                <p>
                    <label for="country">Land:</label>
                    <input type="text" name="country" id="country" value="$country" tabindex="15" />
                </p>
                <p>
                    <label for="message"><em>Ihre Nachricht:</em></label>
                    <textarea name="message" id="message" cols="62" rows="11" tabindex="16">$message</textarea>
                </p>
                <p class="post-reset">                
                    <input name="post" type="submit" id="post" tabindex="17" value="Absenden" />
                    <input name="reset" type="reset" id="reset" tabindex="18" value="Zur&uuml;cksetzen" />
                </p>
            </form>
            <p>
                <em>Hinweis:</em> Felder, welche <em>fett</em> dargestellt werden, sind Pflichtfelder und m&uuml;ssen ausgef&uuml;llt werden.
            </p>\r\n
form;

                if (isset($_POST["message"])) {
                    if (strlen($subject) <  1) {
                        $error .= "\t\t\t\t&bull; Betreff<br />\r\n";
                    }
                    if (!preg_match("|^[_a-za-z0-9-]+(.[_a-za-z0-9-]+)*@([a-z0-9-]{3,})+.([a-za-z]{2,4})$|i", $email)) {
                        $error .= "\t\t\t\t&bull; E-Mail Adresse<br />\r\n";
                    }            
                    if (strlen($message) <  1) {
                        $error .= "\t\t\t\t&bull; Ihre Nachricht\r\n";
                    }
                    if ($error == "") {
                        mail($to, $subject_email, $text, $header);
                        echo "<p>\r\n\t\t\t\tIhre Nachricht wurde an uns &uuml;bermittelt. Vielen Dank!\r\n\t\t\t</p>\r\n";
                    }
                    else {
                        echo "<p>\r\n\t\t\t\tNutzen Sie das Kontaktformular um mit uns zu kommunizieren.\r\n\t\t\t</p>\r\n\t\t\t<p class=\"error\">\r\n\t\t\t\t<strong>Bitte &uuml;berpr&uuml;fen Sie folgende Felder:</strong>\r\n";
                        echo $error."\t\t\t</p>\r\n".$formular;
                    }
                }
                else { 
                    echo "<p>\r\n\t\t\t\tNutzen Sie das Kontaktformular um mit uns zu kommunizieren.\r\n\t\t\t</p>\r\n";
                    echo $formular;
                }
?>
Danke für eure Ratschläge!
 
Ja, ich weiß, aber ich wollte es nicht in PHP hineingeben. Showcase heißt übersetzt "etwas präsentieren", was ja eigentlich nicht nur Bilder und Grafiken sein können.

Zum Thema: Danke fürs anschauen. Ich werde auf jedenfalls noch maxlength in die input-Felder einbauen, sonst bekomme ich, was weiß ich für E-Mails. ;)

Sonst gibt es nicht zu bemängeln oder zum verbessern?
 
bei einem mailformular ist es dringend notwendig sowohl subject als auch absender auf umbrüche zu testen.

so in der art:
PHP:
if(stristr($subject,"\r") or (stristr($subject,"\n"))) $error = $lng['formmail']['error']['subject_not_ok'];

umbrüche an der stelle könnten für spam missbraucht werden.
 
php.net empfiehlt für sowas allerdings str(i)pos statt str(i)str zu verwenden, weil "schneller und weniger speicherintensiv" ;)
 
php.net empfiehlt für sowas allerdings str(i)pos statt str(i)str zu verwenden, weil "schneller und weniger speicherintensiv" ;)
stimmt, aber mit $before_needle könnte man nun die mailadresse bereinigen.

@rapid10
wie gesagt, absender und betreff von LF und CR bereinigen oder zumindest prüfen. wenn eines der beiden zeichen enthalten ist, ist höchster spam verdacht.
 
Danke, aber ich habe keine Ahnung, wo genau ich das jetzt einzufügen habe. Einfach in eine neue Zeile?
Vielen Dank für eure Tipps!
 
dort, wo du auf fehler prüfst b.z.w vor dem absenden des formulars.
du musst es noch abfangen können, also würde ich das vor
PHP:
if ($error == "") {
einfügen und bei einem fehler $error belegen, z.b. mit
PHP:
$error = 'Abbruch wegen Spamverdacht.....';
 
Danke für den Tipp! Werde ich machen. Und wie kann ich das testen, ob das funktioniert? Was muss ich eingeben, um zu versuchen "Spam zu versenden"?
 
Zurück
Oben