WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

Announcement

#1 24.06.2026 10:41:07

bbs2
Member

Unzureichende Validitätsprüfung bei der Mailadresse

Hallo,

ich habe testweise in einem Mailfeld folgende Adresse eingegeben

sey+/@online.de

Diese Eingabe wurde akzeptiert

Erst der Ersatz der function in der class.wb.php durch

[== PHP ==]
 public function validate_email(string $email): bool
{
    if (empty($email)) {
        return false;
    }
    
    if (function_exists('idn_to_ascii')) {
        // Use internal if available.
        // See: https://www.php.net/manual/en/function.idn-to-ascii.php
        $email = idn_to_ascii($email);
    } else {
        require_once WB_PATH . '/include/idna_convert/idna_convert.class.php';
        $IDN = new idna_convert();
        $email = $IDN->encode($email);
        unset($IDN);
    }
    // regex from NorHei 2011-01-11
    $retval = preg_match("/^((([!#$%&'*+\\-\/\=?^_`{|}~\w])|([!#$%&'*+\\-\/\=?^_`{|}~\w][!#$%&'*+\\-\/\=?^_`{|}~\.\w]{0,}[!#$%&'*+\\-\/\=?^_`{|}~\w]))[@]\w+(([-.]|\-\-)\w+)*\.\w+(([-.]|\-\-)\w+)*)$/", $email);
    return ($retval != false);
}

Quellenangabe zum code:
https://forum.wbce.org/viewtopic.php?id=5849

Könnte dies evtl. in der WBCEUP.zip, Version 1.6.8, auch geändert werden?

Gruß
Heinz

Last edited by bbs2 (24.06.2026 10:54:58)

Offline

#2 24.06.2026 11:31:47

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hallo,

ergänzende Feststellung

Mit dem code aus dem vorigen Beitrag wird die Mailadresse

sey/@online.de

akzeptiert.

Die Adresse
sey&@online.de

wird richtigerweise jedoch als fehlerhaft reklamiert.

Gruß
Heinz

Offline

#3 24.06.2026 13:07:05

florian
Administrator

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Der Internet-Standard RFC 2822 legt fest, aus welchen Buchstaben, Zahlen und Sonderzeichen die Adresse bestehen darf: A-Z, a-z, 0-9 sowie .!#$%&'*+-/=?^_`{|}~

https://de.wikibooks.org/wiki/Internet:_E-Mail:_Adresse


Wir Benötigen: Cents, Euros... jetzt spenden!

Offline

#4 24.06.2026 16:41:54

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hallo Florian,

dies ist bzgl. des internationalen Standards richtig.

Viele Provider erlauben jedoch alle diese Zeichen nicht.
Deshalb will ich eine Validitätsprüfung realisieren, die restriktiver ist als

[== PHP ==]
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;

Hier als Beispiel die Regel von Strato für Mailadressen

"Erlaubt sind Ziffern und Buchstaben ohne Sonderzeichen und ohne Umlaute sowie Minus (-), Unterstrich (_) und Punkt (.). Punkte dürfen weder am Anfang noch am Ende der Adresse noch aufeinander folgend eingesetzt werden."

Aktuell wird in mpform bei der Prüfung z.B: auch + (pluszeichen) im local-part akzeptiert
Zudem führt die Mailadresse  müller@online.de zur Ablehnung und danach in dem
Mailfeld zu folgenden Inhalt:

müller<span>@</span>online<span>.</span>de

Lösung:
Ich werde die Prüfung in class.wb.php im Original belassen und
in der evalform.php in mpform eine zusätzliche, restriktivere Prüfung
ergänzen.
Nachteil, bei einem update von mpform wird diese file überschrieben
Vielleicht sollte deshalb die Prüfung in die private.php integriert werden.
Die Prüfung basiert auf den zulässigen Zeichen in Mailadressen bei
IONOS, 1und1, web.de, gmx.deergänzt um die Zulässigkeit des Zeichens + im local-part.
Dies sieht so aus

[== PHP ==]
 if ($field['type'] == 'email') {
                            $v = $post_field;
                            $pattern = '/^[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
                            if (!preg_match($pattern,$v)) {
                                // only allow valid chars
                                $err_txt[$field_id] = 'Unzulässige Zeichen in der Mailadresse';
                                $fer[]=$field_id;
                            }
                        }

Gruß
Heinz

Last edited by bbs2 (26.06.2026 14:58:52)

Offline

#5 27.06.2026 13:18:14

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hallo,

ich habe noch einmal die Validitätsprüfungen bei Mailadressen mit 2 Methoden getestet:

1. Standardprüfung nur mit class.wb.php, also ohne Veränderungen in der evalform.php

und

2. mit ergänztem PHP-Code in der evalform.php in mpform wie oben in meinem Beitrag vom 24.06.26 angegeben.

Grundsätzlich funktionieren beide. Jedoch führen bestimmte Mailadressen bei beiden
Validierungsmethoden zu verwirrenden Anzeigen bei Eingabe einer unzulässigen Mailadresse:

1. Eingabe von müller@t-online.de
2. Beanstandung der Eingabe mit der Rückgabe der Mailadresse
    müller<span>@</span>t-online<span>.</span>de

Siehe screenshot "Beanstandung der Mailadresse" in der Anlage.

Woran kann der response liegen?
Systemhinweise:
Der Fehler tritt auch nach der Installation des mpform-updates vom 26.06.26 auf.
WBCE 1.6.8
PHP 8.4.22

Danke

Heinz

Offline

#6 27.06.2026 14:08:26

Slugger
Developer

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Re: Unzureichende Validitätsprüfung bei der Mailadresse
Hallo Heinz,
das Verhalten mit der Umwandlung von @ und . war tatsächlich ein Bug im Zusammenspiel mit dem Output-Filter. Der eingegebene Wert wurde beim Zurückschreiben ins Formular nicht gegen die Obfuskierung des Output-Filters geschützt.
Das ist in Version 1.3.47 behoben — bitte aktualisieren.

-> https://forum.wbce.org/viewtopic.php?pid=48256#p48256
Gruß

Slugger


Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.6.5 • BE: 2.1.0 • PHP: 8.x * Alle • BE: Argos
Status Projekt 1-4:  OK

Offline

Liked by:

florian

#7 27.06.2026 16:13:07

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Danke,

du hast mich befreit. Ich habe tagelang den Fehler gesucht.
Nach Installation der neuen Version 1.3.47 läuft alles
einwandfrei

Viele Grüße
Heinz

Offline

Liked by:

Slugger

#8 08.07.2026 09:18:48

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hallo,

da standardmäßig in mpform eine Mail-Adressen-Validitätsprüfung nach internationalen Regeln erfolgt,
jedoch fast alle Provider in Deutschland wesentlich strictere Regeln haben (z.B. Umlaute sind nicht erlaubt),
habe ich in mpform in der privat.php eine strengere Validitätsprüfung aufgenommen:

[== PHP ==]
if (($field_id == 12)or($field_id == 34)or($field_id == 50)or($field_id == 68)or($field_id == 56)or($field_id == 113)or($field_id == 356)) {
                            
                            $v = $post_field;
                            $meldung="";
                            if (!empty($v)) {
                            $pattern1 = '/^[a-zA-Z0-9._-]+$/';
                            $pattern2 = '/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
                            $pos = strpos($v,'@') ;
                            
                            if ($pos !== false)  {
                            $local = substr($v,0,$pos);
                            $domain= substr($v,$pos+1,null);
                          
                            if (!preg_match($pattern1,$local)) {
                                   $meldung = 'Zeichenfehler vor @: '.$local."<br>";
                             }
                             
                            if (!preg_match($pattern2,$domain)) {
                                   $meldung = $meldung.'Zeichenfehler nach @: '.$domain;
                             }
                             
                            return $meldung;
                            } else {
                            return '@ fehlt in der Mailadresse';
                          }
                      } 
}

Erlaubt sind in obiger Prüfung lediglich Buchstaben ohne Umlaute, Zahlen und der Punkt (.) sowie die Sonderzeichen _-
Eine Prüfung der zugelassenen Längen erfolgt nicht, kann natürlich ergänzt werden.

Leider ist es mir nicht gelungen statt

[== PHP ==]
if (($field_id == 12)or($field_id == 34)or($field_id == 50)or($field_id == 68)or($field_id == 56)or($field_id == 113)or($field_id == 356)) {

in der privat.php die Abfrage

[== PHP ==]
 if ($field['type'] == 'mail') {

zu verwenden ohne die evalform.php zu verändern.

Viele Grüße
Heinz

Offline

#9 08.07.2026 21:53:59

kant
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hm ...

Hast Du Deine Prüfung in der "private.php" unter der Funktion "private_function_for_field" geschrieben?

Da könntest Du zu der $field_id Dir den "type" holen:
z.B.

function private_function_for_field(
                            $field_id,
                            $post_field
                        ) {
    global $database;
    $fieldType = $database->get_one("SELECT `type` FROM `{TP}mod_mpform_fields` WHERE `field_id` = ".$field_id);
    if ($fieldType === "email") // [sic!]
    {
        // test-stuff here!
    }

Dann fällt das //unsägliche// "id_abfragen" weg ... und Du könntest die "eval" unangetastet lassen ...

hope it helps
Gruß
Kant

Last edited by kant (09.07.2026 00:36:17)


Sapere aude!

Offline

#10 09.07.2026 12:31:52

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Super , vielen Dank.

das funktioniert jetzt.
1. Evalform bleibt unverändert. Upgrades von mpform berühren die private Mail-Adressen-Prüfung nicht
2. Alle Formulare, auch zukünftige, unterliegen der Mailprüfung in der private.php
3. Jeder kann einfach seine individuelle Adressenprüfung realisieren. Weitere Bedingungen, wie z.B. der verbotene Punkt am Anfang
   der Adresse, kann auch noch ergänzt werden.
4. Die Fehlermeldungen zeigen konkreter auf den Fehler hin (Fehlereingrenzung)
5. Fehlermeldetext kann individualisiert werden.

Hier noch einmal den Code in der Private.php, in die Funktion

function private_function_for_field($field_id,$post_field)

integriert werden muss:

[== PHP ==]
 global $database;
    $fieldType = $database->get_one("SELECT `type` FROM `{TP}mod_mpform_fields` WHERE `field_id` = ".$field_id);
    if ($fieldType === "email") // [sic!]
    {      
                            $v = $post_field;
                            $meldung="";
                            if (!empty($v)) {
                            $pattern1 = '/^[a-zA-Z0-9._+-]+$/';
                            $pattern2 = '/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
                            // $pattern = '/^[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
                            $pos = strpos($v,'@') ;
                            
                            if ($pos !== false)  {
                            $local = substr($v,0,$pos);
                            $domain= substr($v,$pos+1,null);
                          
                            if (!preg_match($pattern1,$local)) {
                                   $meldung = 'Zeichenfehler vor @: '.$local."<br>";
                             }
                             
                            if (!preg_match($pattern2,$domain)) {
                                   $meldung = $meldung.'Zeichenfehler nach @: '.$domain;
                             }
                             
                            return $meldung;
                            } else {
                            return '@ fehlt in der Mailadresse';}   
 } }
 

Last edited by bbs2 (09.07.2026 12:33:59)

Offline

#11 09.07.2026 15:48:28

kant
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hallo - ich noch mal ;-)
kannst Du bitte bei Dir mit dem Source "aldus1501@"
also "nur_local und @ aber kein_tld/domain" kurz nachprüfen?
Ich vermute da schlummert noch ein //Biest// im Core ;-(
Danke und Gruß
Kant


Sapere aude!

Offline

#12 09.07.2026 22:16:02

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hallo,

die Prüfung läuft auch in diesem Fall bei unverändertem Code  tadellos. Siehe Bild.


Allerdings sollte die Meldung hierzu aussagekräftiger sein.
Mit der Einfügung

$local = substr($v,0,$pos);
$domain= substr($v,$pos+1,null);
if (strlen($local) == 0) {
return 'Der locale Teil der Mailadresse fehlt vollständig';}
if (strlen($domain)==0) {
return 'Die Domain fehlt vollständig';}

wird die Fehlermeldung konkreter

Gruß
Heinz

Offline

#13 09.07.2026 23:18:40

kant
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Hm ... dann hab ich hier wohl local einen bock :-(

2026-07-09T21:11:44+00:00 [Visitor Request] http://localhost:8888/projekte/wbce_168/wbce/pages/tests/mpform.php
2026-07-09T21:11:44+00:00 [Exception] There was an unknown exception: idn_to_ascii(): Argument #1 ($domain) must not be empty in line (642) of /framework/class.wb.php

"idn_to_ascii" kann mit einem //leeren// domain-str hier nicht umgehen ... Ergebnis ist eine weiße Seite - vor dem "private"-Test(-s) ...

Ich schieb es mal auf meine lokalen //frickeleien// hier ;-) (PHP 8.4 - MAMP - WBCE 1.6.8 [GiT])
Danke für's ausprobieren und schönen Abend noch
Kant

Last edited by kant (09.07.2026 23:24:50)


Sapere aude!

Offline

#14 Yesterday 10:22:08

bbs2
Member

Re: Unzureichende Validitätsprüfung bei der Mailadresse

Weitere Tests waren erfolgreich.
Aktuell wurden alle Syntaxfehler in der Adresse herausgefiltert

Die weiße Seite vor Ausführung der private.php bei dir hat wohl andere Ursachen,
da der leere String erst innerhalb der private.php entsteht:

[== PHP ==]
$local = substr($v,0,$pos);
$domain= substr($v,$pos+1,null);
if (empty($local)) {
return 'Der lokale Teil (vor @) der Mailadresse fehlt vollständig';}
if (empty($domain)) {
return 'Die Domain fehlt vollständig';}

Offline

Board footer

up