公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
個人情報、取引情報、有償コンテンツ等を取り扱うような場合、Webアプリケーションにおいても、リソースへのアクセスを許可されたユーザのみが行えるようにする仕組み、すなわちアクセス制御のメカニズムが必要となる。
コンテンツへのアクセスは、ユーザ認証とアクセス認可の 2段階の機能で構成するのが一般的である。
Webアプリケーションのユーザ認証においては次のような点を考慮する。
ユーザ認証とは、アクセスを要求するユーザが本人であることを確認する仕組みであり、ユーザ固有の識別子である「ユーザID」とユーザのみが知っていると仮定される「パスワード」を照合することにより判定される。
ユーザの個人情報や秘密情報等へのアクセスは、許可されているユーザのみに限定する。
そのためにユーザの個人情報や秘密情報等を扱う場合には、必ずユーザ認証を行うべきである。
なお認証時のユーザIDとパスワードの照合処理をクライアント側で行ってしまうと、その処理の回避や改ざんのおそれがあるため、必ずサーバで行うことが重要である。
ユーザ認証時に、一定時間内のログイン失敗回数が基準値を超えた場合には、そのアカウントを使用禁止にするべきである。
例えば、あるアカウントに対するログインが10回連続して失敗した場合に、そのアカウントのログインを数時間禁止する。ロックアウトを行わずに無制限にログイン失敗を許容してしまうと、パスワードやユーザIDを総当りで検証する攻撃「ブルートフォースアタック」により、認証を突破されてしまうおそれがある。
このように、ログイン失敗時にアカウントの使用を禁止する仕組みを「ロックアウト」と呼び、ログインの失敗回数やロックアウト期間等を任意に設定することができる。
ログイン失敗回数やロックアウト期間は、利用上の利便性との兼ね合いにより設定する。
ロックアウトは、同じユーザIDや同じパスワードでのログイン試行に対して反応する方がよい。またロックアウトは、そのアカウントが実在することの証明にもなってしまうので「ロックアウトした」旨のエラーメッセージは表示すべきではない。
パスワードの発行・登録時には「パスワードフィルタ」を用い、文字数が少なかったり、文字種が単純すぎる安易なパスワードが使用されるのを防ぐべきである。
パスワードフィルタとは、あらかじめ決めた規則(最低文字数、最低使用文字種等)に従ってパスワードの検証を行うものであり、安易なパスワード(ユーザIDと同じもの、生年月日、一般名詞等)を設定しようとした場合に、そのパスワードを拒否するものである。もしパスワードがユーザIDと同じであったり、一般名詞を使用している場合には、類推、辞書攻撃、総当り攻撃で容易にパスワードが盗まれてしまうおそれがあるからである。
パスワードフィルタの規則として、例を挙げる。
有効期限を定めてパスワードを長期間が変更していないユーザに変更を促すべきである。
変更されていないパスワードの長期使用は、長期になるほど攻撃者にパスワードが盗まれている可能性は高くなる。
管理者はユーザがパスワードをいつ変更したかを記録しておく必要がある。
例えばパスワードが漏えいした可能性が発生した際に、パスワードが変更された時期等の情報をもとにパスワードの変更をユーザにさせる必要がある。
パスワード等個人情報を変更する際には、必ず現行パスワードの再入力をさせ、ユーザ自身の意思で行われ、勝手に個人情報が変更されてしまうことを防ぐ必要がある。
また、変更があったことをユーザがあらかじめ登録している電子メールアドレス宛へ通知する等を行うことが望ましい。
パスワードのみならず、ユーザIDも、ランダム桁やチェック桁を含ませる等を行い、推測が困難なものとすべきであり、シーケンシャルな数値を含むものや、他人に知られている可能性のあるもの(電子メールアドレス、口座番号、社員番号、会員番号等)を使用すべきではない。なぜならば、攻撃者にユーザIDが知られた場合、総当り攻撃でパスワードが盗まれるおそれがあり、またユーザIDをいくつか採取された場合に、それらを比較することで他のユーザIDの推測が可能となり、攻撃の対象が広がるおそれもあるからである。
ログイン場面に限ってはエラーメッセージの説明については、あいまいにし、具体的に何を間違えたのかをユーザに伝達すべきではない。例えば、数組のユーザIDとパスワードを用いて、ログインを試行した結果、以下のメッセージが表示されたとする。
これらのメッセージから、1組目と3組目のユーザIDは存在せず、2組目に入力したユーザIDは存在することが判明してしまう。
このように具体的な内容をエラーメッセージに含めることは、攻撃の手がかりを与えてしまうことになり避けるべきである。上記の場合は「ユーザIDまたはパスワードが正しくありません」とした方がよい。
パスワードリマインダとは、ユーザがパスワードを忘れた際の救済措置である。本人しか知らない秘密情報(合言葉)をユーザに登録してもらい、パスワード忘れの際には、その情報をユーザ認証の代用とすることで、パスワードを再発行する仕組みである。
パスワードリマインダは、認証の機会が増えることでセキュリティが弱くなるため、できればパスワードリマインダを設けない方がよい。もし設ける場合には、次のようにすることを推奨する。
パスワードリマインダの「合言葉」が一致したら、パスワード再設定に次の手順を踏むことを推奨する。なお、要求されるセキュリティレベルによっては手続きを簡略化してもよい。
管理者が個人情報を漏洩したり、一般ユーザに成りすましたりする機会を与えないよう、以下のように考慮すべきである。