作成日: 2009年2月6日 | |
作成者:(株)エスアイヤ | 代表取締役 河野俊之 CTO 木戸間 周平 チーフシステムエンジニア 江上 新一 |
最終更新日: 2009年2月6日 |
今回は、ColdFusionでのログイン処理、アプリケーションのセキュリティを確保するColdFusionの設定について解説します。
ウェブアプリケーションにおいてログイン処理によるユーザー認証は、アプリケーションのセキュリティを確保する上でとてもポピュラーで効果的な方法です。ログイン処理の考え方自体はシンプルなものですが、実装にはログイン状態を維持する方法や、ログインしていない状態でアクセスされたときの挙動など、考慮すべき内容が多く、セキュリティにも配慮する必要があるため、シンプルな仕組みにかかわらず設計者、開発者が神経を使う部分であるといえます。これら一連のログイン処理をColdFusionで行う場合、一から仕組みを作ることももちろん可能ですが、ColdFusion MX以降にはcfloginタグをはじめとして、認証管理・ロール管理の枠組みとなるタグや関数が標準で用意されています。これらを使うことでセキュリティに配慮したログイン処理を比較的簡単に構築することができるようになっています。
・セキュリティ関連のタグ、関数
■<cflogin>、<cfloginuser>、<cflogout>、<cfNTauthenticate>
■GetAuthUser()、GetUserRoles()、IsUserLoggedIn()、IsUserInRole() など
例えば、このうちcfloginタグはColdFusionで行う認証ロジックのコンテナとして動作し、cfloginタグでネストされたコードがログイン処理として実行されます。開発者は任意の認証ロジックをこのタグの間に記述し、その結果に応じてcfloginuserタグを呼び出すことで、ColdFusionに認証済みユーザーを識別させることができるようになります。
cfloginタグはログインしていない場合のみ実行されるようになっているため、このタグをApplication.cfcのonRequestStartメソッド、もしくはApplication.cfm内に記述することで、cfmファイルへのアクセスにログインを必須にするといったことも容易にできます。
また、例えばシステムの機能追加などで、ユーザー情報をLDAPサーバーからも取得する、あるいはNTドメインから取得するといった変更が入ったとします。そのような場合でも、ログイン処理をcfloginタグで一元化しておくことで拡張が行いやすくなります。具体的には、cfldapタグでLDAPにアクセスする、cfNTauthenticateタグでNTドメインを参照するなどの記述を追加するだけで、アプリケーション全般に及ぶ認証チェック、ロールチェックの仕組みを変更することなしに、機能追加が行えます。
他にも、ColdFusionコンポーネント(以降CFC)のメソッドに備わったrole属性を用いることで、認証済みユーザーのロールに応じて、メソッドへのアクセスを細かく制御することも可能になるため、さらにセキュリティを強化した処理を作ることもできます。
ウェブアプリケーションにおけるセキュリティ上の注意点として、昨今よく耳にするものとしては、SQLインジェクション、クロスサイトスクリプティングといった、ウェブアプリケーションの実装上のセキュリティホールをついた攻撃が挙げられるかと思います。
これらの攻撃への対策としては、コーディングの際に、ユーザーの入力した内容をそのままHTMLとして表示しない、ダイレクトにSQL文に組み込まない、といったことを徹底することが必要です。
ColdFusionには、これらの対策をサポートする関数やタグが予め用意されており、ユーザーが入力したHTMLタグを無害化するHTMLEditFormat関数や、SQLの実行にcfqueryparamを使ったパラメータバインドを利用することで、ユーザーからの入力内容により悪意のあるコードを実行されるといったことを防ぐことが可能です。
その他にも、ColdFusionでは,、グローバルスクリプト保護という機能を有効にすることでscriptタグを使ったクロスサイトスクリプティングをサーバーレベルで抑制することができるようになっており、これらの機能を活用することで、効率的にセキュリティ対策を施すことができます。
また、エンタープライズ版のColdFusionが持つサンドボックスセキュリティを用いると、ColdFusionサーバー上の特定のディレクトリ階層ごとに、ファイルシステムへのアクセス制限やデータソース、ColdFusionタグ、関数などの利用制限をサーバーレベルで設定することができます。これにより、実装コードの内容に関わらず、一定のセキュリティを担保することが可能となります。
今回紹介してきたもの以外にも、ColdFusionには様々なセキュリティに関するタグや関数、ColdFusionの管理画面で設定できる項目といったものが用意されています。これらの機能を利用することでColdFusionサーバーをセキュアに公開し、ColdFusionの優れた部分を存分に発揮することができるのではないでしょうか。
今回扱った内容は、ColdFusion 8プロフェッショナルガイドのChapter7にてログイン処理の実装方法、公開するサーバーの設定、全般的なセキュリティなど、ウェブアプリケーションを公開する上でとても重要な事柄について、サンプルを用いながら詳細に解説しています。こちらも是非ご覧頂ければと思います。
次回は、ColdFusionを使ってPDFやZIPを活用する方法を解説します。