ユーザIDとパスワードの妥当な文字種と文字列長を考える
趣味のWebアプリ製作において、ユーザ登録処理を現在実装中で、バリデーション仕様をどうするか考えてみました。その過程を晒します。
何が妥当かなんて人それぞれだとは思いますが、一例ということで。
ユーザID
設計上、一部のURIにユーザIDが含まれる。URIのユーザID部分がパーセントエンコードされていたら、なんとなく格好が悪い。なので、パーセントエンコード不要の文字種のみに制限する。
RFC 3986では、非予約文字が下記のように規定されている。
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
このうち、チルダをユーザIDに使いたいと思う人は少ないだろう。よって、ユーザIDに使える文字種は「ALPHA / DIGIT / "-" / "." / "_"」とする。
つづいて文字列長。1文字ではユーザIDに見えない。2文字なら「ku」とか「to」のように、実際に活動されている方がいる。だから最短で2文字とする。
最長を決めるのは難しいが、24文字とする。このぐらいあれば充分だろう。
パスワード
本当は漢字なりカタカナなりを許可しても問題ないけれども、実際に使う人は少ないだろう。無難にASCIIのみとする。また、制御文字を使うことはないだろうから、0x00〜0x1Fと0x7Fは不可。
文字列長は、最低でも8文字とする。推測されにくくするため、それなりの長さを強制したいけれど、最低16文字なんていわれたら、私なら困る。8文字なら、まず受け入れられるだろう。
最長は、ユーザIDに合わせて24文字にしておく。生パスワードをDBに保存するわけではないので100文字でも構わないが、そんなパスワードを使う人はいないだろう。
雑感
たいした内容でなくてすみません(いつもか)。しょせん趣味のWebアプリ、文字種はともかく、文字列長で悩む必要など最初からないのかもしれません。シビアなパフォーマンスが要求されるアプリケーションでは、1文字の違いが大きな影響をもつこともあるのでしょうが。
24文字じゃ足りないといわれれば増やせばいいわけですし、ま、気楽なもんです。