mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 28.03.2024 21:00 Benutzername: Passwort: Auto-Login

Thema: Suche Kontaktformular vom 09.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Suche Kontaktformular
Autor Nachricht
gzs
Threadersteller

Dabei seit: 09.11.2005
Ort: -
Alter: 46
Geschlecht: Männlich
Verfasst Sa 09.06.2007 08:17
Titel

Suche Kontaktformular

Antworten mit Zitat Zum Seitenanfang

Hallo zusammen,

bislang hatte ich auf meiner Website ein php-Kontaktformular im Einsatz, das ich mir mal von einer dieser Skript-Seiten runtergeladen habe. Da zur Zeit immer mehr von Spam-Mißbrauch einfacher Kontaktformulare zu lesen ist und ich kein Risiko eingehen will, bin ich nun auf der Suche nach einer sicheren Variante.

Da ich selbst von php wenig bis keine Ahnung habe, kann ich leider nicht beurteilen welches Skript nun geeignet ist und welches nicht.

Vielleicht hat ja einer von Euch nen Tipp parat (oder ein Skript in der Schublade?)

Danke schonmal.
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Sa 09.06.2007 17:52
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Vielleicht hat ja einer von Euch nen Tipp parat (oder ein Skript in der Schublade?)

Da ich nie auf die Idee kommen würde, mir für sowas ein Script runterzuladen, kann ich dir auch keinen Tipp geben, welches Script denn gut ist.
Für sowas braucht man eigentlich nur ein paar kurze Zeilen PHP-Code.

Und wenn ich mir da was runterladen würde, glaube ich, ist es schneller, den Krams selbst zu schreiben, als die nötigen Anpassungen vorzunehmen...

Zitat:
Da zur Zeit immer mehr von Spam-Mißbrauch einfacher Kontaktformulare zu lesen ist und ich kein Risiko eingehen will, bin ich nun auf der Suche nach einer sicheren Variante.

Bekommst du denn Spam über dieses Formular?
Oder hat sich jemand bei dir gemeldet, daß über dieses Formular Spam verschickt wurde?

Poste doch mal den HTML-Code deines Formulars und den PHP-Code womit die Mails verschickt werden.
Wenn da irgendeine Schwachstelle drin enthalten ist, kann ich dir das sagen und dir schreiben, was du ändern mußt.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
gzs
Threadersteller

Dabei seit: 09.11.2005
Ort: -
Alter: 46
Geschlecht: Männlich
Verfasst Sa 09.06.2007 20:41
Titel

Antworten mit Zitat Zum Seitenanfang

Hi,

Zitat:
Oder hat sich jemand bei dir gemeldet, daß über dieses Formular Spam verschickt wurde?


Ja, mein Provider hat sich gemeldet und mir mitgeteilt, dass mein Kontaktformular zur Spamschleuder geworden ist. Ich selbst habe bislang selten Spam darüber bekommen.

Der Code der Eingabemaske:

Zitat:
<table border="0" cellpadding="1" cellspacing="2">
<form action="kontaktformular-auswerten.php" method="post" >

<tr>
<td style="position:absolute; top:337px; left:350px"></td>
<td style="position:absolute; top:337px; left:450px"><select name="Anrede" size="1"><option>Frau</option>
<option>Herr</option><option>Firma</option></select></td>
</tr>

<tr>
<td style="position:absolute; top:367px; left:350px">Name:</td>
<td style="position:absolute; top:367px; left:450px"><input name="Name" size="20" type="text"></td>
</tr>

<tr>
<td style="position:absolute; top:397px; left:350px">eMail:</td>
<td style="position:absolute; top:397px; left:450px"><input name="Email" size="20" type="text"></td>
</tr>

<tr>
<td style="position:absolute; top:427px; left:350px">Betreff:</td>
<td style="position:absolute; top:427px; left:450px"><select name="Betreff" size="1"><option>Allgemeine Frage</option>
<option>Anfrage Beratung</option><option>Fehlender Begriff im Lexikon</option></select></td>
</tr>

<tr>
<td style="position:absolute; top:457px; left:350px">Nachricht:</td>
<td style="position:absolute; top:457px; left:450px"><textarea cols="44" name="Nachricht" rows="5"></textarea></td>
</tr>

<tr>
<td style="position:absolute; top:577px; left:350px">Wünsche Antwort:</td>
<td style="position:absolute; top:577px; left:480px">Ja <input checked name="Antwort" checked type="radio" value="ja"> Nein <input name="Antwort" type="radio" value="nein"></td>
</tr>

<tr>
<td style="position:absolute; top:607px; left:350px">Bitte um Rückruf:</td>
<td style="position:absolute; top:607px; left:480px">Ja <input name="Anruf" checked type="radio" value="ja"> Nein <input checked name="Anruf" type="radio" value="nein"></td>
<td style="position:absolute; top:607px; left:590px">Falls ja, bitte Telefonnummer angeben!</td>
</tr>

<tr>
<td style="position:absolute; top:657px; left:350px" align="center" colspan="2"><input name="Send" type="submit" value="Abschicken"> <input name="Reset" type="reset" value="Löschen"></td>
</tr>
</form>
</table>


Und der des eigentlichen Skriptes:

Zitat:
<?php

$Empfaenger = "info@feng-shui-direkt.de";





if($_REQUEST['Send'])
{
if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
{
echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
}
else
{
$Mailnachricht = "Sie haben folgende Nachricht erhalten: \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 .= $_REQUEST['Betreff'];
mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
echo "Die Nachricht wurde übermittelt. Vielen Dank für Ihre Anfrage";


}
}
else
{
echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular.php\">Seite</a>.";
}

?>


Wär ja schön, wenn es eine einfach Lösung gäbe. Danke schonmal
  View user's profile Private Nachricht senden
Sarky

Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht: Männlich
Verfasst Sa 09.06.2007 21:41
Titel

Antworten mit Zitat Zum Seitenanfang

http://www.jethwa.de/aktuell,sichere-kontaktformulare,156.html
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst So 10.06.2007 22:21
Titel

Antworten mit Zitat Zum Seitenanfang

Ja, kein Wunder, daß damit Spam verschickt werden kann.

Das kannst du aber recht einfach in den Griff bekommen.
Weder in $Empfaenger, $Mailbetreff oder $_REQUEST['Email'] dürfen Zeilenumbrüche enthalten sein.
Mailheader werden nämlich durch Zeilenumbrüche voneinader getrennt und so wäre es möglich, deinem Script einfach weitere Headerzeilen unterzujubeln.
Damit kann man dann Spammails an beliebige (und beliebig viele) Empfänger verschicken.

Also erstmal verschickst du dein Formular per POST.
Warum erlaubst du dann in deinem Script, daß die Werte auch akzeptiert werden, wenn die per GET ankommen?
Ersetze $_REQUEST durch $_POST.

Und dann mußt du alle Werte, die von außen kommen, immer grundsätzlich als "böse" ansehen und ggf. bereinigen.
Entweder du filterst einfach alle Zeilenumbüche raus oder besser du baust eine zusätzlich If-Abfrage ein und verschickst gar nicht erst eine Mail, wenn dort irgendwo ein Zeilenumbruch enthalten ist.

Außerdem ist das Script an einigen Punkten noch verbesserungswürdig.
Beispielsweise möchtest du sicherlich, daß Umlaute und Sonderzeichen auch immer korrekt ankommen, oder?
Dazu solltest du dann das verwendete Charset per zusätzlicher Headerzeile mit angeben.

Ich hab jetzt gerade wenig Zeit.
Wenn du das alleine nicht hinkriegst, dann verbessere ich dir das morgen abend mal...

BTW: Es gäbe noch eine Methode, um den Spam etwas zu unterbinden.
Man könnte überprüfen, wie lange es von Generierung des Eingabeformulars bis zum Abschicken dauert.
Während menschliche User einige Sekunden zum Ausfüllen des Formulars brauchen, machen Spam-Bots das in weniger als einer Sekunde.
Du könntest einfach alles verwerfen, wenn die Eingaben in weniger als einer Sekunde ankommen...
Das mache ich bei einigen Mailformularen so und es hilft eigentlich ganz gut.
In jedem Fall ist es viel sinnvoller als der Einsatz von Captchas.
Damit schließt man dann nämlich u.a. User von Textbrowsern und Sehbehinderte, die mit Screenreadern surfen, einfach aus.
  View user's profile Private Nachricht senden
Kerstin77

Dabei seit: 12.03.2007
Ort: 52° 2' N, 8° 55' O
Alter: 46
Geschlecht: Weiblich
Verfasst Mo 11.06.2007 00:26
Titel

Antworten mit Zitat Zum Seitenanfang

Hallo rob,

habe ebenfalls Probleme mit Spam durch ein von mir genutztes Kontaktformular.

rob hat geschrieben:
Das kannst du aber recht einfach in den Griff bekommen.
Weder in $Empfaenger, $Mailbetreff oder $_REQUEST['Email'] dürfen Zeilenumbrüche enthalten sein.
Mailheader werden nämlich durch Zeilenumbrüche voneinader getrennt und so wäre es möglich, deinem Script einfach weitere Headerzeilen unterzujubeln.
Damit kann man dann Spammails an beliebige (und beliebig viele) Empfänger verschicken.


Danke für diesen Hinweis, habe mal versucht, das einzubauen. Doch bevor ich das Script jetzt wieder online stelle, würdest Du nochmal drüberschauen, ob damit noch Spam verschickt werden kann?

Vielen Dank im voraus!

Kerstin

Hier noch das Script:

Code:
<?php

  if ($op == "check") { // Formular wurde gesendet. Eingaben werden getestet
     $check_err = false;
     foreach($HTTP_POST_VARS as $p_name=> $p_value) {
       $message.= "$p_name:$p_value\n";
       if ($p_name == "Name") {
          if ($p_value <= " ") {
             $msg_name ="<div class=\"ff\">Fehler: bitte geben Sie Ihren Namen an!</div>";
             $check_err = true;
          }
       }
       if ($p_name == "email") {
          if (preg_match("/\r\n/", $p_value)) {
       $msg_email ="<div class=\"ff\">Fehler: kein Zeilenumbruch erlaubt!</div>";
       $check_err = true;
       }
          if ($p_value <= " ") {
             $msg_email ="<div class=\"ff\">Fehler: bitte geben Sie Ihre eMail-Adresse an!</div>";
             $check_err = true;
          }
          if ($p_value > " ") {
             $result = ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $email );
             if (!$result){
                $msg_email ="<div class=\"ff\">Fehler: keine gültige eMail-Adresse!</div>";
                $check_err = true;
             }
          }
       }
       if ($p_name == "Nachricht") {
          if ($p_value <= " ") {
             $msg_nachricht ="<div class=\"ff\">Fehler: bitte hinterlassen Sie auch eine Nachricht!</div>";
             $check_err = true;
          }
       }
       if ($p_name="Anrede") {
          if ($p_value == "Frau") $checked_f = "checked";
          if ($p_value == "Herr") $checked_h = "checked";
       }
     }
     if (!$check_err) {
         // Formular ist getestet und alles ist ok!
          $message= 'Nachricht an das Akkordeonorchester Leopoldshöhe von '.$email."\n\n\n";
          foreach($HTTP_POST_VARS as $name=> $value) {
             $message.= "$name:\n$value\n\n";
          }
          $txt = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "",$message);
         $absender = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "",$_POST['email'] );
         $absender = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "",$absender );
          mail("k.heinzel@gmx.de", "Formularanfrage www.akk-leo.de", $txt, "From: $absender");
          mail($absender, "Vielen Dank für Ihre Formularanfrage auf www.akk-leo.de", $txt, "From: k.heinzel@gmx.de");

          echo "
             <div class=\"formdanke\">
             <br>
             <div class=\"t2 g\">Formular verschickt!</div>
         <p>Vielen Dank f&uuml;r Ihre Nachricht, wir werden uns melden.</p>
             <br>
             </div>
          ";
     }
  }


  $formular ="
  <form method=\"post\" action=\"kontakt.php?op=check\">
  <table class=\"form\">
     <tr>
       <td class=\"formtext\">Anrede:</td>
       <td>
          <input type=\"radio\" id=\"anrede1\" name=\"Anrede\" value=\"Frau\" $checked_f><label for=\"anrede1\"> Frau</label>
          <input type=\"radio\" id=\"anrede2\" name=\"Anrede\" value=\"Herr\" $checked_h><label for=\"anrede2\"> Herr</label>
       </td>
     </tr>
     <tr>
        <td class=\"formtext\">Name: *</td>
        <td><input type=\"text\" name=\"Name\" value=\"$name\">$msg_name</td>
     </tr>
     <tr>
        <td class=\"formtext\">eMail: *</td>
        <td><input type=\"text\" name=\"email\" value=\"$email\">$msg_email</td>
     </tr>
     <tr>
        <td class=\"formtext\">Betreff:</td>
        <td><input type=\"text\" name=\"Betreff\" value=\"$betreff\"></td>
     <tr>
        <td class=\"formtext\">Nachricht: *</td>
        <td><textarea name=\"Nachricht\" rows=\"10\" cols=\"50\">$nachricht</textarea>$msg_nachricht</td>
     </tr>
     <tr>
        <td colspan=\"2\">* Pflichtfelder</td>
     </tr>
     <tr>
        <td colspan=\"2\">
        <div class=\"center\">
           <input type=\"submit\" name=\"Submit\" value=\"Abschicken\">
           <input type=\"button\" name=\"Reset\" value=\"Eingaben löschen\" onClick=\"self.location.href='kontakt.php'\">
        </div>
        </td>
     </tr>
  </table>
  </form>
  ";
  if ($op <> "check" ) {
     echo $formular;
  }
  if ($op == "check") {
     if ($check_err) echo $formular;
  }
?>
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mo 11.06.2007 01:27
Titel

Antworten mit Zitat Zum Seitenanfang

Da sehe ich gleich einiges, was ich ändern würde.
Das das Script in dieser Form so überhaupt läuft, ist eigentlich auch nur Glück.
Du verwendest einiges an alter Syntax, was nur noch deswegen funktioniert, weil dein Hoster sein PHP aus Gründen der Rückwärstkompatibilität entsprechend eingestellt hat.
Spätestens mit nächster PHP-Version ist allerdings Schluß damit.

Dann kommen die POSIX-kompatiblen regulären Ausdrücke zum Einsatz, wo ich in jedem Fall die PCRE-RegEx verwenden würde, weil die um einiges schneller sind.
Außerdem ist der RegEx zum Prüfen der Emailadresse auf syntaktische Korrektheit nicht besonders gut.
Der prüft nur ganz wenige Dinge...

Da es jetzt allerdings schon halb drei ist, gehe ich jetzt ins Bett. Muß morgen früh aufstehen...
Wenn bis morgen abend noch keiner was dazu geschrieben hat, dann sag ich dir, was du ändern solltest.
  View user's profile Private Nachricht senden
 
Ähnliche Themen PHP Kontaktformular
Kontaktformular
Kontaktformular
Kontaktformular
PHP-Kontaktformular
Kontaktformular
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.