画面遷移に関係する脆弱性
ウェブアプリケーションは、複数の画面を遷移し、さまざまな処理を行う。このとき利用しているHTTPは、1回のアクセスごとに通信が完結するステートレスなプロトコルであり、各処理が正常に行えるかどうかを無視すれば、各画面にアクセスすること自体はユーザーが自由に行うことができる。
このため、ユーザーの状況(セッション)をアプリケーションが把握し、制御する必要がある。しかし、制御が不適切であればログインしていないユーザーが機密情報を表示する画面にアクセスしたり、ユーザーが意図しない情報の更新を行わせることなどが可能になる。
このような画面遷移の設計において作りこまれてしまう脆弱性には、「強制ブラウズ」「クロスサイトリクエストフォージェリ」などがある。
まず「強制ブラウズ」は、許可されていないはずのページにアクセスできてしまうという脆弱性だ。これは設計の段階で、どういった状況(たとえば、ログインした状態)や、どういうものしかアクセスできないのか(たとえば、ブラウザからはアクセスできないが、アプリケーションからは読み込める)と言うことを明確にしていないために発生してしまう。
対策としては、アクセスできる条件(ファイルへのアクセス権を含む)を明確にし、その条件に基づいて設定および構築を行う必要がある。
また「クロスサイトリクエストフォージェリ」は、ログインした状態で処理を行うURLに直接アクセスすることで、意図しない処理が行われてしまう脆弱性だ。たとえば、電子商取引サイトにこの脆弱性があり、ログインした状態で悪意のあるサイトにアクセスした場合、意図せず商品購入を行われる可能性がある。
これは、ログインした状態であれば、どんな状態であっても処理が行われることが原因だが、設計の段階で処理が行われる条件を明確にし、その条件に基づいて構築する必要がある。
これらの脆弱性の対策では、どういった状況でこの画面が呼び出されるのか、その状況を把握するにはどうすればよいかを十分に検討する必要がある。
不十分な機能設計による機能の悪用
アプリケーションには、商品を購入したりメールを送信したりするさまざまな機能がある。これらの機能を実現するためにアプリケーションでは、データをデータベースに追加、更新、検索したり、外部プログラムの呼び出しなどをおこなっている。また、状態を把握するために、CookieやHiddenフィールドを使用している。
このような実装する機能や、CookieやHiddenパラメータに格納する情報をセキュリティの観点から十分に考慮していないと、機能を悪用されることがある。
実装した機能によっては、いろいろなことに悪用できるものがある。たとえば、機能の悪用には、「メール送信機能」「パスワードエラー通知機能」「バックドアとデバッグオプション」などがある。