プロローグ
こないだテストしてて、とある仕様に引っかかったんですね。
ログインIDは6桁以上14桁以内とする
え?何で?で、BTSに何でよ?って書いたら(いや、もう少しちゃんと書いたけど)
「一般的に」という回答
???ファッ( ゚Д゚)???
いつから、一般的にログインIDは6桁以上14桁以内になったの?
何?私 浦島太郎?
※後で、言葉足らずによる誤認識だったことが判明するのだけど
問題点
私が疑問になった点は以下
- ログインIDって基本的にユニークなのに桁数制限いるの?
- まぁ制限あってもいいけど、上限が必要な理由とかある?
- 6とか14って数字はどこから出たの?
- 一般的なら文献なり使用しているサイトあるよね?
- 一般的なら会社内なりで周知しなきゃ
Twitterに投げてみる
一般問題はTwitterに投げたら、きっと誰かが拾ってくれる。
そう信じて投げてみた(-ω-)/ ↓
IDの桁数について推奨桁数ってどっかに提示されていませんか?一般的に6~14桁なの??なんで?
パスワード8桁以上はIPAか何かにあったよね?
— リナ?冬眠は出来ないみたい (@____rina____) September 4, 2013
優しいフォロワーさんが、いくつかURLを貼ってくれたのだけど、どうもパスワードについてのURLばかり。
パスワード8桁以上推奨なのはわかった。
しかし、やはりログインIDについては書いているサイトが見当たらない('ω')
別の同僚に聞いてみる
担当者が一般的というからには、他のエンジニアからしても一般的だろう。
そうだ、こないだテストしたシステムもログインIDに桁数制限つけてたよね。
ということで、聞いてみた。
・・・結論からすると、ログインIDに限らず、すべてのテキスト項目に最大桁数制限を設けていたorz
そうなると、論点とは違う。
その時に、さらに別のエンジニアとも話してみる。
彼は一番私が考えているログインID制限に近い考えをしていた。
私が考えているログインID制限
- ログインIDは桁数の制限は基本的に必要ない
- 桁数が必要だとすれば、パスワードと同じ8桁以上にする
- ログインIDはユニークであること
- ログインIDは半角英数、一部記号で構成すること
偉い人に聞いてみよう
・・・んん?どうも一般的(少なくとも同僚の間では)ではなさそうだぞ。
ま・・・まさか、社内がトレンドに追いついていないのかΣ(゚Д゚)?!
でも、調べてもググっても、IDの桁数について説明しているものは出てこない。
そこで、先ほどフォロワーさんに教えてもらったURLの1つを見る。
ん?このお名前どっかで見たことがある。
はっ?!(左前の本を見ながら)
この本の著者じゃないか!!!

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
- 作者: 徳丸浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/03/03
- メディア: 大型本
- 購入: 119人 クリック: 4,283回
- この商品を含むブログ (136件) を見る
ググってみたら、Twitterもなさっていることが判明。厚かましいかと思いつつTweetしてみた。
@____rina____ セキュリティ上の理由は思いつかないので、画面デザイン上の制約や、DBに格納する上での制限などではないでしょうか?
— 徳丸 浩 (@ockeghem) September 4, 2013
・・・あれ?
セキュリティ上の理由は思いつかないので
つまり、やっぱりログインIDに桁数は必要ないじゃないか。
もちろん、仰っているようにデザインやDB制限がある場合は必要なんだろうけど。
直接対決する
対決というと、聞こえが悪いけど(闘ったわけではない)
ここまで調べたり聞いて、これといったものが出ないので、再度本人に聞いてみることにした。
勘違い
どうやら、「一般的」というのは「ログインIDに何らかの桁数制限をつけたあげた方が優しい」ということだったらしい。
それも、上記からすると「?」になるのだけど、数字に関しての根拠は特にないと。
なるほど。
何となくお互いに言葉足らずだったのが原因だったみたい。
それでも、感覚的に何かを思って、こういう制限をつけたはずだろうと
さらに話をしてみることに
ログインIDに最小桁数の制限をつける意図
他のエンジニアとも話したのですが、これは、お客様に対する「安心感」を与えるための”優しさ”という点が一番強そう
ログインIDに最小桁数制限をつけないサイトはTwitterを始め、たくさんあるのですが
やっぱり、「ない」より「多少つけたあげる」方が「何となくセキュリティに守られている感」があるようです。
(本気でセキュリティを考えるのであれば、パスワードの桁数や規則を整備してあげた方が効果的のようですが)
ログインIDに最大桁数の制限をつける意図
まず2つは徳丸さんが仰っていたような点はあげられます。
・デザイン的な問題(長すぎてデザイン崩れ起こすのもね・・)
・DBの制限
なのですが、DB制限について 興味深い(というか知らなかった)話がありました。
PostgreSQLとMySQLの大きな違い
私が携わるシステムのDBはPostgreSQLが多いのですが、今回はMySQLだったこと。
あまりDBを意識していなかったのですが、両者の大きな違いが
Text型にインデックスを貼れるか貼れないか
ということ。
PostgreSQLはインデックスが貼れるということなので、
割りとText型を使うのが主流のようです。⇒最大桁数を意識しなくてもDB上問題ない
MySQLはText型にインデックスが”そのままでは”貼れないので、用途に応じてString型を使う必要がある⇒最大桁数を決めなければならない
なるほど(´・ω・`)
PostgresSQLということにすっかり甘えてきましたが、これから意識しようと思います。
数字の謎
制限を付ける理由としては、何となく解決しました。
では、なぜ6桁~14桁としたのでしょう
最小桁数を6桁とした理由
エンジニアに引き続き「何で6桁にしたのさ?」と話していたところ
「IDとして意味のあるものをつけて欲しい」
という思いが込められていると教えてもらいました。
だって、ID1文字とか2文字じゃなかなかないよね?
かといって、パスワードにあわせて8文字になると、一単語として成り立つ文字少ないよね?
こんな感じがいいんだよ↓
× green 短い
× red 短い
○ Purple このくらいからがイイ
おぉ、何か納得(感覚的な問題なんだけど)
最大桁数を14にした理由
特にないらしい(´・ω・`)ショボーン
ただ、先ほどの6桁+8桁(パスワードの推奨最小桁数)=14桁になるなぁと
思った時に 何となく腑に落ちました。
エピローグ
結果、セキュリティ上IDに桁数をつける重要性は特にないということだったわけですが、お客様に対するUIだったり、潜勢的にエンジニアが意識していた「想い」などが分かって、楽しかったです。
色んな人を巻き込む形にはなりましたが・・・ありがとうございました。