Webstatt.org - Community seit 2006 - 2012 (2024?)

Username validieren

Avatar user-118
29.01.2007 14:27

Hallo,

ich bastel zur Zeit an einem Loginscript. Nun stehe ich vor der Frage welche Zeichen ich im Usernamen zulassen sollte und evtl sogar im Passwort. Ich weiß nicht, ob jemand auf die Idee kommen würde aber ich kann mir vorstellen, dass die user-129utzung eines Passworts, dass ü ä ö oder andere Sonderzeiten enthält problematisch sein kann.
Ich habe mir für den Usernamen überlegt folgende Zeichen zuzulassen:
[list=1]
  • a-z
  • A-Z
  • 0-9
  • -
  • _
  • [/list=1]

    Ich bin mir ziemlich sicher, dass es mit diesen Zeichen keine Probleme geben wird. Bedenken habe ich hinsichtlich der Tatsache, dass manche Leute ja auch Nicks wie "!~Thunder~!" oder sowas benutzen. Meint ihr ich sollte das ganze ein bisschen erweitern, vielleicht sogar um alle Zeichen der Ascii-Tabelle oder meint ihr das könnte wieder Probleme geben ?

    Zweite Frage wäre dann wie ich die Uservalidierung umsetze. Das ich preg_match benutzen muss/kann ist mir klar. Aber ich dachte vielleicht kann ich auch einfach alle erlaubten Zeiche in ein Array laden und dann den Usernamen mit den Arrayelementen vergleichen und false zurückgeben sobald der Username ein Zeichen enthält, dass nicht im Array ist...

    Tipps ?

    mfg Alex

    Ich brauche keine Signatur
    Avatar user-253
    29.01.2007 14:33

    !. Bei richtigem Zeichensatz, machen keine Zeichen Probleme.
    2. Um lesbare user-129utzernamen und ein gewisses Maß an Konsistenz zu gewährleisten würde ich die Regeln für E-Mail Adressen verwenden
    3. Passwörter würde ich nicht einschränken
    4. Die Kontrole auf bestimmte Zeichen kannst du entweder per preg_match machen, also etwa /(ä|ü|ö)/ oder mit einer normalen Suchfunktion und einem Array. Ich sehe hier aber keine Notwendigkeit, auch Reguläre Ausrücke zu verzichten
    5. Du solltest den user-129utezr aber in jeden Fall darauf hinweisen, dass und welche Zeichen gesperrt sind und es ggf auch zusätzlich per JS validieren

    Avatar user-118
    29.01.2007 14:41

    Danke für die flotte Antwort:

    1. Das wusste ich nicht... danke
    2. Kann ich die irgendwo nachlesen ?
    3. ok... war auch nur ein flüchtiger Gedanke
    4. Die Notwendigkeit besteht wohl auch nur daran, dass ich mit regulären Ausdrücken bislang nichts anfangen kann. Ich werde das gleich mal nachschlagen...
    5. Wieso nochmal per JS ? Alert?

    Ich brauche keine Signatur
    Avatar user-253
    29.01.2007 14:56

    zu 2.: http://de.wikipedia.org/wiki/E-Mail-Adresse#Der_local-part

    zu 4.: Hier wird dir da sicher geholfen. Ferner gibt es für E-Mail Adressen schon viele fertige Scripte, die mehr oder weniger die Syntax einer Adresse überprüfen

    zu 5.: Genau. Einfach damit ein benutzer nicht ewig wartet, um dann zu sehen, aha mein user-129utzername geht gar nicht. Das kann man ja auch direkt ausgeben.

    // edit

    Ich glaube ich würde sogar nur so prüfen

    /^[-_0-9a-zA-Z]+$/ event. mit einer Mindestlänge denn user-129utzernamen wie "!~Thunder~!" braucht keine Seite mit user-129utzern über 10 Jahren

    Avatar user-118
    29.01.2007 15:08

    Original von user-251el
    zu 5.: Genau. Einfach damit ein benutzer nicht ewig wartet, um dann zu sehen, aha mein user-129utzername geht gar nicht. Das kann man ja auch direkt ausgeben.


    Dauert das durchlaufen eines Regex wirklich so lange ? Eigentlich wollte ich an dieser Stelle auf Javascript verzichten zumal ich dann auch eine Alert für "Benutzername fehlt" und "Passwort fehlt" machen müsste...

    Als Mindestlänge denke ich ist 1 Zeichen ausreichend... Ich will keinem mit einem Nick von 3 Zeichen vorschreiben, dass er nun 5 braucht, damit das einen Hauch von zusätzlicher Sicherheit versprüht... Welchen Sinn macht es den user-129utzernamen in seiner Länge auf ein Mindestwert festzulegen ?

    mfg Alex

    edit:// user-158ke deines Beispiels habe ich nun gerafft wie ich zumindest weitere Zeichen erlauben kann... user-158ke.

    Ich brauche keine Signatur
    Avatar user-253
    29.01.2007 15:15

    Der user-129utzername ist im Grunde auch ein Ausdruck des Respekts gegenüber den Mitbenutzern. Nur du kannst entscheiden, welche Anforderungen er erfüllen muss, da kann es keine globale Vorschrift geben.

    Dauert das durchlaufen eines Regex wirklich so lange ?


    Nein, aber es ja ein ganzer Seitenaufruf inklusive Neuladen. Das ganze JS sind vielleicht 10 Zeilen und kann sogar immer wieder bentuzt werden, wenn es halbwegs sinnvoll geschrieben ist.

    Avatar user-118
    29.01.2007 15:24

    So danke für die Hilfe, user-251el.

    Ich habe das ganz mit Hilfe deines Beispiels nun so gemacht:

    if (!function_exists('validate_username'zwinkern):
    function validate_username($username) {
    if(preg_match('/^[-_0-9a-zA-Z]{3,18}+$/', $username))
    return true;
    }
    endif;


    ich weiß zwar nicht wer einen 18 Zeichen langen Usernamen hat aber ich denke das ist eine obere Schranke, die viel Spielraum lässt...

    mfg Alex

    Ich brauche keine Signatur
    Avatar user-253
    29.01.2007 15:31



    if (!function_exists('validate_username'zwinkern) {
    function validate_username($username) {
    return preg_match('/^[-_0-9a-zA-Z]{3,18}+$/', $username) ? true : false;
    }
    }


    Avatar user-118
    29.01.2007 15:36

    Danke... ;D

    Nochmal kurz ne Frage: Muss ich den RegEx für Javascript irgendwie anpassen ?

    Ich brauche keine Signatur
    Avatar user-253
    29.01.2007 21:35

    Nö, nur stringvariable.match() benutzen