|
.NET TIPS [ASP.NET]フォーム認証用のパスワードを暗号化するには?山田 祥寛2004/04/02 |
![]() |
|
|
|
別稿「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?」では、web.configを利用したフォーム認証を紹介した。しかし、セキュリティに敏感な皆さんならば、きっと不安に思われた点があるはずだ。
web.configのようなテキスト・ファイルで平文(=暗号化されていない文)のパスワードを管理して、果たしてパスワード漏えいの心配はないのだろうか。なるほど、ASP.NETのデフォルトの設定では、Webブラウザ経由でweb.configにアクセスすることはできない。管理者が自らmachine.configの設定を変更しない限り、HTTP経由でパスワードが漏えいする心配はないだろう。しかし、サーバ上のファイル・システムに対して直接にアクセス可能なユーザーが、その平文のテキスト・ファイルにアクセスした場合はどうだろうか。
もちろん、適切なアクセス権限を設けておけば、むやみとアクセスされる心配はないが、逆にいえば、適切なアクセス制限が施されていない環境下では、管理者ではない一般のユーザーがパスワードを読み取れてしまう可能性があるのだ。また、ASP.NETやIIS、あるいはWindowsそのものにセキュリティ上のバグが存在し、web.configが読み取り可能な状態になってしまったとしたら? このようなトラブルは不可避とはいえ、それでもサイト(アプリケーション)管理者としては「最大限セキュアな状態」を保持する責任がある。
そこで必要となるのが、パスワードの暗号化である。別稿「TIPS:構成ファイルのみでフォーム認証を実現するには?」で作成したweb.config(アプリケーション・ルート直下)を以下のように書き換えてみよう。
|
|
| パスワードを暗号化した構成ファイル(web.config) |
<credentials>要素のpasswordFormat属性をSHA1(またはMD5)に変更したうえで、<user>要素のpassword属性にSHA1(またはMD5)形式で暗号化したパスワードをセットすればよい。passwordFormat属性に暗号化方式を指定しただけで、パスワード文字列が自動的に暗号化される仕組みではないので注意してほしい。パスワード文字列は、管理者が自ら手動でセットする必要がある。
文字列の暗号化に際しては、FormsAuthenticationクラス(System.Web.Security名前空間)のHashPasswordForStoringInConfigFileメソッドという便利なメソッドがあらかじめ用意されている。第1パラメータに暗号化したい文字列を、第2パラメータに暗号化方式(SHA1またはMD5)を指定することで、戻り値として暗号化文字列を返してくれるという代物だ。
以下では、このFormsAuthenticationクラスのHashPasswordForStoringInConfigFileメソッドを利用して、テキスト・ボックスから入力された文字列をMD5、SHA1方式で暗号化するサンプルを紹介することにしよう。ロジック的には非常に単純なサンプルであるが、自分でweb.configの設定を行う際に役立ててほしい。
|
|
| MD5/SHA1方式で文字列を暗号化するサンプル・プログラム(C#:md5_sha1_cs.aspx) |
|
|
| MD5/SHA1方式で文字列を暗号化するサンプル・プログラム(VB.NET:md5_sha1_vb.aspx) |
このサンプル・プログラムを実行すると、次の画面のようになる。
![]() |
| MD5/SHA1方式で文字列を暗号化するサンプル・プログラムの実行結果 |
| テキスト・ボックスに入力した文字列がMD5/SHA1方式で暗号化されて、下の表に表示される。 |
以上で、文字列を暗号化できるようになった。これによって暗号化された文字列を、先ほどの構成ファイル(web.config)の<user>要素のpassword属性にセットすればよい。
なお、パスワードを暗号化しても、ログイン・ページそのものは変更する必要がない。
また、FormsAuthenticationクラスのAuthenticateメソッドで認証判定を行う場合、次のコードのようにメソッドのパラメータにあらかじめ暗号化された文字列を渡そうとする方がよくいるが、これは誤りだ。
FormsAuthentication.Authenticate |
Authenticateメソッドはメソッドの内部でパスワードの暗号化方式を自動判定し、与えられた平文のパスワードを暗号化したうえで認証判定を行ってくれるので、プログラマが暗号化の有無や種類を意識する必要はまったくない。![]()
| カテゴリ:Webフォーム 処理対象:構成ファイル カテゴリ:Webフォーム 処理対象:認証 使用キーワード:<credentials>要素 使用キーワード:<user>要素 使用ライブラリ:FormsAuthenticationクラス(System.Web.Security名前空間) 関連TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



