パスワード用途以外にinput
要素のtype="password"
を使うのは間違っていない
パスワード用途以外にinput要素のtype="password"を使うのはどうやら間違っている - F.Ko-Jiの「一秒後は未来」(blog.fkoji.com
)に対する返信記事です。
当該記事では Chrome の挙動をもとに
と締めていますが、 Chrome 問題を抜きにして意味的に間違っているか否かを確認するために、HTMLの仕様書を読み返してみました。
HTML 2.0(RFC 1866)
入力した値を不明瞭(obscure)にするとしか書かれておらず、このすぐ後にログインパスワードで使うコード例が掲載されているものの、パスワード以外での使用については明言されていません。
HTML 3.2
要約すると、重要なのは以下の2点です。
- 機能としては
type=text
に似ている - アスタリスクなどの文字で表示され、パスワードを入力するときに覗き見から隠される
when entering passwords
とあるように、パスワード入力のためと書かれていますね。
HTML 4.01
HTML 3.2 と異なりfor sensitive input such as passwords
と、パスワードに限らずセンシティブな情報に対して使えると明記されました。
HTML5
type
属性のキーワードと状態を示した表では、type="password"
はText with no line breaks (sensitive information)
と説明されており、 HTML 4.01 と同じく(パスワードに限らず)センシティブな情報に対して使えると理解できます。
また Password state の本文には、以下のように「ユーザーエージェントは値を不明瞭(obscure)にすべき」以外の指示や制約は書かれていません。
ただし obscure 化には新しい条件が加えられ、値を見ることができないのはユーザー以外(other than the user
)とされました。たとえば Internet Explorer 10 以降はパスワード表示ボタン[1]を押すことにより、入力値を確認することができますが、そういうブラウザの挙動も仕様的に問題ないと言えます。
まとめ
HTML仕様的には、type="password"
はパスワードに限らずセンシティブな情報全般に使えると理解できます。
- HTML 3.2 の仕様書ではパスワードのみに使うような書き方がされていますが、あくまで表現の問題でそれ以外の用途を禁止しているものではないこと、またそもそもそんな古い時代の仕様を参照する必要はないでしょう。
とはいえ、パスワードにしろセキュリティコードにしろ、センシティブな情報を取り扱うからにはブラウザの挙動を知ることも重要であり、元記事で指摘されているような Chrome の挙動も考えると、センシティブだからと何でも type="password"
にしてしまうのではなく慎重な判断をする必要がありそうです。難しいですね。
脚注
-
1.
正式名称は調べていません。パスワードを入力すると入力欄の右隅に現れる目のアイコンのやつです。 ↩ 戻る