Willkommen in der Webstatt Zum Webstatt Blog und Stories
Al3x0r Al3x0r am 29.01.07 15: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 Benutzung 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

netcup.de Warum gibt es hier Werbung?
Michael Michael am 29.01.07 15:33

!. Bei richtigem Zeichensatz, machen keine Zeichen Probleme.
2. Um lesbare Benutzernamen 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 Benutezr aber in jeden Fall darauf hinweisen, dass und welche Zeichen gesperrt sind und es ggf auch zusätzlich per JS validieren

Al3x0r Al3x0r am 29.01.07 15: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?

Michael Michael am 29.01.07 15: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 Benutzername 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 Benutzernamen wie "!~Thunder~!" braucht keine Seite mit Benutzern über 10 Jahren

Al3x0r Al3x0r am 29.01.07 16:08

Quote
Original von Michael
zu 5.: Genau. Einfach damit ein benutzer nicht ewig wartet, um dann zu sehen, aha mein Benutzername 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 Benutzernamen in seiner Länge auf ein Mindestwert festzulegen ?

mfg Alex

edit:// Danke deines Beispiels habe ich nun gerafft wie ich zumindest weitere Zeichen erlauben kann... Danke.

Michael Michael am 29.01.07 16:15

Der Benutzername 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.

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

Al3x0r Al3x0r am 29.01.07 16:24

So danke für die Hilfe, Michael.

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

if (!function_exists('validate_username')):
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

Michael Michael am 29.01.07 16:31


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

Al3x0r Al3x0r am 29.01.07 16:36

Danke... ;D

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

Michael Michael am 29.01.07 22:35

Nö, nur stringvariable.match() benutzen

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt