Wie kann ich dieses Script sicher machen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie kann ich dieses Script sicher machen

    Hallo,

    das Kontaktformular meiner Homepage, welches in die Datei "kontakt.php" includiert wird, wurde als Spam missbraucht.
    Wie kann ich dieses Scirpt davor schützen bzw. sicher machen?

    PHP-Code:
    <?php
    if(isset($_POST['senden']))
    {
    if(empty(
    $_POST['vorname']))
    {
    $fehler_vorname "<font color=\"#ff0000\">Bitte geben Sie Ihren Vornamen ein!</font><br>";
    $fehler=1;
    }
    if(empty(
    $_POST['nachname']))
    {
    $fehler_nachname "<font color=\"#ff0000\">Bitte geben Sie Ihren Nachnamen ein!</font><br>";
    $fehler=1;
    }
    if(empty(
    $_POST['mail']) || !ereg("^([a-zA-Z0-9-])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$"$_POST['mail']))
    {
        if(empty(
    $_POST['mail'])) {
            
    $fehler_mail "<font color=\"#ff0000\">Bitte geben Sie Ihre E-Mail-Adresse an!</font><br>";
        }
        else if (!
    ereg("^.+@.+\\..+$"$_POST['mail'])) {
        
    $fehler_mail "<font color=\"#ff0000\">Bitte geben Sie eine g&uuml;ltige E-Mail-Adresse an!</font><br>";
        }
    $fehler=1;
    }

    if(empty(
    $_POST['betreff']))
    {
    $fehler_betreff "<font color=\"#ff0000\">Bitte geben Sie einen Betreff ein!</font><br>";
    $fehler=1;
    }
    if(empty(
    $_POST['Textfeld']))
    {
    $fehler_text "<font color=\"#ff0000\">Bitte geben Sie einen Text!</font><br>";
    $fehler=1;
    }
    }

    if(isset(
    $_POST['senden']) && !isset($fehler))
    {

    $email_to "admin@xyz.de";
    $header="From:".$_POST['vorname'] . " "$_POST['nachname'] . "<"$_POST['mail'] .">\n";
    mail($email_to$_POST['betreff'],$_POST['Textfeld'], $header) or die ("Konnte eMail nicht versenden!");

    echo 
    "<p class=\"kontaktue\">Vielen Dank "$_POST['vorname'] . "&nbsp;"$_POST['nachname'] .",<br><br>";
    echo 
    "Ihre Email mit dem Betreff \""$_POST['betreff'] ."\" wurde erfolgreich versendet.</p>";
    echo 
    "<script language=\"Javascript\">window.setTimeout('self.location.replace(\"kontakt.php\")','6000')</script>";
    }
    else
    {
    ?>
    <form action="<?php echo $PHP_SELF?>" method="POST">
    <link rel="stylesheet" type="text/css" href="style_gb.css">
    <p class="kontaktue">Falls Sie Anregungen bzw. W&uuml;nsche haben, dann k&ouml;nnen Sie sich &uuml;ber unser 
    Kontaktformular mit uns in Verbindung setzen.</p>
    <table width="400">
    <tr><td colspan="2"><br><?=$fehler_vorname ?></td></tr>
    <td width="100" align="right" valign="middle"><strong>Vorname: </strong></td>
    <td width="300" align="left"> <input style="background-color:#D9E2E7" name="vorname" type="text" size="40" maxlength="50" 
    <?php if(isset($_POST['vorname'])) { echo "value =\"".$_POST['vorname']."\""; } ?>></td>
    </tr>
    <tr><td colspan="2"><br><?=$fehler_nachname ?></td></tr>
    <td width="100" align="right" valign="middle"><strong>Name: </strong></td>
    <td width="300" align="left"> <input style="background-color:#D9E2E7" name="nachname" type="text" size="40" maxlength="50" 
    <?php if(isset($_POST['nachname'])) { echo "value =\"".$_POST['nachname']."\""; } ?>></td>
    </tr>
    <tr><td colspan="2"><br><?=$fehler_mail ?></td></tr>
    <tr>
    <td width="100" align="right" valign="middle"><strong>E-Mail: </strong></td>
    <td width="300" align="left"> <input style="background-color:#D9E2E7" name="mail" type="text" size="40" maxlength="50"
    <?php if(isset($_POST['mail'])) { echo "value =\"".$_POST['mail']."\""; } ?>></td>
    </tr>
    <tr><td colspan="2"><br><?=$fehler_betreff ?></td></tr>
    <tr>
    <td width="100" align="right" valign="middle"><strong>Betreff: </strong></td>
    <td width="300" align="left"> <input style="background-color:#D9E2E7" name="betreff" type="text" size="40" maxlength="50" 
    <?php if(isset($_POST['betreff'])) { echo "value =\"".$_POST['betreff']."\""; } ?>></td>
    </tr>
    <tr><td height="20" colspan="2">&nbsp;</td></tr>
    <tr><td colspan="2"><br>Ihre Nachricht: </td></tr>
    <tr><td colspan="2"><?=$fehler_text ?><br><textarea style="background-color:#D9E2E7" name="Textfeld" 
    cols="47" rows="9" type="text"><?php if(isset($_POST['Textfeld'])) { echo $_POST['Textfeld']; } ?></textarea></td></tr>
    <tr><td colspan="2"><br></td></tr>
    <tr>
    <td width="400" colspan="2" align="center"><input type="submit" value="Absenden" name="senden"> 
    <input type="reset" value="Zurücksetzen"></td>
    </tr>
    </table>
    </form>
    <?php
    }
    ?>
    Zuletzt geändert von vindiesel; 04.03.2006, 19:56.

  • #2
    bitte code umbrechen!

    http://de.wikipedia.org/wiki/Captcha
    http://www.google.de/search?hl=de&q=php+captcha&meta=

    Kommentar


    • #3
      du kannst auch sicherstellen das eine session nur einmal (bzw. x mal) das forumular absenden kann.
      ist nicht 100% sicher, aber in den meisten fällen reicht das schon.

      -> http://at.php.net/manual/de/ref.session.php

      Kommentar


      • #4
        Hm, die bisherigen Antworten werden dir nicht helfen!
        Ich muß dein Formular nur einmal absenden, um irgendeinen (Spam-)Text an beliebig viele Empfänger zu senden. Mach dich mal über Mail Injection schlau! Google hilft.

        Grob zusammengefaßt: Keine Headerdaten vom User! Kein Subject, kein From, gar nichts!

        Kommentar


        • #5
          1. Regex auf das Senderfeld, d.h. man stellt sicher, dass nur eine E-Mailadresse eingetragen wurde (einfach mehrere Sachen prüfen, nur ein @ Zeichen, keine semikolons, maximal 3 oder 4 Punkte)

          Dazu ein Captcha

          Anzahl der Formularabsendungen pro Session begrenzen, sowie eine IP Sperre einfügen (z.B. maximal 100 sendungen pro Stunde, Cronjob räumt alle stunde die tabelle leer und dann kanns wieder losgehen)


          Ich denke mal, wenn man sich etwas Mühe gibt, ist man zu 99% sicher, die Spammer werden sich dann ein leichteres Ziel suchen.


          An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

          Kommentar


          • #6
            Hallo Leute,

            erstmal Danke für eure Anregungen und Tips.
            So wie ich das sehe kommt wohl ne Menge Arbeit auf mich zu...
            Zuletzt geändert von vindiesel; 05.03.2006, 12:20.

            Kommentar


            • #7
              Re: Wie kann ich dieses Script sicher machen

              Bis du dich belesen und alle nötigen Prüfungen eingebaut hast, kannst du dir damit behelfen, alle Benutzereingaben im Body der Mail zu verwursten.
              Imho ist es bei Kontaktformularen unlogisch Betreff und From-Header mit Userdaten zusammenzusetzen. So kann der Empfänger die Mails gar nicht mehr filtern.
              PHP-Code:
              <?php
              if (isset($_POST['senden'])) {
                if (!empty(
              $_POST['text']))
                  
              $txt = empty($_POST['name']) ? 'Unbekannt' $_POST['name'];
                  
              $txt .= empty($_POST['mail']) ? '' ' <'.$_POST['mail'].'>';
                  
              $txt .= " sendet Ihnen folgende Nachricht:\r\n";
                  
              $txt .= $_POST['betreff']."\r\n".$_POST['text'];
                  
              mail('admin@xyz.de''Post von xyz.de'$txt) or die ('Mailfehler');
                  echo 
              'Vielen Dank, Ihre Email  wurde erfolgreich versandt.':
                } else {
                  echo 
              'Bitte geben Sie einen Text ein!';
                }
              }
              ?>
              <form method="POST">
              <input name="name" type="text" size="40"><br />
              <input name="mail" type="text" size="40"><br />
              <input name="betreff" type="text" size="40"><br />
              <textarea name="text" cols="47" rows="9">
                <?php echo isset($_POST['text']) ? $_POST['text'] : '' ?>
              </textarea><br />
              <input type="submit" value="Absenden" name="senden">
              </form>

              Kommentar

              Lädt...
              X