1. Dashboard
  2. Articles
  3. Forum
  • Login or register
  • Search
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • More Options
  1. webEdition Forum
  2. Forum
  3. Deutschsprachiges Support Forum
  4. webEdition Templates erstellen (we:tags)

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

  • SiBl
  • December 4, 2024 at 8:19 PM
  • SiBl
    Beginner
    Posts
    22
    • December 4, 2024 at 8:19 PM
    • #1

    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:

    CSS
    <we:form id="7311" name="form1" class="o-form c-form" method="post" mimetype="text/html" onSubmit="return checkmail()">
    						<input type="hidden" name="formID" value="<we:DID />" />
    						<input type="hidden" name="we_ui_we_global_form[Anrede]" value="<we:var type="request" name="Anrede" />" />
    						<input type="hidden" name="we_ui_we_global_form[Titel]" value="<we:var type="request" name="Titel" />" />
    						<input type="hidden" name="we_ui_we_global_form[Vorname]" value="<we:var type="request" name="Vorname" />" />
    						<input type="hidden" name="we_ui_we_global_form[Nachname]" value="<we:var type="request" name="Nachname" />" />
    						<input type="hidden" name="we_ui_we_global_form[Nachricht]" value="<we:var type="request" name="Nachricht" />" />
    						<input type="hidden" name="we_ui_we_global_form[Strasse]" value="<we:var type="request" name="Strasse" />" />
    						<input type="hidden" name="we_ui_we_global_form[PLZ]" value="<we:var type="request" name="PLZ" />" />
    						<input type="hidden" name="we_ui_we_global_form[Ort]" value="<we:var type="request" name="Ort" />" />
    						<input type="hidden" name="we_ui_we_global_form[Telefon]" value="<we:var type="request" name="Telefon" />" />
    						<input type="hidden" name="we_ui_we_global_form[email]" value="<we:var type="request" name="email" />" />
    						<input type="hidden" name="we_ui_we_global_form[emailschutz]" value="<we:var type="request" name="emailschutz" />" />
    
    						<fieldset id="drk_orderform-fieldset-1" class="form-group o-form" data-parsley-excluded="[disabled]">
    							<div class="o-form__item">
    								Die mit einem Stern (<span class="rot">*</span>) markierten Felder sind Pflichtfelder.
    							</div> 
    
    							<div class="t-medium-12 columns o-form__item">
    								<select tabindex="1" class="o-form__field o-form__field--select o-form__field o-form__field--select" id="Anrede" name="Anrede">
    									<option value=" " selected="selected"></option>
    									<option value="Herr">Herr</option>
    									<option value="Frau">Frau</option>
    								</select>
    								<label class="o-form__label" for="Anrede">Anrede</label>
    							</div>
    
    							<div class="t-medium-12 columns is-last-in-row o-form__item">
    								<select tabindex="2" class="o-form__field o-form__field--select o-form__field o-form__field--select" id="p_titel" name="Titel">
    
    									<option value="0" selected="selected"></option>
    									<option value="Dr">Dr.</option>
    									<option value="Prof">Prof.</option>
    								</select>
    								<label class="o-form__label" for="p_titel">Titel</label>
    							</div>
    
    							<div class="t-medium-12 columns o-form__item">
    								<input required maxlength="60" tabindex="3" class="o-form__field o-form__field--text" id="vorname" type="text" name="Vorname" title="Bitte Vorname eintragen">
    								<label class="o-form__label" for="vorname">Vorname<em><span class="rot">*</span></em></label>
    							</div>
    
    							<div class="t-medium-12 columns is-last-in-row o-form__item">
    								<input required maxlength="60" tabindex="4" class="o-form__field o-form__field--text" id="nachname" type="text" name="Nachname" title="Bitte Nachname eingeben">
    								<label class="o-form__label" for="nachname">Nachname<em><span class="rot">*</span></em></label>
    							</div>
    
    							<div class="t-medium-24 columns is-last-in-row o-form__item">
    								<input maxlength="60" tabindex="5" class="o-form__field o-form__field--text" type="text" name="Strasse" title="Bitte Stra&szlig;e und Hausnummer eintragen" id="strasse">
    								<label class="o-form__label" for="strasse">Straße / Nr.</label>
    							</div>
    
    							<div class="t-medium-5 columns o-form__item">
    								<input minlength="5" maxlength="5" tabindex="6" pattern="[0-9]+" class="o-form__field o-form__field--text" id="plz" type="text" name="PLZ" title="Bitte Postleitzahl eintragen">
    								<label class="o-form__label" for="plz">PLZ</label>
    							</div>
    
    							<div class="t-medium-19 columns is-last-in-row o-form__item">
    								<input maxlength="60" tabindex="7" class="o-form__field o-form__field--text" id="ort" type="text" name="Ort" title="Bitte Ort eintragen">
    								<label class="o-form__label" for="ort">Ort</label>
    							</div>
    
    							<div class="t-medium-24 columns is-last-in-row o-form__item">
    								<input maxlength="20" tabindex="8" pattern="[0-9]+" class="o-form__field o-form__field--text" id="tel" type="tel" name="Telefon">
    								<label class="o-form__label" for="tel">Telefon</label>
    							</div>
    
    							<div class="t-medium-24 columns is-last-in-row o-form__item">
    								<input maxlength="128" tabindex="9" class="o-form__field o-form__field--text form-control" type="email" name="email" title="Bitte Email eintragen" id="email" required>
    								<label class="o-form__label" for="email">E-Mail<em><span class="rot">*</span></em></label>
    							</div>
    
    							<div class="t-medium-24 columns is-last-in-row o-form__item">
    								<textarea placeholder="Ihre Mitteilung an uns" tabindex="10" class="o-form__field o-form__field--textarea" name="Nachricht" id="nachricht" style="height:237px;overflow-y:hidden;" required></textarea>
    								<label class="o-form__label" for="nachricht">Nachricht<em><span class="rot">*</span></em></label>
    							</div>
    
    							<span class="unsichtbar">
    								<label for="emailschutz">Das folgende Feld muss leer bleiben:</label>
    								<input type="text" name="emailschutz" id="emailschutz" title="Dieses Feld darf nicht ausgefüllt werden "  />
    							</span>
    
    							<div class="t-medium-24 columns is-last-in-row o-form__item">
    								<label for="Einwilligung">Einwilligung<em><span class="rot">*</span></em>:</label><br/>
    								<input tabindex="11" type="checkbox" name="Einwilligung" value="Ich stimme einer elektronischen Speicherung und Verarbeitung meiner eingegebenen Daten zu." class="o-check-group__option o-check-group__option" required /> 
    								Ich habe die <we:a edit="document" id="1079">Datenschutzerklärung</we:a> zur Kenntnis genommen. Ich stimme einer elektronischen Speicherung und Verarbeitung meiner eingegebenen Daten zur Beantwortung meiner Anfrage zu. <br /><br />
    							</div>
    
    						</fieldset>
    
    						<div class="actions">
    							<nav class="form-navigation">
    								<div class="btn-toolbar" role="toolbar">
    									<div class="btn-group" role="group">
    										<we:formToken lifetime="20" />
    										<span class="btn-group next submit" style="float: left; margin-right: 1em;width: 45%;"><input tabindex="12" class="button" type="submit" name="abschicken" value="Abschicken"></span>
    										<input tabindex="13" class="button" style="width:45% !important;" type="reset" name="loeschen" value="L&ouml;schen">
    									</div>
    								</div>
    							</nav>
    						</div>
    
    					</we:form>
    Display More

    Und hier der Teil der Vorlage mit sendmail:

    Code
    <we:ifFormToken>
    				<we:setVar from="request" namefrom="formID" to="global" nameto="formularID"/>
    				<we:listview type="document" id="\$formularID" rows="1">
    					<we:repeat>
    						<we:field name="empfaengerAdress" to="global" nameto="destination" type="text"/>
    						<we:field name="empfaengerAdressBCC" to="global" nameto="destinationBCC" type="text"/>
    					</we:repeat>
    				</we:listview>
    
    				<we:setVar from="request" namefrom="email" to="global" nameto="emailadresse"/>
    				<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/>
            <p>
                Ein Fehler ist aufgetreten.
            </p>
    </we:ifFormToken>
    Display More

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

    LG
    Silvia

  • e-site
    Student
    Reactions Received
    7
    Posts
    99
    • December 5, 2024 at 10:59 AM
    • #2

    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

  • SiBl
    Beginner
    Posts
    22
    • December 5, 2024 at 7:32 PM
    • #3

    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

  • e-site
    Student
    Reactions Received
    7
    Posts
    99
    • December 6, 2024 at 9:11 AM
    • #4

    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

  • SiBl
    Beginner
    Posts
    22
    • December 9, 2024 at 7:40 PM
    • #5

    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:

    PHP
    <?php
    session_start();
    $time_limit = 60; 
    $suspect = false;
    
    		if (isset($_SESSION['formTime']) && is_numeric($_SESSION['formTime'])) {
    			$seconds_passed = time() - $_SESSION['formTime'];
    			if ($seconds_passed < $time_limit) {
    				$suspect = true;
    			} 
    		} else {
    			$suspect = true;
    		}
    		?>
    Display More

    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.

    PHP
    	<we:ifFormToken>
    	<we:setVar from="request" namefrom="formID" to="global" nameto="formularID"/>
    <we:listview type="document" id="\$formularID" rows="1">
    	<we:repeat>
    <we:field name="empfaengerAdress" to="global" nameto="destination" type="text"/>
    <we:field name="empfaengerAdressBCC" to="global" nameto="destinationBCC" type="text"/>
    	</we:repeat>
    </we:listview>
    
    <?php
    if (filter_var($destination, FILTER_VALIDATE_EMAIL) === false) {
    								echo("Kein Versand möglich");
    							}
    							?>
    
    <we:setVar from="request" namefrom="email" to="global" nameto="emailadresse"/>
    <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/>
    							<p>
    								Ein Fehler ist aufgetreten.
    							</p>
    						</we:ifFormToken>
    Display More

    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

  • e-site
    Student
    Reactions Received
    7
    Posts
    99
    • December 10, 2024 at 9:31 AM
    • #6

    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).

  • SiBl
    Beginner
    Posts
    22
    • December 11, 2024 at 6:18 PM
    • #7

    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

  • e-site
    Student
    Reactions Received
    7
    Posts
    99
    • December 12, 2024 at 8:49 AM
    • #8

    Alles klar, was mir noch aufgefallen ist:

    $destination im ersten Abschnitt sollte ja eigentlich $_POST['emailadresse'] sein?

    Gruß

    Heiko

Participate now!

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

Register Yourself Login

Donations

200.00 EUR

Donate now
  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™