岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

ユーザ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文字じゃ足りないといわれれば増やせばいいわけですし、ま、気楽なもんです。