ほとんどのWebアプリケーションでは、認証、ログイン、セッション管理、ログアウト、登録情報参照などといった機能が必須となっている。これらの機能は、一度セキュアなものを設計してしまえば、それをうまく使いまわすことで安全性を保つことができる。
また、それ以外の機能でも、セキュアな設計指針を決めておき、必ずそれに従うようにすることを推奨する。例えば、以下のような仕組みを採用しておけば、別のユーザーになりすまして、機能を実行されてしまうような脆弱性が存在する可能性を大幅に減らすことができるだろう。
重要な情報を扱うサイトでは、公開前にセキュリティベンダーによる検査を必ず受けるという方法もある。前述した「テスト項目」のところで簡単なチェック方法について説明したが、入力パターンや操作パターンはまだ数多くあり、開発時の基本的なセキュリティチェックだけでは限界がある。隠れた脆弱性を見つけ出すためには、この方法は有効である。前述したアプリケーション構造に対してセキュリティベンダーによる検査を実施しておけば、それを基に開発したアプリケーションは安全性の高いものとなる。
Webアプリケーションをセキュアに開発、運用していくためのガイドラインを作成し、それを順守していく体制を整えることも勧めたい。一般的に使われるガイドラインでは、開発手順やコーディング規則といった内容が記載されることと思うが、それに加えて、前述したテスト項目やセキュアなアプリケーション構造についても明確に記述しておき、必ずそのガイドラインに沿った開発を行わせるようにするとよい。
それ以外の留意点としては、例えば開発者の選定基準を設定するのもよいだろう。アプリケーションの品質は、開発者の技量によって大きく変わってくるからだ。
(例)決済を行うアプリケーションを開発する者は、以下の条件を満たす必要がある。
まだまだ浸透度は低いが、WAF(Web Application Firewall)を導入する方法もある。WAFの基本的な機能は、Webサーバの前に設置することにより、ユーザーから送られてきたタグやシングルクォートなどの特殊文字を遮断することである。特定のページで入力できる文字種をWAFに覚えさせる必要があるため、有効に動作するようになるまでには多少の手間がかかるかもしれないが、WAFの後ろで稼働する多くのWebアプリケーションのセキュリティを一定基準以上に引き上げることが可能だ。ただし、「臭いものにはフタをする」だけでなく、正しい方法で根本的な改修を行うようにしてほしい。
要件定義にセキュリティに関する事項が記されていなくとも、安全なアプリケーションを開発するのは開発者の義務だ。本稿で提案した対策は、既存の体制や手順を大きく変えるものではないため、導入はそれほど難しくはないはずだ。すぐにでも取り入れて実践してほしい。
(参考サイト)
The Open Web Application Security Project(OWASP)
Web Application Security Consortium
ウェブサイトのセキュリティ対策の再確認を〜脆弱性対策のチェックポイント〜(IPA)
JNSAセキュアシステム開発ガイドライン「Webシステム セキュリティ要求仕様(RFP)」編 β版(JNSA)
中村隆之
Copyright © ITmedia, Inc. All Rights Reserved.