Ankündigung

Einklappen
Keine Ankündigung bisher.

Kontaktformular - Daten vor dem Absenden überprüfen

Einklappen

Neue Werbung 2019

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

  • tayke
    hat ein Thema erstellt Kontaktformular - Daten vor dem Absenden überprüfen.

    Kontaktformular - Daten vor dem Absenden überprüfen

    Hallo,

    ich will mir ein Kontaktformular bauen, bei dem man die eingegeben Daten vor dem Abschicken überprüfen soll. Weiß zufällig jemand ob Spam-Bots zweimal klicken werden?

    Ich hänge an der Übernahme der Daten. Ausgegeben werden sie, nur die Mail ist leer. Wie bekomme ich die Daten in die Mail? Kann mir da bitte jemand helfen?

    Soweit bin ich gekommen:
    PHP-Code:
    <form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post" >
      Name:

      <input type="text" name="name">

      Betreff:

      <input type="text" name="betreff">

      E-Mail:

      <input type="text" name="email">

      Nachricht:

      <textarea name="nachricht"></textarea>

      <input type="submit" name="vorschau" value="Vorschau">
    </form>

    <?php
    if ( $_POST["vorschau"] == Vorschau ) { ?>

      Sie haben folgendes eingegeben:

      Name: <?php echo $name ?>

      Betreff: <?php echo $betreff ?>

      E-Mail: <?php echo $email ?>

      Nachricht: <?php echo $nachricht ?>

      <form action="<?php print $_SERVER["PHP_SELF"]; ?>" method="post" >
        <input type="submit" name="abschicken" value="Abschicken">
      </form>

    <?php }
    if ( 
    $_POST["abschicken"] == Abschicken ) {
      
    mail("email@domain.de"$betreff$nachricht"From: $name <$email>");
      echo 
    "Die Nachricht wurde verschickt!";
    ?>

  • nikosch
    antwortet
    Genau weiß ichs auch nicht. Aber ein Beispiel (wenn ich den programmieren sollte).
    - HTML Form Seite laden, Inhalt auslesen
    - Form Tags suchen, darin html-Input Tags suchen
    - von diesen das Name-Attribut auslesen
    - action Attribut und method Attribut aus dem Form Tag auslesen

    Diese Daten speichern.
    Jetzt fortan beliebige Daten mit der aus method ermittelten Requestmethode an das in action angegebene Script senden. Als Requestparameter die name Werte aus den input Feldern nutzen.
    In deinem Beispiel braucht 'mein Bot' nur einmal einen Request auf Dein Form-Script absetzen, dann wird ja eine Session gesetzt und die Bedingung ist erfüllt. Ganz ohne menschliche Aktion.

    Nicht umsonst ist das Captcha erfunden worden, der Clou ist ja gerade die menschliche Interaktion.
    Also:
    1. Form Script speichert eine Information in einer Session, zeigt diese aber nirgendwo an. Damit kann sie nicht automatisch verarbeitet werden.
    2. Form Script stellt die Information menschenverständlich auf eine andere Art dar (als Bild, als Umschreibung, als Rechenaufgabe) und fordert auf, die Information einzugeben
    3. Folgescript vergleicht diese Eingabe mit der Information, die das Form Script vorher in der Session hinterlegt hat.

    Einen Kommentar schreiben:


  • tayke
    antwortet
    Kann mir niemand erklären, wie das mit den Sessions gegen Bots klappen soll?
    Wie geht ein Bot vor, wenn er ein Formular gefunden hat? Er sucht nach type="submit" und dann?

    Ich hab das hier mal versucht, eine Session mit der aktuellen Uhrzeit wird gesetzt und nach dem Abschicken des Formulars wird nach der Session gefragt. Wenn ich diese nicht setze wird der else Teil ausgeführt und "Keine Session" ausgegeben.
    Aber wenn type="submit" sich auf derselben Seite befindet, dann geht das doch nicht, oder?

    PHP-Code:
    session_start();

    if (isset(
    $_POST['abschicken'])) {

      if (isset(
    $_SESSION['sess'])) {
        
        
    // Mail abschicken
      
      
    } else {
        echo 
    'Keine Session!'
      }

    }


    $_SESSION['sess'] = date('H:i:s');

    <
    form ... >
      
    // Formular
    </form

    Einen Kommentar schreiben:


  • Igäl
    antwortet
    Man dankt Ich dachte das hiesse Capture Chars Bei Gelegenheit ma darüber nachdenken

    Einen Kommentar schreiben:


  • PsychoEagle
    antwortet
    Zitat von Igäl
    Zitat von nikosch77
    Ein Captcha basiert darauf, dass eine verhunzte Zeichenkette vom Absender des Formulars eingegeben wird.
    Gibts dafür Funktionen oder Libaries oder irgendetwas, damit man sich das nicht selber bauen muss? Das ist schon sowas wie die paar Buchstaben mit Linien und Schnörkeln, die man immer eingeben muss, wenn man sich irgendwo registriert um zu beweisen, dass man es lesen kann, nicht?
    Ja, genau das ist Captcha

    Das ist ein Akronym für Completely Automated Public Turing test to tell Computers and Humans Apart. Wörtlich übersetzt bedeutet das Vollautomatischer öffentlicher Turing-Test, um Computer und Menschen zu unterscheiden (Zitat: Wikipedia).

    Hier gut erklärt ein einfaches Script zum Nachbauen. So in der Art habe ich meins auch und bisher keine Botangriffe oder Einträge gehabt.

    http://www.deruwe.de/captcha.html

    Greez
    Da Psy

    Einen Kommentar schreiben:


  • Igäl
    antwortet
    Zitat von nikosch77
    Ein Captcha basiert darauf, dass eine verhunzte Zeichenkette vom Absender des Formulars eingegeben wird.
    Gibts dafür Funktionen oder Libaries oder irgendetwas, damit man sich das nicht selber bauen muss? Das ist schon sowas wie die paar Buchstaben mit Linien und Schnörkeln, die man immer eingeben muss, wenn man sich irgendwo registriert um zu beweisen, dass man es lesen kann, nicht?

    Einen Kommentar schreiben:


  • DER_Brain
    antwortet
    Nebenbei ist das hier zu empfehlen:
    phpmailer.sourceforge.net

    damit kommen die E-Mails auch wirklich an ^^
    hatte z.B. das PRoblem, dass bei meinem Hoster die mail() funktion gesperrt war...




    lg
    Andi


    EDIT: Sry, hab die zweite seite ned gesehen.. passt aber trotzdem - irgendwie - noch rein.

    Einen Kommentar schreiben:


  • tayke
    antwortet
    Ok, wäre es dann möglich auf einer Seite eine Session zu starten und wenn das Fomular abgeschickt wurde, wird die Session überprüft und erst, wenn diese gestartet wurde, wird das Formular abgeschickt? Also alles auf einer Seite oben?
    Ist das sicher gegen Bots?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Im Gegensatz zu POST und GET Parametern können Session-Daten nicht einfach von Clientseite aus an das verarbeitende Script gesendet werden. Das bedeutet: Das Script, das das Formular erstellt kann bestimmte Daten serverseitig speichern, ohne dass diese in irgendeiner Art über den Client laufen. Anhand einer Session-ID kann der Server sie in einem der Folgescripte wieder laden. Somit ist relativ sichergestellt, dass die entspr. Daten vom Server selbst erstellt wurden.

    Ein Captcha basiert darauf, dass eine verhunzte Zeichenkette vom Absender des Formulars eingegeben wird. Auf der Folgeseite muß der Server diese Eingabe mit irgendetwas vergleichen. Da es sinnfrei ist, diese Vergleichsdaten (quasi die geheime Antwort) irgendwo im Formular mitzuschicken, werden Sie stattdessen in der Session gespeichert.

    Einen Kommentar schreiben:


  • tayke
    antwortet
    hm, ja... eigentlich wollte ich da die Session setzen, aber gut, sie ist leer.
    Dann legen wir mal einen Wert da rein.

    Was mir aber gerade auffällt, warum bennötige ich dann überhaupt Sessions?
    Könnte ja dann auch eine Variable belegen und diese dann überprüfen, oder?

    Also irgendwas mach ich da falsch. Kannst du mir das bitte mal näher erläutern?

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    $_SESSION['sess'];

    Wofür soll das denn gut sein?

    Einen Kommentar schreiben:


  • tayke
    antwortet
    Ok, natürlich sollte session start oben stehen.

    PHP-Code:
    <?php
    session_start
    ();
    $_SESSION['sess'];
    ?>

    <?php
    if (isset($_SESSION['sess']) && isset($_POST['abschicken'])) {
        
    // Mail abschicken.
    } else {
        
    // Fehler
    ?>

    <form ... >
      // Formular
    </form>

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Jetzt überleg nochmal ob die Reihenfolge so Sinn macht? session_start()

    Einen Kommentar schreiben:


  • tayke
    antwortet
    Zitat von dr.e.
    Hier würde ich mit Sessions arbeiten, sprich beim Anzeigen des Formulars eine Session eröffnen und beim Abschicken fragen, ob diese da ist und entsprechende Sicherheits-Codes enthält.
    Geht das mit der Session auch auf einer Seite?

    Also vielleicht so?
    PHP-Code:
    <?php
    if (isset($_SESSION['sess']) && isset($_POST['abschicken'])) {
        
    // Mail abschicken.
    } else {
        
    // Fehler
    ?>

    <?php
    session_start
    ();
    $_SESSION['sess'];
    ?>

    <form ... >
      // Formular
    </form>

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Das ist schon ein kleines Stück Arbeit. Vielleicht kannst Du mit dem 'Affenformular' anfangen (mit register_globals off und Basisvalidierung), Dich in das Thema Sessions einlesen (wohl unverzichtbar für die Captcha Funktionalität) und Dich dann den Sicherheitproblematiken widmen. Bei letzteren macht es bereits viel aus, das Prinzip zu verstehen, Gegenmaßnahmen sind oftmals gar nicht so kompliziert umzusetzen.
    Auch das PHP Manual bietet unter dem Kapitel Sicherheit bereits einen kleinen Einstieg in die Problematik.

    Buch zum Einstieg: Kunz/Prochaska - PHP Sicherheit (Probekapitel)
    einige Infos zu Email Injection
    einige Infos zu XSS
    Zu den genannten Angriffsarten läßt sich via Google jede Menge Material finden, auch Tutorials. Nicht zuletzt die Boardsuche hier.

    Einen Kommentar schreiben:

Lädt...
X