Formular verschickt E-Mails mit ausschließlich der Zahl 1 als Inhalt

  • Hallo liebe we-Community,

    ich habe ein Problem mit Formularen.
    Die Formulare werden mit we:sendmail verschickt und funktionieren an sich einwandfrei. In letzter Zeit werden aber - immer um ca. 6 Uhr morgens - E-Mails über die Kontaktformulare verschickt, die ausschließlich die Zahl 1 als Inhalt haben (auch bei der E-Mailadresse steht dann mailto:1).
    Ich habe das Formular mit Javascript abgesichert, sodass gecheckt wird, ob eine bzgl. Syntax gültige E-Mailadresse eingetragen wurde. Außerdem habe ich ein Honeypot-Feld implementiert (ich möchte ein captcha-Feld vermeiden, da es nicht barrierefrei ist). Und we:formToken habe ich auch eingefügt.

    Jetzt stellt sich die Frage, warum es überhaupt möglich ist, dass die E-Mails verschickt werden und ankommen, da ja keine gültige E-Mailadresse eingetragen wurde.
    Ist es möglich, dass webEdition selbst die E-Mails abschickt?
    Was könnte ich tun, damit solche E-Mails nicht mehr ankommen?

    Hier der Code des Formulars:

    Und hier der Teil der Vorlage mit sendmail:

    Würde mich freuen, wenn mir jemand einen Tipp hat.

    LG
    Silvia

  • Hallo Silvia,

    ich würde vor dem Versand noch eine zusätzliche PHP-Prüfung der Email reinnehmen, Javascript kann umgangen werden:

    PHP
    <?php
    if (filter_var($destination, FILTER_VALIDATE_EMAIL) !== false) {
    //........
    }
    ?>

    Oder mit === false, falls das besser passt.

    Als Honeypot haben Input-Felder bei mir nicht so gut funktioniert, mit Textareas erziele ich höhere Trefferquoten.

    Einen Zeitstempel kann ich auch empfehlen, z.B. alles unter 10 Sekunden wird dann als SPAM eingestuft.
    <input type="hidden" name="FormTime" value="<?php echo $formTime; ?>">

    Gruß Heiko

  • Hallo Heiko,

    ganz herzlichen Dank für die hilfreichen Tipps. Ich werde die Änderungen in den Formularen vornehmen und beobachten, ob ich das Problem so in den Griff bekomme.
    Vielen Dank für die Unterstützung :thumbup:.

    Gruß Silvia

  • Hallo Silvia,

    du hast ja erwähnt, dass du das Formular per Javascript abgesichert hast. Mir fehlt da innerhalb des we:ifFormToken noch die komplette serverseitige Überprüfung. Das mit der Email-Prüfung hatte ich ja oben schon erwähnt. Ich würde auch den Honeypot und eine Timestamp sowie alle Pflichtfelder hier überprüfen, bevor ich die Mail abschicke. Ich mache auch immer eine Vorprüfung per Javascript aber für mich ist wichtig, dass dann alles per AJAX mit PHP genau überprüft wird.

    Nur meine Meinung, vielleicht hat der ein oder andere noch einen Tipp? Evtl. auch wie man die Überprüfung mehr mit WE-Tags abbilden kann, statt mit PHP?

    Gruß Heiko

  • Hallo Heiko,

    vielen Dank für die weiteren Infos.
    Ich habe jetzt mal versucht, einen Zeitstempel einzufügen. Komme aber irgendwie nicht klar.
    Habe den Eindruck, das meine Umsetzung nicht greift.

    Ich habe im Kontaktformular vor dem <html>-Tag die Session gestartet:

    PHP
    <?php
    session_start();
    $_SESSION['formTime'] = time();
    ?>

    Dann habe ich im Form-Tag <input type="hidden" name="date" value="<?php echo $formTime; ?>" /> hinzugefügt.

    In der sendmail-Vorlage habe ich oben dann die Zeit-Abfrage eingefügt:

    Habe ich da einen Denkfehler? Geht das überhaupt so?
    Wenn die Umsetzung so nicht geht, würde ich mich ünber ein Bespiel oder einen Tipp freuen.

    Und innerhalb von we:ifFormToken habe ich das PHP-Script ergänzt.

    Das Honeypot-Feld habe ich wie vorgeschlagen nun als Textarea eingefügt.
    Die serverseitige Überprüfung fehlt noch. Mich würde auch interessieren, ob man die Überprüfung mit WE-Tags machen kann. Würde mich über ein Beispiel freuen.

    Grüße

    Silvia

  • Hallo Silvia,

    hier Quick & Dirty mit PHP:

    Code
    $honeypot = isset($_POST['emailschutz']) ? $_POST['emailschutz'] : "Spam";
    $formTime = isset($_POST['formTime']) ? intval($_POST['formTime']) : time();
    if ( is_numeric($formTime) ) { $duration = time() - $formTime; }
    else { $duration = 0; }

    $formTimekannst du natürlich auch als Session Variable verwenden.

    <?php if (filter_var($destination, FILTER_VALIDATE_EMAIL) === false) { echo("Kein Versand möglich"); } ?> Das bringt dir nicht viel, da <we:sendMail/> trotzdem ausgeführt wird. Das muss innerhalb der Abfrage.

    Die Überprüfung, wenn das Formular abgeschickt wurde:

    PHP
    <?php if( $duration > 10 AND EMPTY($honeypot) AND filter_var($destination, FILTER_VALIDATE_EMAIL) !== false ) : ?>
    
    <we:sendMail from="xxx@yyy.de" recipient="\$destination" recipientBCC="\$destinationBCC" charset="UTF-8" id="7313" mimetype="text/html" reply="\$emailadresse" subject="Eine Nachricht von der Webseite" />
    <?php endif; ?>


    Evtl. ist es so einfacher für dich, den Block oben reinnehmen:

    PHP
    <we:setVar nameto="validForm" to="global" value="notValid"/>
    <?php 
    $honeypot = isset($_POST['emailschutz']) ? $_POST['emailschutz'] : "Spam";
    $formTime = isset($_POST['formTime']) ? intval($_POST['formTime']) : time();
    if ( is_numeric($formTime) ) { $duration = time() - $formTime; }
    else { $duration = 0; }
    if( $duration > 10 AND EMPTY($honeypot) AND filter_var($destination, FILTER_VALIDATE_EMAIL) !== false ) : ?>
    <we:setVar nameto="validForm" to="global" value="isValid"/>
    <?php endif; ?>


    Und das dann beim Abschicken vom Formular:

    Code
    <we:ifVar name="validForm" match="isValid" type="global" operator="equal">
    <we:sendMail from="xxx@yyy.de" recipient="\$destination" recipientBCC="\$destinationBCC" charset="UTF-8" id="7313" mimetype="text/html" reply="\$emailadresse" subject="Eine Nachricht von der Webseite" />
    <we:else  />
    ... Fehlermeldung ...
    </we:ifVar>

    Das ist sicherlich auch komplett mit WE-Tags möglich, hat hier keiner weitere Tipps?

    Mit <we:ifVar /> sollte das auch ohne PHP möglich sein.


    Gruß

    Heiko

    Edited once, last by e-site (December 10, 2024 at 9:42 AM).

  • Hallo Heiko,

    ganz herzlichen Dank für Deine Mühe und die Hilfe bei der Umsetzung. Schätze ich sehr! :thumbup:
    Ich habe alles so umgesetzt und beobachte jetzt, ob das Problem so behoben werden konnte.

    LG

    Silvia

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!