[1] [[HTML]] の [CODE(HTMLa)[[[type]]]] が [DFN[[CODE(HTML)[password]]]] の [CODE(HTMLe)[[[input]]]] 要素は、単一行文章入力[[制御子]]を定義します。 この制御子では、入力された文章は隠されます。 [2] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- text input -- 17.4 The [CODE(HTMLe)[INPUT]] element [3] [[属性]]: ,属性名,属性値,既定値,説明,出典 ,[CODE(HTMLa)[[[accesskey]]]],[CODE(SGML)[%[[Character]]]],,,[HTML 4] ,[CODE(HTMLa)[[[align]]]],,,配置,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[autocomplete]]]],[CODE(SGML)[[CODE(HTML)[[[on]]]] | [CODE(HTML)[[[off]]]]]],,自動補完,"[[WinIE 5]]+, [[Web Forms 2.0]]" ,[CODE(HTMLa)[[[class]]]] ,,,[[級]] ,[HTML 4] %[[coreattrs]] ,[CODE(HTMLa)[[[datafld]]]],,,データ欄,[HTML 4] 予約 ,[CODE(HTMLa)[[[dataformatas]]]],,,データ書式,[HTML 4] 予約 ,[CODE(HTMLa)[[[datasrc]]]],[CODE(SGML)[%[[URI]]]],(なし),データ源,[HTML 4] 予約 ,[CODE(HTMLa)[[[dir]]]] ,,,[[書字方向]] ,[HTML 4] %[[i18n]] ,[CODE(HTMLa)[[[disabled]]]],(真偽値属性),(偽),無効,[HTML 4] ,[CODE(HTMLa)[[[id]]]] ,,,一意識別子 ,[HTML 4] %coreattrs ,[CODE(HTMLa)[[[istyle]]]],,,入力モード,[[iモード]] 2.0 ,[CODE(HTMLa)[[[lang]]]] ,,,[[自然言語]] ,[HTML 4] %i18n ,[CODE(HTMLa)[[[xml]]:lang]],,,自然言語 ,[XHTML 1] ,[CODE(HTMLa)[[[language]]]],,,スクリプト言語,[[WinIE 4]]+ ,[CODE(HTMLa)[[[maxlength]]]],[CODE(SGML)[[[NUMBER]]]],,最大長,[HTML 4] ,[CODE(HTMLa)[[[name]]]],,,制御子名,[HTML 4] ,[CODE(HTMLa)[[[onblur]]]],[CODE(SGML)[%[[Script]]]],,焦点を失した時,[HTML 4] ,[CODE(HTMLa)[[[onchange]]]],[CODE(SGML)[%[[Script]]]],,現在値変更時,[HTML 4] ,[CODE(HTMLa)[[[onclick]]]] ,,, ,[HTML 4] %[[events]] ,[CODE(HTMLa)[[[ondblclick]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onfocus]]]],[CODE(SGML)[%[[Script]]]],,焦点を得た時,[HTML 4] ,[CODE(HTMLa)[[[onkeydown]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onkeypress]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onkeyup]]]] ,,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onmousedown]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onmousemove]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onmouseout]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onmouseover]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onmouseup]]]],,, ,[HTML 4] %events ,[CODE(HTMLa)[[[onselect]]]],[CODE(SGML)[%[[Script]]]],,文選択時,[HTML 4] ,[CODE(HTMLa)[[[readonly]]]],(真偽値属性),(偽),読取専用,[HTML 4] ,[CODE(HTMLa)[[[size]]]],,,寸法,[HTML 4] ,[CODE(HTMLa)[[[style]]]] ,,,スタイル情報 ,[HTML 4] %coreattrs ,[CODE(HTMLa)[[[tabindex]]]],[CODE(SGML)[[[NUMBER]]]],,タブ順,[HTML 4] ,[CODE(HTMLa)[[[title]]]] ,,,注釈的題 ,[HTML 4] %coreattrs ,[CODE(HTMLa)[[[type]]]],'''[CODE(HTML)[text]]''',[CODE(HTML)[[[text]]]],制御子の種類,[HTML 4] ,[CODE(HTMLa)[[[value]]]],,,初期値,[HTML 4] ,[CODE(HTMLa)[[[vcard_name]]]],,,自動補完,[[WinIE 5]]+ [[#comment]] * 名前 [7] 制御子名は [CODE(HTMLa)[name]] 属性で指定します。 [[#comment]] * 初期値と現在値 [6] [[初期値]]は [CODE(HTMLa)[value]] 属性で指定します。 [[現在値]]は、はじめ初期値です。その後は、[[利用者]]が編集した結果が現在値です。 [[#comment]] * UA による利用 [8] UA は、入力された文字列 (初期値・現在値) を隠してレンダリングします。 例えば文字を星印 ([CODE(char)[*]]) にかえてレンダリングします。 [SRC[HTML 4 17.4.1]] [9] 実際の UA では、 [CODE(char)[*]] の他、 [CODE(char)[●]] なども代替文字として使われています。 [10] オペレーティング・システムのログイン画面などで合言葉を入力する際には入力があっても空文字列としてレンダリングする (何もレンダリングしない) ことがあります。 覗かれても文字数すら分からないという点ではより安全かもしれませんが、 入力されているかどうかが分からないので、特に (相手が信用できるかすらわからない分散システムである) ウェブのブラウザではそういうのは望ましくないかもしれません。 但し、入力欄の枠線の色を変えるなどして入力されているかどうかを容易に判別できるなら、 別に問題とはならないでしょう。 [12] システム環境によっては、 合言葉であっても隠さないで入力されたとおりレンダリングするような設定ができることがあります。 ウェブ・ブラウザによってはシステムのそのような設定を反映するかもしれませんし、 独自の設定でそれが可能かもしれません。 [[#comment]] * 安全性 [11] [CODE(HTML)[password]] 制御子は、[[合言葉]]などを要求するために使われます。 しかし、 UA は入力を隠してレンダリングしますが、 その他の点では他の制御子と扱いは変わりません。 [SRC[HTML 4 17.4.1]] フォームの[[提出]]の方法に依存しますが、普通に [[HTTP]] で送ればおそらく平文のままとなるでしょう。重要な情報であれば [[TLS]] を使うなどして暗号化した方が安全です。 [13] また、 [CODE(HTMLa)[value]] 属性に指定される初期値は当然平文で記述します。 たとえ UA にレンダリングしなくても、ソースを見ればわかります。 ですから、一連の作業 ([[セッション]]) の中で、 前に入力された合言葉を後から [CODE(HTML)[password]] の [CODE(HTMLa)[value]] 属性で送りなおすと危険な場合もあります (例えば、 作業者が途中で席を外した隙に他の人がソースを覗いたらどうでしょう)。 [14] スクリプトなどの手段を使うと、初期値や現在値が取得できるかもしれません。 また、環境によっては、その環境で用意されている [[widget]] ([[GUI]] 部品) を使うと (たとえレンダリングされていなくても) 現在値を別のプログラムから取得できるかもしれません。 特に UA の設計者は、スクリプトからの access 可能範囲の限定を徹底するなど、 十分な配慮を行うべきです。 [15] 現在では、多くの UA で[[自動補完]]機能が用意されていて、 利用者は以前に入力した合言葉を毎回入力する必要はありません。 しかし、この機能が危険と隣り合わせであることは自明です。 特に共用の環境では、この機能は常に切っておくべきです。 また、以前に保存した合言葉を利用者が自由に管理できるように (何を保存したか把握できるように、いつでも削除できるように) するべきです。 但し、何を保存したか把握できるような機能は、同時に、 悪意を持った人がその環境を利用した時に何を悪用できるのか把握できる機能でもあります。 実装においては (ファイル・システムのどこにどう保存するかを含めて) 十分に留意するべきです。 [[#comment]] * 他との関係 [4] [CODE(HTMLa)[[[type]]]] 属性の既定値は [CODE(HTML)[text]] です。また、多くの UA は [CODE(HTMLa)[type]] 値を認識できない (未対応の値が指定された) 時には [CODE(HTML)[text]] と見なして処理するようです。 [5] 同じ文章入力[[制御子]]として、 [CODE(HTMLa)[type]] が [CODE(HTML)[[[text]]]] の入力内容を隠さない単一行入力制御子があります。 入力内容を隠さない複数行入力可能な [CODE(HTMLe)[[[textarea]]]] 要素による制御子はありますが、複数行入力可能で入力を隠す制御子はありません。 [[#comment]] * メモ