Contao-Camp 2024
Ergebnis 1 bis 18 von 18

Thema: userlogin groß/kleinschreibung

  1. #1
    Contao-Nutzer Avatar von helmi
    Registriert seit
    23.10.2012.
    Beiträge
    8

    Standard userlogin groß/kleinschreibung

    jemand ne idee wie bzw. in welchem file ich den userlogin anpassen kann?

    ich möchte gerne das bei username und passwort groß und kleinschreibung egal ist

    Danke im Vorraus

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard userlogin groß/kleinschreibung

    Der Username ist caseinsensitive (weil für die Datenbank 'a' = 'A' ist, nicht, weil Contao da etwas macht). Das Password ist casesensitive, weil 'a' einen anderen Hashwert ergibt als 'A'.

    Meines Wissens -- und zurecht -- gibt es keine Einstellung der Art

    [x] mache das System unsicherer!

    Warum willst Du das haben?
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Contao-Nutzer Avatar von helmi
    Registriert seit
    23.10.2012.
    Beiträge
    8

    Standard

    Das wurde die seite zwar unsicher machen keine frage ...
    Jedoch den ablauf und die übersicht auf meiner page erleichtern

    Das es keine vorfunktion gibt ist klar...
    Dachte daran die registrierung zu manipulieren mit strtolower oda sowas
    Und das dann natürlich auch beim login zu machen

  4. #4
    Community-Moderator Avatar von schman
    Registriert seit
    20.06.2009.
    Ort
    Dornbirn
    Beiträge
    3.739
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    Der Username ist caseinsensitive (weil für die Datenbank 'a' = 'A' ist).
    Jain. Es kommt auf die Kollation drauf an. Standardmäßig ist diese utf8_general_ci. Das ci am Ende bedeutedet caseinsensetiv (also so wie du es beschrieben hast). Wird aber eine andere Kolletion verwendet (gibt da ja auch welche mit ..._cs) diese wären dann case sensitive. Nur der Vollständigkeithalber

    @helmi
    Wie bereits gesagt wurde gibt es hierfür keine Einstellungsmöglichkeit, du könntest aber eventuell ein eigenes Modul dazu schreiben, vielleicht ist hier bei der createNewUser-Hook was für dich, sofern es sich überhaupt um die Frontend Benutzer handelt.
    Kein Privat Support via PM.

  5. #5
    Contao-Nutzer Avatar von helmi
    Registriert seit
    23.10.2012.
    Beiträge
    8

    Standard

    Würde mir das umstellen von cs auf ci beim verschlüsselten passwort nichts zerstören?

    Für den username wäre das durchaus vorstellbar danke...

    Ich weis nicht ich fürchte meine programmierkenntnisse reichen
    Nur aus um code anzupassen, nicht um komplexe funktionen zu erschaffen

  6. #6
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard userlogin groß/kleinschreibung

    case senitive oder nicht der Datenbank ist beim gehashten Passwort vollkommen belanglos, da das Ergebnis des Hashens von (z.B.) 'meinPassWort' etwas vollkommen anderes ergibt, als das hashen von 'meinpasswort' und wiederum etwas anderes als das hashen von 'MEINPASSWORT' usw.

    Du müsstest also an alle Stellen ran, an denen das Klartextpasswort im Spiel ist. Wenn Du es dort vor seiner weiteren Verwendung in Kleinschreibung wandelst (oder in Großschreibung, das wäre egal, Hauptsache einheitlich), dann ist es egal wie es der User bei der Vergabe und beim login eingibt und Du hättest erreicht, was Du willst.

    Ich würde mir den Wunsch aber noch mal ganz genau überlegen: Bequemlichkeit darf nicht vor Sicherheit gehen.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  7. #7
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von schman Beitrag anzeigen
    Jain. Es kommt auf die Kollation drauf an. Standardmäßig ist diese utf8_general_ci. Das ci am Ende bedeutedet caseinsensetiv (also so wie du es beschrieben hast). Wird aber eine andere Kolletion verwendet (gibt da ja auch welche mit ..._cs) diese wären dann case sensitive. Nur der Vollständigkeithalber
    Aber in MySQL sind doch ALLE Felder sofern nicht explizit als binär ausgezeichnet caseinsensitive?

  8. #8
    Contao-Nutzer
    Registriert seit
    22.09.2014.
    Ort
    Chemnitz
    Beiträge
    34

    Standard

    Die letzte Antwort ist zwar etwas her, aber ich wollte mal für Leute die das selbe Problem haben, einen Lösungsweg aufzeigen:

    Man muss das LoginModul erweitern und darin die Zeile wo das "username" Feld aus der Post variable ausgelesen wird umändern
    (in dem man die funktion generate() überschreibt (copy und paste) und dann die eine zeile ändert):

    Code:
    class ModuleLoginExtended extends \ModuleLogin
    {
    public function generate()
        {...
          // Overwrite the jumpTo page with an individual group setting
                    $objMember = \MemberModel::findByUsername(strtolower(\Input::post('username'))); // änderung
    
                    if ($objMember !== null)
                    {
                        \Input::setPost("username",strtolower(\Input::post('username')));//hinzufügen
         ...    }
    }
    Und dann bei der Registrierung genau das selbe:
    (eine Zeile hinzufügen)

    Code:
    class ModuleRegistrationExtended extends  \ModuleRegistration{
    
     protected function createNewUser($arrData)
        {...
         $arrData['username'] = strtolower($arrData['username']);
        ...     }
    
    }
    In der config.php:
    Code:
    $GLOBALS['FE_MOD']['user']['registration'] = 'ModuleRegistrationExtended';
    $GLOBALS['FE_MOD']['user']['login'] = 'ModuleLoginExtended';
    das wandelt alle Nutzernamen vor dem Speichern in Kleinbuchstaben um (strtolower)
    Und auch beim Einloggen werden die Eingaben umgewandelt.

    Da ich relativ neu bei Contao dabei bin, weiß ich nicht wie schön oder sauber diese Lösung ist... aber sie funktioniert.
    Ich weiß nicht warum das eine Sicherheitseinschränkung sein sollte, aber vielleicht kann das ja mal Jemand erklären.

    Grüße
    Geändert von garyee (08.10.2014 um 15:05 Uhr)

  9. #9
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von garyee Beitrag anzeigen
    Ich weiß nicht warum das eine Sicherheitseinschränkung sein sollte, aber vielleicht kann das ja mal Jemand erklären.
    Weil Du damit das "Alphabet" verkleinerst. Es gibt also weniger unterschiedliche Werte und damit ist es unsicherer.

    Beispiel: Stell Dir ein Zahlenschloss vor. Bei vier Stellen (mit Werten von 0,1,...9) gibt es 10 hoch 4 = 10000 Kombinationen.

    Wenn ich jetzt den Zeichensatz halbiere (z.B. nur noch 0,1,2,3,4) habe ich nur noch 5 hoch 4 = 625 Kombinationen.

    Die wären viel schneller durchprobiert

  10. #10
    Contao-Nutzer
    Registriert seit
    16.12.2015.
    Beiträge
    17

    Standard

    Der Thread ist zwar schon älter, aber noch ein Hinweis...

    Beim ModuleRegistrationExtended sollte bereits innerhalb von "protected function compile()" im Abschnitt "Validate input" der username in Kleinbuchstaben konvertiert werden. Ansonsten gibt's einen unschönen Datenbank-Fehler, falls das Mitglied bereits "in anderer Form" existiert. Das ganze muss natürlich vor der Überprüfung der unique-Felder der Datenbank erfolgen.

    Beispiel: Der username "johndoe" ist bereits vorhanden. Nun registriert sich ein anderer Nutzer als "JohnDoe". "JohnDoe" wird erst beim Erzeugen des neuen Users zu "johndoe" konvertiert und versucht in die Datenbank einzutragen. Erst dort wird eine Datenbank-Fehlermeldung erzeugt (duplicate entry ...).

    Ich mache das wie folgt:
    PHP-Code:
    if ($field == 'username')
    {
       
    $varValue strtolower($varValue);
    }

    // Make sure that unique fields are unique (check the eval setting first -> #3063)
    ... 

  11. #11
    Contao-Nutzer
    Registriert seit
    08.10.2012.
    Beiträge
    33

    Standard Hook - initializeSystem

    Hallo zusammen,

    da ich kein Freund davon bin System-Module bzw. deren Klassen zu überschreiben: Man muss immer im Kopf haben, dass wenn man das System aktualisiert, ggf. Änderungen in den Modulen oder Klassen vorhanden sein können, die man dann manuell nachpatchen muss.

    Daher kann man das ganze vielleicht einfacher über den Hook - initializeSystem lösen. Alles was man dazu braucht ist ein eigenes Module mit der Registrierung des Hooks.

    Da dieser noch vor der Verarbeitung der Anfrage greift, kann man da wunderbar die Benutzereingabe manipulieren bzw. in dem Sinne den Benutzernamen auf kleinbuchstaben setzen.

    Hier einfach mal Beispiel-Code:

    PHP-Code:

    (...)

    public function 
    hookInitializeSystem()
    {
         
    /* Nur im Frontend-Modus ausführen! */
         
    if(defined('TL_MODE') && TL_MODE == 'FE')
         {    
               
    /**
                * Registrierung/Login
                * -> Das Feld Benutzername auf klein setzen
                */
                
    if(isset($_POST['FORM_SUBMIT']) && (\Input::post('FORM_SUBMIT') == 'tl_login' || \Input::post('FORM_SUBMIT') == 'tl_registration'))
                {
                    if(isset(
    $_POST['username'])){
                        \
    Input::setPost('username'strtolower(\Input::post('username')));
                    };
                };
         }

    (...)
    }; 

  12. #12
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    geht das denn auch beim bearbeiten der Nutzerdaten? Denn da ist im FORM_SUBMIT immer eine ID dabei :/
    Liebe Grüße
    WebRoxx


  13. #13
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.137

    Standard

    Oder kann man den Zeichensatz von Username einfach anpassen das immer alles klein ist ?

    Finde das mit Groß/Klein bisschen ungünstig. Kann auch unter den Usern zu Verwechslungen kommen.
    Liebe Grüße
    WebRoxx


  14. #14
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von Ralf2011 Beitrag anzeigen
    Oder kann man den Zeichensatz von Username einfach anpassen das immer alles klein ist ?.
    Das ist nicht der Zeichensatz, sondern die Collation (https://dev.mysql.com/doc/refman/5.7...t-general.html).

    Wenn Du Deine Datenbank erstellst hast Du wahrscheinlich dort etwas wie utf8_general_ci (ci ... case insensitive). Das würde dann alle Spalten Deiner Datenbank betreffen, außer bei deren Definition wird etwas anderes "gesagt". Und genau das macht Contao in der system/modules/core/dca/tl_member.php (tl_user.php analog) für die Spalte username:

    PHP-Code:
    'username' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['username'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'sorting'                 => true,
                
    'flag'                    => 1,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=>true'unique'=>true'nullIfEmpty'=>true'rgxp'=>'extnd''nospace'=>true'maxlength'=>64'feEditable'=>true'feViewable'=>true'feGroup'=>'login'),
                
    'sql'                     => "varchar(64) COLLATE utf8_bin NULL"
            
    ), 
    Das könntest Du natürlich in einer eigenen "Erweiterung" oder der system/config/dcaconfig.php überschreiben:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['username']['sql'] = "varchar(64) COLLATE utf8_general_ci NULL"
    Damit sollte dann in system/modules/core/library/ContaO/User.php wo der User letztlich mit

    PHP-Code:
    $objResult $this->Database->prepare("SELECT * FROM " $this->strTable " WHERE " $strColumn "=?")
                                        ->
    limit(1)
                                        ->
    execute($varValue); 
    gesucht wird der Treffer unabhängig von der Groß-Kleinschreibung (oder mixed case) sein.

    Edit: den Hinweis, den Contao bei gescheitertem Login anzeigt: "Anmeldung fehlgeschlagen (Benutzernamen und Passwörter unterscheiden zwischen Groß- und Kleinschreibung)!" müsstest Du dann natürlich auch noch anpassen, denn die stimmt ja dann nicht mehr und verwirrt den User, was Du ja vermeiden willst.
    Geändert von fiedsch (02.03.2017 um 19:56 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  15. #15
    Contao-Nutzer
    Registriert seit
    01.04.2015.
    Beiträge
    127

    Standard

    mit der Lösung von fiedsch
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['username']['sql'] = "varchar(64) COLLATE utf8_general_ci NULL"
    Funktioniert es perfekt, vorausgesetzt man ändert auch noch "username" in der Datenbank in "utf8_general_ci" mit phpMyAdmin.

  16. #16
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von supahr Beitrag anzeigen
    Funktioniert es perfekt, vorausgesetzt man ändert auch noch "username" in der Datenbank in "utf8_general_ci" mit phpMyAdmin.
    oder mit Contao (Paketverwaltung oder Installtool sollten diese Änderung vorschlagen, dachdem ihnen das geänderte Feld bekannt gemacht wurde.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  17. #17
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Zitat Zitat von Carposept Beitrag anzeigen
    Ich bin mit der Meinung "Bequemlichkeit darf nicht vor Sicherheit gehen" ein bisschen nicht einverstanden.
    Ich habe die Parole geschaffen, wo die großen und kleinen Buchstaben auseinandergeworfen waren. Und dann habe ich die Parole ganz vergessen. Ehrlich gesagt, die Parole wusste ich, aber welche Buchstaben klein und welche groß habe ich ganz vergessen. Und Resultat - habe ich Account verloren
    Wenn Du mit Parole das Passwort meinst: es ging hier um den Benutzernamen. Das Passwort ist weiterhin "case sensitve".
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  18. #18
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Ich klinke mich hier mal ein. Ein Kunde hat seine Webseite von mir Updaten lassen (2.x auf 3.5.x). Jetzt laufen im Systemlog jede Menge Fehler auf das sich Benutzer nicht einloggen können. Es liegt daran, dass Sie das erste Zeichen von Ihrem Login groß schreiben....

    Ging das in Contao 2 groß- und klein geschrieben?

    Auch wenn ich kein großer Fan davon bin.....reicht nur die Anpassung in der dcaconfig.php damit beide Versionen vom Benutzernamen gehen? Bzw. vielleicht gibt es inzwischen eine feinere Lösung? Ich denke es ist nur eine Frage der Zeit bis sich der Kunde diesbezüglich bei mir meldet

    VG Frank

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •