(57)【特許請求の範囲】
【請求項１】
コンピュータを、
構造化文書提供アプリケーションを実装するサーバと、前記サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む第１のメッセージデータ、および前記一連の通信と異なるタイミングの一連の通信の内容を含む第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、前記リクエストパラメータをリクエストパラメータ記憶手段に格納するリクエストパラメータ抽出手段、
前記第１のメッセージデータ、および前記第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、前記非表示属性項目を非表示属性項目記憶手段に格納する非表示属性項目抽出手段、
前記非表示属性項目記憶手段が記憶する前記非表示属性項目のうちから、前記リクエストパラメータ記憶手段が記憶する前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を未入力非表示属性項目として抽出して、前記未入力非表示属性項目を未入力非表示属性項目記憶手段に格納する未入力非表示属性項目抽出手段、
前記未入力非表示属性項目記憶手段が記憶する前記未入力非表示属性項目のうち、前記第１のメッセージデータに含まれた前記未入力非表示属性項目と前記第２のメッセージデータに含まれた前記未入力非表示属性項目とで重複する前記未入力非表示属性項目を検証対象非表示属性項目として抽出する検証対象非表示属性項目抽出手段、
として機能させることを特徴とする検証対象抽出プログラム。
【請求項２】
前記コンピュータを、さらに、
前記サーバと前記クライアントとの通信の内容から前記第１のメッセージデータ、および前記第２のメッセージデータを取得して、メッセージデータ記憶手段に格納する通信内容取得手段、
として機能させることを特徴とする請求項１記載の検証対象抽出プログラム。
【請求項３】
前記未入力非表示属性項目抽出手段は、
前記第１のメッセージデータにもとづく前記非表示属性項目のうちから、前記第１のメッセージデータにもとづく前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を前記第１のメッセージデータにもとづく前記未入力非表示属性項目として抽出し、
前記第２のメッセージデータにもとづく前記非表示属性項目のうちから、前記第２のメッセージデータにもとづく前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を前記第２のメッセージデータにもとづく前記未入力非表示属性項目として抽出することを特徴とする請求項１または請求項２に記載の検証対象抽出プログラム。
【請求項４】
前記コンピュータを、さらに、
抽出した前記検証対象非表示属性項目の検証の優先度を評価する評価手段、
として機能させ、
前記検証対象非表示属性項目抽出手段は、前記検証対象非表示属性項目に前記評価を付加することを特徴とする請求項１または請求項２に記載の検証対象抽出プログラム。
【請求項５】
前記評価手段は、あらかじめ定めた文字列と、前記文字列の評価値とを登録した評価基準情報を備え、前記検証対象非表示属性項目に前記文字列が含まれる場合に、前記評価値にもとづいて前記検証対象非表示属性項目を評価することを特徴とする請求項４記載の検証対象抽出プログラム。
【請求項６】
構造化文書提供アプリケーションの検証対象となる非表示属性項目を抽出する検証対象抽出装置において、
前記構造化文書提供アプリケーションを実装するサーバと、前記サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む第１のメッセージデータ、および前記一連の通信と異なるタイミングの一連の通信の内容を含む第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、前記リクエストパラメータをリクエストパラメータ記憶手段に格納するリクエストパラメータ抽出手段と、
前記第１のメッセージデータ、および前記第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、前記非表示属性項目を非表示属性項目記憶手段に格納する非表示属性項目抽出手段と、
前記非表示属性項目記憶手段が記憶する前記非表示属性項目のうちから、前記リクエストパラメータ記憶手段が記憶する前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を未入力非表示属性項目として抽出して、前記未入力非表示属性項目を未入力非表示属性項目記憶手段に格納する未入力非表示属性項目抽出手段と、
前記未入力非表示属性項目記憶手段が記憶する前記未入力非表示属性項目のうち、前記第１のメッセージデータに含まれた前記未入力非表示属性項目と前記第２のメッセージデータに含まれた前記未入力非表示属性項目とで重複する前記未入力非表示属性項目を検証対象非表示属性項目として抽出する検証対象非表示属性項目抽出手段と、
を備えることを特徴とする検証対象抽出装置。
【請求項７】
構造化文書提供アプリケーションの検証対象となる非表示属性項目を抽出する検証対象抽出装置の検証対象抽出方法において、
前記検証対象抽出装置が、
前記構造化文書提供アプリケーションを実装するサーバと、前記サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む第１のメッセージデータ、および前記一連の通信と異なるタイミングの一連の通信の内容を含む第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、前記リクエストパラメータをリクエストパラメータ記憶手段に格納し、
前記第１のメッセージデータ、および前記第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、前記非表示属性項目を非表示属性項目記憶手段に格納し、
前記非表示属性項目記憶手段が記憶する前記非表示属性項目のうちから、前記リクエストパラメータ記憶手段が記憶する前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を未入力非表示属性項目として抽出して、前記未入力非表示属性項目を未入力非表示属性項目記憶手段に格納し、
前記未入力非表示属性項目記憶手段が記憶する前記未入力非表示属性項目のうち、前記第１のメッセージデータに含まれた前記未入力非表示属性項目と前記第２のメッセージデータに含まれた前記未入力非表示属性項目とで重複する前記未入力非表示属性項目を検証対象非表示属性項目として抽出することを特徴とする検証対象抽出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書提供アプリケーションの検証対象となる非表示属性項目を抽出する検証対象抽出プログラム、検証対象抽出装置、および検証対象抽出方法に関する。
【背景技術】
【０００２】
ウェブアプリケーション（構造化文書提供アプリケーション）の実装にあたり、ウェブアプリケーションの脆弱性を突いた外部からの攻撃に対する備えは、欠かせない。ウェブアプリケーションを脆弱にする要因は、多岐にわたるが、その１つに構造化文書の非表示属性項目の不正操作がある。構造化文書の非表示属性の不正操作とは、たとえば、ＨＴＭＬ（HyperText Markup Language）のｈｉｄｄｅｎフィールドの不正操作である。
【０００３】
ｈｉｄｄｅｎフィールドは、ウェブブラウザ（構造化文書閲覧アプリケーション）の画面に表示されないＨＴＭＬのフォーム項目（非表示属性項目）であり、ウェブブラウザからリクエストを送信するときにユーザの入力データなどとともにウェブサーバに送信される。ｈｉｄｄｅｎフィールドの値は、通常であれば、ユーザによって書き換えられることがなく、あるページから次のページへのパラメータの受け渡しなど、複数のページにまたがった情報の保持に利用される。
【０００４】
ここで、ｈｉｄｄｅｎフィールドがセキュリティ上の問題の要因となる場合の一例について説明する。図２０は、サイト例ｅｘａｍｐｌｅ．ｃｏｍのＨＴＭＬページの一例を示す図である。例示したサイトｅｘａｍｐｌｅ．ｃｏｍからのレスポンスのＨＴＭＬページ９５は、ｈｉｄｄｅｎフィールド名９６が「ｔｏ」で、ｈｉｄｄｅｎフィールド値９７が「ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ」のｈｉｄｄｅｎフィールドを含んでいる。このｈｉｄｄｅｎフィールドを含むフォームがｓｕｂｍｉｔされることによりウェブサーバから「ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ」宛てにメールを送信するとする。このとき、ユーザが名前「ｔｏ」の値を他の任意のメールアドレスに変更してウェブサーバにリクエストした場合、ウェブサーバは、変更後のメールアドレス宛にメールを送信してしまうかもしれない。もし、ウェブアプリケーションの仕様が変更後のメールアドレス宛てのメール送信を許していた場合、このウェブサーバは、利用制限が弱いメール送信サーバとして悪用されかねず、このような仕様はセキュリティ上好ましくない。この場合において、メールの送信先アドレスは、ｈｉｄｄｅｎフィールドではなく、ウェブサーバ側が保持しておくことが妥当とされる。
【０００５】
そこで、安全なウェブアプリケーションを開発するために、セキュリティ上の問題を有する、あるいは有するおそれのあるｈｉｄｄｅｎフィールドを検出するための提案がなされている。
【０００６】
たとえば、ブラウザで巡回したページのｈｉｄｄｅｎフィールドの情報を収集して提示する方法がある。検査者や開発者は、提示されたｈｉｄｄｅｎフィールドからセキュリティ上の問題を有するｈｉｄｄｅｎフィールドを抽出することができる。しかし、この方法は、セキュリティ上の問題を有するｈｉｄｄｅｎフィールドの抽出作業を検査者や開発者に委ねることとなり、ブラウザが巡回対象とするページが増大すると作業負担が過大になる。
【０００７】
また、検査者や開発者がｈｉｄｄｅｎフィールドのパラメータを変更してウェブサーバにリクエストをおこない、そのレスポンスを検証することによりセキュリティ上の問題を有するｈｉｄｄｅｎフィールドを検出する方法がある。しかし、ｈｉｄｄｅｎフィールドのパラメータは、通常のブラウザ上で変更することができないため、この方法は、ｈｉｄｄｅｎフィールドのパラメータを変更すること自体にも手間を要する。さらに、この方法は、変更作業を自動化すると、レスポンスからｈｉｄｄｅｎフィールドがセキュリティ上の問題を有するか否かを判定する精度が低下する。
【０００８】
また、通信内容に含まれるセッション追跡パラメータにもとづいて、ウェブサイトの脆弱性を分析する方法がある。この方法は、通信内容に含まれる各種パラメータに優先度を付けて評価することにより、セッション追跡パラメータとして利用されている可能性の高いパラメータを抽出する。しかし、この方法は、セッションＩＤと比較して多様な値を取りえるとともに、個人情報との関連性が必ずしも高くないｈｉｄｄｅｎフィールドのパラメータに優先度を付ける場合に精度が低下する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第４１７０２４３号公報
【特許文献２】特許第３８９６４８６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記したように、安全なウェブアプリケーションを開発するために、ｈｉｄｄｅｎフィールドのような非表示属性項目のなかからセキュリティ上の問題を有するパラメータを検出するための提案がいくつかなされている。しかし、これらの方法は、検査者や開発者などの作業者の負担が過大であったり、セキュリティ上の問題を有するパラメータを期待する精度で検出できなかったりするため、必ずしも使い勝手のよい方法とはいえなかった。
【００１１】
本発明はこのような点に鑑みてなされたものであり、セキュリティ上の問題を有する、あるいは有するおそれのあるウェブアプリケーションの検証対象となる非表示属性項目を効率よく抽出可能な検証対象抽出プログラム、検証対象抽出装置、および検証対象抽出方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、コンピュータを、構造化文書提供アプリケーションの検証対象となる非表示属性項目を抽出する検証対象抽出装置として機能させる検証対象抽出プログラムが提供される。
【００１３】
検証対象抽出装置は、リクエストパラメータ抽出手段と、非表示属性項目抽出手段と、未入力非表示属性項目抽出手段と、検証対象非表示属性項目抽出手段とを備える。
リクエストパラメータ抽出手段は、第１のメッセージデータ、および第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、リクエストパラメータをリクエストパラメータ記憶手段に格納する。第１のメッセージデータは、構造化文書提供アプリケーションを実装したサーバと、サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む。第２のメッセージデータは、第１のメッセージデータが含む一連の通信と異なるタイミングの一連の通信の内容を含む。一連の通信の内容は、クライアントからサーバへのリクエストデータと、サーバからクライアントへのレスポンスデータを含む。
【００１４】
非表示属性項目抽出手段は、第１のメッセージデータ、および第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、非表示属性項目を非表示属性項目記憶手段に格納する。
【００１５】
未入力非表示属性項目抽出手段は、非表示属性項目記憶手段が記憶する非表示属性項目のうちから、リクエストパラメータ記憶手段が記憶するリクエストパラメータに含まれていない値を有する非表示属性項目を未入力非表示属性項目として抽出する。そして、未入力非表示属性項目抽出手段は、未入力非表示属性項目を未入力非表示属性項目記憶手段に格納する。
【００１６】
検証対象非表示属性項目抽出手段は、未入力非表示属性項目記憶手段が記憶する未入力非表示属性項目のうち、第１のメッセージデータに含まれた未入力非表示属性項目と第２のメッセージデータに含まれた未入力非表示属性項目とで重複する未入力非表示属性項目を検証対象非表示属性項目として抽出する。
【発明の効果】
【００１７】
上記の検証対象抽出プログラム、検証対象抽出装置、および検証対象抽出方法によれば、セキュリティ上の問題を有する、あるいは有するおそれのある構造化文書提供アプリケーションの検証対象となる非表示属性項目を効率よく抽出することができる。
【図面の簡単な説明】
【００１８】
【図１】第１の実施形態の検証対象抽出装置のブロック図である。
【図２】第２の実施形態の検証対象抽出システムの構成例を示す図である。
【図３】第２の実施形態の検証対象抽出装置のハードウェア構成例を示す図である。
【図４】第２の実施形態の検証対象ｈｉｄｄｅｎフィールド抽出部の機能ブロック図である。
【図５】第２の実施形態のＨＴＴＰメッセージ列生成部の機能ブロック図である。
【図６】第２の実施形態のブラウザ操作スクリプトのＳｅｌｅｎｅｓｅ形式例を示す図である。
【図７】第２の実施形態のウェブアプリケーションが提供するＨＴＭＬ文書表示例を示す図である。
【図８】第２の実施形態のウェブアプリケーションが提供するＨＴＭＬ文書表示例を示す図である。
【図９】第２の実施形態のＨＴＴＰメッセージ列生成制御処理のフローチャートである。
【図１０】第２の実施形態のＨＴＴＰメッセージ列取得処理のフローチャートである。
【図１１】第２の実施形態の第１のＨＴＴＰメッセージ列の一例を示す図である。
【図１２】第２の実施形態の第１のＨＴＴＰメッセージ列の一例を示す図である。
【図１３】第２の実施形態の第２のＨＴＴＰメッセージ列の一例を示す図である。
【図１４】第２の実施形態の第２のＨＴＴＰメッセージ列の一例を示す図である。
【図１５】第２の実施形態の未入力ｈｉｄｄｅｎフィールド解析処理のフローチャートである。
【図１６】第２の実施形態の未入力ｈｉｄｄｅｎフィールド抽出処理のフローチャートである。
【図１７】第２の実施形態のリクエストパラメータ値集合の一例を示す図である。
【図１８】第２の実施形態の未入力ｈｉｄｄｅｎフィールド集合の一例を示す図である。
【図１９】第２の実施形態の検証対象ｈｉｄｄｅｎフィールド集合の一例を示す図である。
【図２０】サイト例ｅｘａｍｐｌｅ．ｃｏｍのＨＴＭＬページの一例を示す図である。
【発明を実施するための形態】
【００１９】
実施の形態を説明する前に、まず、実施の形態が抽出する対象となるhiddenフィールド、すなわち、セキュリティ上問題のあるhiddenフィールドについて説明する。
たとえば、あるWebサーバは、レスポンス中のhiddenフィールドの値にサーバ管理者のメールアドレスto=admin@example.com（名前が to で、値が admin@example.com）を格納しているとする。そして、このhiddenフィールドを含むフォームをsubmitすると、サーバでadmin@example.com宛にメールが送信されるとする。このとき、パラメーター to の値を他の任意のメールアドレスに変更してリクエストすると、サーバから変更後のメールアドレス宛にメールが送られるかもしれない。もし、そのような仕組みになっていたとすると、このサーバは利用制限が弱いメール送信サーバとして悪用されかねず、セキュリティ上好ましくない。この例では、送信先メールアドレスはhiddenフィールドに設定せず、サーバ側に保持しておくのが妥当である。
【００２０】
上記のhiddenフィールドは、セキュリティ上問題のある使われ方の例であるが、妥当な使われ方も当然存在する。たとえば、利用者入力値の一時的な記憶場所として使用する場合や、ページやセッションを識別するためのIDとして使用する場合は、妥当な使われ方であると考えられる。反対に、これらと異なる使われ方をするhiddenフィールド、すなわち、初めからサーバが知っており、かつ、ブラウザに再送させる必要がない値が設定されたhiddenフィールドはセキュリティ上問題のある可能性が高いと判断できる。言い換えると、その値が過去に一度も入力（リクエスト）されておらず、かつ、いつでも同一の値が設定されるhiddenフィールドは「怪しいhiddenフィールド」とみなすことができる。開示の検証対象抽出装置は、このような怪しいhiddenフィールドを抽出するものである。
【００２１】
以下、実施の形態を図面を参照して説明する。
図１は、第１の実施形態の検証対象抽出装置のブロック図である。
第１の実施形態に係る検証対象抽出装置１は、第１のメッセージデータ２０ａと、第２のメッセージデータ２０ｂから構造化文書提供アプリケーションの検証対象となる検証対象非表示属性項目２６を抽出する。構造化文書は、たとえば、ＨＴＭＬやＸＭＬ（Extensible Markup Language）などのマークアップ言語で記述されたデータであり、タグや、パラメータなどからなる文字列を含む。
【００２２】
第１のメッセージデータ２０ａは、構造化文書提供アプリケーションを実装したサーバ（たとえば、ウェブサーバ）と、サーバが提供する構造化文書の閲覧アプリケーション（たとえば、ウェブブラウザ）を実装するクライアントとの一連の通信の内容を有する。第１のメッセージデータ２０ａは、クライアントからサーバへのリクエストデータ２１ａと、サーバからクライアントへのレスポンスデータ２２ａを含む。第２のメッセージデータ２０ｂは、第１のメッセージデータ２０ａが含む一連の通信と異なるタイミングの一連の通信の内容を有する。第２のメッセージデータ２０ｂは、クライアントからサーバへのリクエストデータ２１ｂと、サーバからクライアントへのレスポンスデータ２２ｂを含む。レスポンスデータ２２ａ、２２ｂは、サーバが提供して、クライアントが閲覧するための構造化文書を含む。サーバとクライアントとの通信は、たとえば、ＨＴＴＰ（HyperText Transfer Protocol：ハイパーテキスト転送プロトコル）や、ＨＴＴＰＳ（HyperText Transfer Protocol over Secure Sockets Layer）が用いられる。
【００２３】
サーバは、検証対象となる構造化文書提供アプリケーションによって構造化文書提供サービスをクライアントに提供する。検証対象非表示属性項目２６は、非表示属性項目２３であって、構造化文書提供アプリケーションの検証対象となるものである。非表示属性項目２３は、構造化文書閲覧画面（たとえば、ウェブブラウザの画面）に表示されない項目（非表示属性項目）であり、たとえば、ＨＴＭＬのｈｉｄｄｅｎフィールドである。
【００２４】
検証対象抽出装置１は、リクエストパラメータ抽出手段１１と、非表示属性項目抽出手段１２と、未入力非表示属性項目抽出手段１５と、検証対象非表示属性項目抽出手段１７とを備える。
【００２５】
リクエストパラメータ抽出手段１１は、第１のメッセージデータ２０ａ、および第２のメッセージデータ２０ｂに含まれるリクエストデータ２１ａ、２１ｂからリクエストパラメータ２４を抽出する。そして、リクエストパラメータ抽出手段１１は、リクエストパラメータ２４をリクエストパラメータ記憶手段１４に格納する。リクエストパラメータ記憶手段１４は、０、または１つ以上のリクエストパラメータ２４を記憶することとなる。リクエストデータ２１ａ、２１ｂは、検証対象抽出装置１が備える図示しない記憶手段を介してリクエストパラメータ抽出手段１１の入力とすることができる。なお、リクエストデータ２１ａ、２１ｂは、後述の外部記憶媒体１０８や、ネットワーク接続したコンピュータから取得することができる。また、リクエストデータ２１ａ、２１ｂは、検証対象抽出装置１で動作するアプリケーション（たとえば、プロキシサーバやパケットキャプチャなど）から取得することもできる。
【００２６】
非表示属性項目抽出手段１２は、第１のメッセージデータ２０ａ、および第２のメッセージデータ２０ｂに含まれるレスポンスデータ２２ａ、２２ｂから非表示属性項目２３を抽出する。そして、非表示属性項目抽出手段１２は、抽出した非表示属性項目２３を非表示属性項目記憶手段１３に格納する。非表示属性項目記憶手段１３は、０、または１つ以上の非表示属性項目２３を記憶することとなる。レスポンスデータ２２ａ、２２ｂは、検証対象抽出装置１が備える図示しない記憶手段を介して非表示属性項目抽出手段１２の入力とすることができる。なお、レスポンスデータ２２ａ、２２ｂは、後述の外部記憶媒体１０８や、ネットワーク接続したコンピュータから取得することができる。また、レスポンスデータ２２ａ、２２ｂは、検証対象抽出装置１で動作するアプリケーション（たとえば、プロキシサーバやパケットキャプチャなど）から取得することもできる。
【００２７】
未入力非表示属性項目抽出手段１５は、非表示属性項目記憶手段１３が記憶する非表示属性項目２３のうちから、リクエストパラメータ記憶手段１４が記憶するリクエストパラメータ２４に含まれていない値を有する非表示属性項目を未入力非表示属性項目２５として抽出する。つまり、未入力非表示属性項目２５が有する値は、クライアントからサーバへのリクエストデータに含まれたことがないことを示す。
【００２８】
そして、未入力非表示属性項目抽出手段１５は、抽出した未入力非表示属性項目２５を未入力非表示属性項目記憶手段１６に格納する。未入力非表示属性項目記憶手段１６は、０、または１つ以上の未入力非表示属性項目２５を記憶することとなる。
【００２９】
検証対象非表示属性項目抽出手段１７は、未入力非表示属性項目記憶手段１６が記憶する未入力非表示属性項目２５のうちから検証対象非表示属性項目２６を抽出する。ここで抽出される検証対象非表示属性項目２６は、第１のメッセージデータ２０ａに含まれた未入力非表示属性項目と第２のメッセージデータ２０ｂに含まれた未入力非表示属性項目とで重複する未入力非表示属性項目である。
【００３０】
このような構成によれば、検証対象非表示属性項目２６は、非表示属性項目の値がリクエストされることなく、異なるタイミングであっても同一の値となる非表示属性項目となる。すなわち、検証対象非表示属性項目２６は、前述したセキュリティ上の問題を有する、あるいは有するおそれのある怪しい非表示属性項目に対応している。したがって、検証対象抽出装置１は、第１のメッセージデータ２０ａ、および第２のメッセージデータ２０ｂからウェブアプリケーションの検証対象を効率よく抽出可能とすることができる。これにより、検査者や開発者などの作業者の負担は、軽減される。
【００３１】
次に、第２の実施形態を詳細に説明する。図２は、第２の実施形態の検証対象抽出システムの構成例を示す図である。検証対象抽出システムは、検証対象抽出装置１００、ネットワーク５を介して接続するウェブサーバ２、プロキシサーバ３、およびクライアント４を含んで構成される。
【００３２】
ウェブサーバ２は、ウェブアプリケーション（構造化文書提供アプリケーション）４６を実装し、クライアント４からのリクエストに応じてウェブコンテンツを提供する。クライアント４は、ウェブブラウザを実装し、ウェブサーバ２からリクエストに対応したウェブコンテンツの提供を受けてウェブブラウザに表示等をおこなう。
【００３３】
ウェブサーバ２とクライアント４は、たとえば、インターネット技術を基盤とするネットワーク５で接続されて、ＨＴＴＰ、あるいはＨＴＴＰＳで通信をおこなう。このとき、リクエストデータは、クライアント４からウェブサーバ２へのリクエストに含まれるデータである。また、レスポンスデータは、ウェブサーバ２からクライアント４へのレスポンスに含まれるデータである。そして、メッセージデータは、クライアント４とウェブサーバ２との一連の通信（たとえば、１セッション）に含まれるリクエストデータとレスポンスデータである。
【００３４】
メッセージデータは、クライアント４とウェブサーバ２との一連の通信内容から取得することができるため、ウェブサーバ２、クライアント４のほかに、ウェブサーバ２とクライアント４との通信を中継するプロキシサーバ３によって取得することができる。なお、通信内容の取得は、プロキシサーバ３に限らず、ファイアーウォール、図示しないルータやスイッチなど、ウェブサーバ２とクライアント４との通信を中継する中継装置からのパケットキャプチャによってもすることができる。
【００３５】
なお通信プロトコルがＨＴＴＰＳなど暗号化された通信の場合、プロキシサーバ３は、ウェブサーバ２とクライアント４との間のＳＳＬ（Secure Sockets Layer）のセッションを２分割することで平文の通信内容を取得することができる。
【００３６】
検証対象抽出装置１００は、検証対象ｈｉｄｄｅｎフィールド抽出部３０と、ＨＴＴＰメッセージ列生成部５０を備える。検証対象抽出装置１００は、ＨＴＴＰメッセージ列生成部５０が生成するメッセージデータを入力として、検証対象ｈｉｄｄｅｎフィールド抽出部３０が検証対象のｈｉｄｄｅｎフィールドを抽出する。なお、ＨＴＴＰメッセージ列生成部５０は、クライアント４、ウェブサーバ２、プロキシサーバ３などに備えられるようにしてもよく、その場合、検証対象抽出装置１００は、クライアント４、ウェブサーバ２、プロキシサーバ３などが取得したメッセージデータを入力とすることができる。メッセージデータは、タイミングの異なる一連の通信（たとえば、タイミングの異なる２つのセッション）として少なくとも２つが取得される。
【００３７】
なお、検証対象抽出装置１００は、クライアント４、ウェブサーバ２、プロキシサーバ３のうち１つ以上の機能を兼ねるようにしてもよい。
なお、第２の実施形態では、検証対象抽出装置１００がクライアント４の備えるブラウザ機能を有するものとして説明する。
【００３８】
検証対象抽出装置１００のハードウェア構成例を説明する。図３は、第２の実施形態の検証対象抽出装置のハードウェア構成例を示す図である。検証対象抽出装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ）１０３、通信インタフェース１０４、グラフィック処理装置１０５、および入出力インタフェース１０６が接続されている。
【００３９】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムや、メッセージデータから検証対象を抽出するためのアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００４０】
通信インタフェース１０４は、ネットワーク５に接続されている。通信インタフェース１０４は、ネットワーク５を介して、他のコンピュータとの間でデータの送受信をおこなう。
【００４１】
グラフィック処理装置１０５には、モニタ１１０が接続されている。グラフィック処理装置１０５は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１０の画面に表示させる。
【００４２】
入出力インタフェース１０６には、キーボード１１１とマウス１１２とが接続されている。入出力インタフェース１０６は、キーボード１１１やマウス１１２から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。また、入出力インタフェース１０６は、外部記憶媒体１０８への情報の書込み、および外部記憶媒体１０８への情報の読出しが可能な外部記憶媒体インタフェースと接続可能になっている。
【００４３】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、ネットワーク５を介して接続する他のコンピュータ（たとえば、クライアント４、ウェブサーバ２、プロキシサーバ３など）も同様のハードウェア構成で実現できる。
【００４４】
次に、第２の実施形態の検証対象抽出装置１００が備える検証対象ｈｉｄｄｅｎフィールド抽出部３０について説明する。図４は、第２の実施形態の検証対象ｈｉｄｄｅｎフィールド抽出部の機能ブロック図である。
【００４５】
検証対象ｈｉｄｄｅｎフィールド抽出部３０は、検証対象抽出装置１００に備えられる。検証対象ｈｉｄｄｅｎフィールド抽出部３０は、２つのＨＴＴＰメッセージ列４０、４１を入力して、検証対象ｈｉｄｄｅｎフィールド集合４４を出力する。
【００４６】
ＨＴＴＰメッセージ列４０、４１は、検査対象のウェブアプリケーション４６を実装したウェブサーバ２とクライアント４のＨＴＴＰ通信における所定のリクエストデータと、リクエストデータに対応するレスポンスデータを時系列に整列したデータである。ＨＴＴＰメッセージ列４０とＨＴＴＰメッセージ列４１は、ウェブサーバ２とクライアント４のタイミングの異なる一連の通信（たとえば、異なるセッション）にもとづいて取得されたデータである。なお、ＨＴＴＰメッセージ列４０とＨＴＴＰメッセージ列４１は、ウェブサーバ２に接続するクライアント４を異ならせて取得したデータであってもよい。
【００４７】
所定のリクエストデータは、あらかじめ決められた操作情報にもとづいてＨＴＴＰクライアントを操作した際に生じたデータである。ＨＴＴＰメッセージ列４０とＨＴＴＰメッセージ列４１とでは、同様のリクエストデータとする。同様のリクエストデータとは、同じ操作情報にもとづいて、ＨＴＴＰクライアントを操作したときに得られるリクエストデータ同士のことである。
【００４８】
検証対象ｈｉｄｄｅｎフィールド集合４４は、レスポンスデータに含まれるｈｉｄｄｅｎフィールドのうち、ウェブアプリケーション４６のセキュリティ上の問題となり得るｈｉｄｄｅｎフィールドを検証対象として抽出したデータである。
【００４９】
なお、ＨＴＴＰメッセージ列４０とＨＴＴＰメッセージ列４１は、検証対象ｈｉｄｄｅｎフィールド抽出部３０の実行前に確定したものであってもよいし、実行中に順次入力されるストリームデータであってもよい。
【００５０】
検証対象ｈｉｄｄｅｎフィールド抽出部３０は、未入力ｈｉｄｄｅｎフィールド解析部３１と、リクエストパラメータ解析部３２と、ｈｉｄｄｅｎフィールド解析部３３と、重複ｈｉｄｄｅｎフィールド解析部３６を備える。また、検証対象ｈｉｄｄｅｎフィールド抽出部３０は、リクエストパラメータ値集合４２を記憶するリクエストパラメータ値記憶部３４と、未入力ｈｉｄｄｅｎフィールド集合４３を記憶する未入力ｈｉｄｄｅｎフィールド記憶部３５を備える。リクエストパラメータ値記憶部３４と未入力ｈｉｄｄｅｎフィールド記憶部３５は、たとえば、ＲＡＭ１０２で実現できる。なお、リクエストパラメータ値記憶部３４と未入力ｈｉｄｄｅｎフィールド記憶部３５は、データを記憶可能であればＲＡＭ１０２に限らず、ＨＤＤ１０３やその他の記憶装置、外部記憶媒体１０８、あるいはネットワーク５を介して記憶するものであってもよい。
【００５１】
未入力ｈｉｄｄｅｎフィールド解析部３１は、ＨＴＴＰメッセージ列４０、４１を順に解析し、ＨＴＴＰメッセージ列４０、４１からリクエストデータとレスポンスデータを抽出する。未入力ｈｉｄｄｅｎフィールド解析部３１は、リクエストデータをリクエストパラメータ解析部３２に渡す。未入力ｈｉｄｄｅｎフィールド解析部３１は、レスポンスデータをｈｉｄｄｅｎフィールド解析部３３に渡す。
【００５２】
リクエストパラメータ解析部３２は、リクエストデータからリクエストパラメータ値を抽出して未入力ｈｉｄｄｅｎフィールド解析部３１に渡す。未入力ｈｉｄｄｅｎフィールド解析部３１は、リクエストパラメータ値記憶部３４にリクエストパラメータ値をリクエストパラメータ値集合４２として記憶する。リクエストパラメータ値集合４２は、ＨＴＴＰメッセージ列４０にもとづくリクエストパラメータ値集合Ｐ１と、ＨＴＴＰメッセージ列４１にもとづくリクエストパラメータ値集合Ｐ２を含む。リクエストパラメータは、リクエストデータに含まれるパラメータであり、たとえば、ＵＲＬのクエリーパラメータや、ＰＯＳＴメソッドで送信されるフォームデータパラメータ、Ｃｏｏｋｉｅなどを含む。
【００５３】
ｈｉｄｄｅｎフィールド解析部３３は、レスポンスデータからｈｉｄｄｅｎフィールドを抽出して未入力ｈｉｄｄｅｎフィールド解析部３１に渡す。未入力ｈｉｄｄｅｎフィールド解析部３１は、リクエストパラメータ値集合４２を参照して、ｈｉｄｄｅｎフィールドの値がリクエストされた履歴を有するか否かを判定する。未入力ｈｉｄｄｅｎフィールド解析部３１は、ｈｉｄｄｅｎフィールドの値がリクエストされた履歴を有しない場合、そのｈｉｄｄｅｎフィールドは、未入力ｈｉｄｄｅｎフィールドと判定される。未入力ｈｉｄｄｅｎフィールド解析部３１は、未入力ｈｉｄｄｅｎフィールド記憶部３５に未入力ｈｉｄｄｅｎフィールドを未入力ｈｉｄｄｅｎフィールド集合４３として記憶する。未入力ｈｉｄｄｅｎフィールド集合４３は、ＨＴＴＰメッセージ列４０にもとづく未入力ｈｉｄｄｅｎフィールド集合Ｈ１と、ＨＴＴＰメッセージ列４１にもとづく未入力ｈｉｄｄｅｎフィールド集合Ｈ２を含む。
【００５４】
重複ｈｉｄｄｅｎフィールド解析部３６は、未入力ｈｉｄｄｅｎフィールド解析部３１が生成した未入力ｈｉｄｄｅｎフィールド集合４３を参照し、ＨＴＴＰメッセージ列４０、４１で重複する未入力ｈｉｄｄｅｎフィールドを抽出する。ここで、未入力ｈｉｄｄｅｎフィールド集合４３から抽出された未入力ｈｉｄｄｅｎフィールドを検証対象ｈｉｄｄｅｎフィールドとする。重複ｈｉｄｄｅｎフィールド解析部３６は、抽出した検証対象ｈｉｄｄｅｎフィールドを検証対象ｈｉｄｄｅｎフィールド集合４４として出力する。
【００５５】
これにより、検証対象ｈｉｄｄｅｎフィールド抽出部３０は、ＨＴＴＰメッセージ列４０、４１で重複して、リクエストされた履歴のない値を持つｈｉｄｄｅｎフィールドを検証対象として自動的に（判断する者の予断を排除して）抽出することができる。このようなｈｉｄｄｅｎフィールドは、セキュリティ上の問題を有するおそれがあり、検査者や開発者は、抽出されたｈｉｄｄｅｎフィールドを優先的に確認することができ、安全なウェブアプリケーションを効率的に開発することができる。
【００５６】
なお、検証対象ｈｉｄｄｅｎフィールド抽出部３０は、ＨＴＴＰメッセージ列４０、４１を入力としたが、ＨＴＴＰメッセージ列４０、４１からそれぞれ抽出したリクエストデータ、およびレスポンデータを入力としてもよい。
【００５７】
なお、ＨＴＴＰメッセージ列４０とＨＴＴＰメッセージ列４１とで同様のリクエストデータとするとしたが、必ずしも同様でなくともよい。たとえば、ＨＴＴＰメッセージ列４０とＨＴＴＰメッセージ列４１とのセキュリティ上問題となる可能性のあるｈｉｄｄｅｎフィールドの重複可能性が確率的に十分に大きいと判断できる場合は同様のリクエストデータとする要件を有しない。確率的に十分に大きいと判断できる場合とは、たとえば、検証対象となるウェブアプリケーションが提供するＨＴＭＬ文書などのリソースが検証範囲に対して十分な量で用意されている場合がある。重複可能性が十分か否かの判断は、たとえば、検証範囲に対する収集データの大きさや収集範囲を判断の閾値として設定することができる。
【００５８】
次に、第２の実施形態の検証対象抽出装置１００が備えるＨＴＴＰメッセージ列生成部５０について説明する。図５は、第２の実施形態のＨＴＴＰメッセージ列生成部の機能ブロック図である。
【００５９】
ＨＴＴＰメッセージ列生成部５０は、検証対象抽出装置１００に備えられる。ＨＴＴＰメッセージ列生成部５０は、ブラウザ操作スクリプト４５と、ウェブアプリケーション４６が提供するリソース（レスポンスデータ）を入力して、ＨＴＴＰメッセージ列４０、４１を検証対象ｈｉｄｄｅｎフィールド抽出部３０に出力する。そして、検証対象ｈｉｄｄｅｎフィールド抽出部３０は、ＨＴＴＰメッセージ列４０、４１を入力して、検証対象ｈｉｄｄｅｎフィールド集合４４を出力する。したがって、検証対象抽出装置１００は、ブラウザ操作スクリプト４５とウェブアプリケーション４６を入力して、検証対象ｈｉｄｄｅｎフィールド集合４４を出力する。
【００６０】
ここで、まず、ブラウザ操作スクリプト４５とウェブアプリケーション４６について、説明する。ブラウザ操作スクリプト４５は、ブラウザの操作内容のリストであり、所定の規則で記述される。ブラウザ操作スクリプト４５は、たとえば、図６に示すような、Ｓｅｌｅｎｉｕｍ ＲＣの入力主形態となるＳｅｌｅｎｅｓｅ形式と基礎ＵＲＬ（Uniform Resource Locator）を含んで構成される。Ｓｅｌｅｎｅｓｅ形式は、ブラウザの操作内容を記述したリストである。基礎ＵＲＬは、検査対象のウェブサーバとの通信プロトコル（scheme）、検査対象のウェブサーバ名（authority）を含み、たとえば、ｈｔｔｐ：／／ｅｘａｍｐｌｅ．ｃｏｍ／となる。なお、Ｓｅｌｅｎｉｕｍ ＲＣについては、たとえば、http://selenium-rc.openqa.org/に開示されている。
【００６１】
図６は、第２の実施形態のブラウザ操作スクリプトのＳｅｌｅｎｅｓｅ形式例を示す図である。ブラウザ操作スクリプト例７０に示すブラウザ操作スクリプト４５は、ｃｏｍｍａｎｄ、ｔａｒｇｅｔ、ｖａｌｕｅを要素とする。ブラウザ操作スクリプト例７０は、ブラウザ操作７１、７２、７３の操作順序が時系列に整列されたリストである。
【００６２】
ブラウザ操作７１（ｏｐｅｎ，／ｆｏｒｍ１，  ）は、「ＵＲＩ（Uniform Resource Identifier）が“／ｆｏｒｍ１”であるページをリクエストし、ページが読み込まれるまで待つ」という意味になる。
【００６３】
ブラウザ操作７２（ｔｙｐｅ，ｎａｍｅ，諸葛亮）は、「名前が“ｎａｍｅ”である入力欄に“諸葛亮”を入力する」という意味になる。
ブラウザ操作７３（ｃｌｉｃｋＡｎｄＷａｉｔ，／／ｉｎｐｕｔ［＠ｖａｌｕｅ＝‘送信’］，  ）は、「“ｖａｌｕｅ”属性を持つ“ｉｎｐｕｔ”タグを探し、これをクリックしてページが読み込まれるまで待つ」という意味になる。
【００６４】
ウェブアプリケーション４６は、クライアントからの要求に応じてウェブサーバがＨＴＭＬ文書などのリソースを提供するためのアプリケーションである。ウェブアプリケーション４６について、図７、図８を用いて説明する。図７、図８は、第２の実施形態のウェブアプリケーションが提供するＨＴＭＬ文書表示例を示す図である。
【００６５】
ウェブアプリケーション４６が提供するリソースは、たとえば、ＨＴＭＬ文書であり、ブラウザで閲覧するとＨＴＭＬ文書表示例７４、７６のようになる。ＨＴＭＬ文書表示例７４は、ＵＲＬ  ｈｔｔｐ：／／ｅｘａｍｐｌｅ．ｃｏｍ／ｆｏｒｍ１を開き、人物名の入力欄に“諸葛亮”と入力した様子を示す。ＨＴＭＬ文書表示例７６は、ＨＴＭＬ文書表示例７４の画面で送信ボタンを押下した後のレスポンスとして得られた表示画面の様子である。
【００６６】
ｈｉｄｄｅｎフィールド７５は、ＨＴＭＬ文書表示例７４に設定され、ブラウザ上に表示されないデータである。このとき、ｈｉｄｄｅｎフィールド７５は、たとえば、“ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”という値を持つ。
【００６７】
ｈｉｄｄｅｎフィールド７７は、ＨＴＭＬ文書表示例７６に設定され、ブラウザ上に表示されないデータである。このとき、ｈｉｄｄｅｎフィールド７７は、たとえば、“ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”、“ｎａｍｅ＝諸葛亮”、“ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ”という値を持つ。
【００６８】
このように、ウェブアプリケーション４６は、ｈｉｄｄｅｎフィールドを含むＨＴＭＬ文書等のリソースをＨＴＴＰメッセージ列生成部５０に提供する。
ここで、図５に戻り、ＨＴＴＰメッセージ列生成部５０について説明する。ＨＴＴＰメッセージ列生成部５０は、制御部５１、ブラウザ操作部５２、ブラウザ５３、ＨＴＴＰメッセージ列取得部５４、ＨＴＴＰメッセージ列記憶部５５を備える。
【００６９】
制御部５１は、ＨＴＴＰメッセージ列生成部５０を統括的に制御して、受け付けたブラウザ操作スクリプト４５にもとづくＨＴＴＰメッセージ列４０、４１を検証対象ｈｉｄｄｅｎフィールド抽出部に受け渡す。
【００７０】
ブラウザ操作部５２は、制御部５１が受け付けたブラウザ操作スクリプト４５にしたがいブラウザ５３を操作する。ブラウザ操作部５２は、たとえば、Ｓｅｌｅｎｉｕｍ ＲＣとすることができる。Ｓｅｌｅｎｉｕｍ ＲＣは、Ｓｅｌｅｎｅｓｅ形式と基礎ＵＲＬによるブラウザ操作スクリプト４５を解釈してブラウザ５３を操作する。
【００７１】
ブラウザ５３は、ウェブアプリケーション４６により提供されるリソースを閲覧するためのアプリケーションである。ブラウザ５３は、ウェブアプリケーション４６を実装するウェブサーバにリクエストを送信し、リクエストを受け付けたウェブサーバからレスポンスを受け取る。ブラウザ５３は、ブラウザ操作部５２によって操作可能であればよく、たとえば、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘを用いることができる。なお、ここでいうブラウザは、ウェブアプリケーション４６にリクエストをしてレスポンスを処理可能なＨＴＴＰクライアントであればよく、視覚系のユーザエージェントなど狭義のブラウザ（たとえば、ウェブブラウザ）に限るものではない。
【００７２】
ＨＴＴＰメッセージ列取得部５４は、ブラウザ５３とウェブアプリケーション４６の通信経路中に位置し、ブラウザ５３とウェブアプリケーション４６との通信からＨＴＴＰメッセージを取得する。ＨＴＴＰメッセージ列取得部５４は、取得したＨＴＴＰメッセージをＨＴＴＰメッセージ列記憶部５５に格納する。ＨＴＴＰメッセージ列取得部５４は、たとえば、ＨＴＴＰプロキシサーバとして実現できる。また、ＨＴＴＰメッセージ列記憶部５５は、ブラウザ５３とウェブアプリケーション４６のセッションをＨＴＴＰプロキシサーバの前後２つのセッションに分割することで、ＨＴＴＰＳ等の暗号化通信から平文を取得することができる。また、ＨＴＴＰメッセージ列取得部５４は、たとえば、パケットキャプチャによっても実現できる。
【００７３】
このように、ＨＴＴＰメッセージ列生成部５０は、用意されたブラウザ操作スクリプト４５を受け付けることにより、ブラウザ操作スクリプト４５で巡回範囲とされたページをブラウザ５３が取得する際の、通信に含まれるリクエストデータとレスポンスデータを含むＨＴＴＰメッセージ列を取得することができる。ＨＴＴＰメッセージ列生成部５０は、このようなＨＴＴＰメッセージ列を２組（ＨＴＴＰメッセージ列４０、４１）生成する。
【００７４】
こうして生成されたＨＴＴＰメッセージ列４０、４１は、検証対象ｈｉｄｄｅｎフィールド抽出部３０に受け渡される。検証対象ｈｉｄｄｅｎフィールド抽出部３０は、ＨＴＴＰメッセージ列４０、４１から、セキュリティ上の問題を有する、あるいは有するおそれのある検証対象ｈｉｄｄｅｎフィールド集合４４を抽出する。
【００７５】
なお、ＨＴＴＰメッセージ列生成部５０は、検証対象ｈｉｄｄｅｎフィールド抽出部３０を備える検証対象抽出装置１００とは、別のコンピュータに備えられるようにしてもよい。たとえば、ＨＴＴＰメッセージ列生成部５０は、図２で説明したウェブサーバ２、プロキシサーバ３、クライアント４に備えることができる。ＨＴＴＰメッセージ列生成部５０が生成したＨＴＴＰメッセージ列４０、４１は、ネットワーク５を介して検証対象ｈｉｄｄｅｎフィールド抽出部３０を備える検証対象抽出装置１００に受け渡すことができる。あるいは、ＨＴＴＰメッセージ列４０、４１は、外部記憶媒体１０８を介して検証対象抽出装置１００に受け渡すことができる。
【００７６】
次に、制御部５１が実行するＨＴＴＰメッセージ列生成制御処理についてフローチャートを用いて詳細に説明する。図９は、第２の実施形態のＨＴＴＰメッセージ列生成制御処理のフローチャートである。ＨＴＴＰメッセージ列生成制御処理は、制御部５１が実行する処理であり、たとえば、操作者からの実行指示を受けて実行される。
【００７７】
［ステップＳ１１］制御部５１は、ブラウザ操作スクリプト４５の入力を受け付ける。
［ステップＳ１２］制御部５１は、ＨＴＴＰメッセージ列取得部５４が取得するＨＴＴＰメッセージ列を、第１のＨＴＴＰメッセージ列（ＨＴＴＰメッセージ列４０）の記憶領域（第１のＨＴＴＰメッセージ列記憶領域）に記憶するようＨＴＴＰメッセージ列取得部５４に指示する。第１のＨＴＴＰメッセージ列記憶領域は、ＨＴＴＰメッセージ列記憶部５５に設定される。
【００７８】
［ステップＳ１３］制御部５１は、ブラウザ５３とウェブアプリケーション４６との通信がＨＴＴＰメッセージ列取得部５４を経由するように指示する。たとえば、制御部５１は、ブラウザ５３のプロキシサーバの設定をおこなう。そして、制御部５１は、ブラウザ操作部５２にブラウザ操作スクリプト４５の実行を指示する。
【００７９】
［ステップＳ１４］制御部５１は、ブラウザ操作スクリプト４５にもとづく一連のブラウザ操作の終了を監視して、第１のＨＴＴＰメッセージ列の記憶の終了をＨＴＴＰメッセージ列取得部５４に指示する。
【００８０】
［ステップＳ１５］制御部５１は、ＨＴＴＰメッセージ列取得部５４が取得するＨＴＴＰメッセージ列を、第２のＨＴＴＰメッセージ列（ＨＴＴＰメッセージ列４１）の記憶領域（第２のＨＴＴＰメッセージ列記憶領域）に記憶するようＨＴＴＰメッセージ列取得部５４に指示する。第２のＨＴＴＰメッセージ列記憶領域は、ＨＴＴＰメッセージ列記憶部５５に設定される。
【００８１】
［ステップＳ１６］制御部５１は、ブラウザ５３とウェブアプリケーション４６との通信がＨＴＴＰメッセージ列取得部５４を経由するように指示する。たとえば、制御部５１は、ブラウザ５３のプロキシサーバの設定をおこなう。そして、制御部５１は、ブラウザ操作部５２にブラウザ操作スクリプト４５の実行を指示する。
【００８２】
［ステップＳ１７］制御部５１は、ブラウザ操作スクリプト４５にもとづく一連のブラウザ操作の終了を監視して、第２のＨＴＴＰメッセージ列の記憶の終了をＨＴＴＰメッセージ列取得部５４に指示する。
【００８３】
［ステップＳ１８］制御部５１は、第１のＨＴＴＰメッセージ列の記憶領域と第２のＨＴＴＰメッセージ列の記憶領域を、検証対象ｈｉｄｄｅｎフィールド抽出部３０に通知して、ＨＴＴＰメッセージ列４０、４１の入力を指示する。制御部５１は、ＨＴＴＰメッセージ列生成制御処理を終了する。
【００８４】
次に、ＨＴＴＰメッセージ列取得部５４が実行するＨＴＴＰメッセージ列取得処理についてフローチャートを用いて詳細に説明する。図１０は、第２の実施形態のＨＴＴＰメッセージ列取得処理のフローチャートである。ＨＴＴＰメッセージ列取得処理は、ＨＴＴＰメッセージ列取得部５４が実行する処理であり、制御部５１の指示を受けて実行される。
【００８５】
［ステップＳ２１］ＨＴＴＰメッセージ列取得部５４は、制御部５１からＨＴＴＰメッセージ列を記憶する記憶領域の指示を受け付ける。
［ステップＳ２２］ＨＴＴＰメッセージ列取得部５４は、制御部５１から終了指示がない限りステップＳ２２からステップＳ２９までの処理を繰り返す。
【００８６】
［ステップＳ２３］ＨＴＴＰメッセージ列取得部５４は、ウェブアプリケーション４６へのリクエストをブラウザ５３から受け付ける。
［ステップＳ２４］ＨＴＴＰメッセージ列取得部５４は、制御部５１からの指示にもとづいてＨＴＴＰメッセージ列記憶部５５にＨＴＴＰメッセージ列記憶領域を確保する。
【００８７】
［ステップＳ２５］ＨＴＴＰメッセージ列取得部５４は、ブラウザ５３からウェブアプリケーション４６へのリクエストを確保したＨＴＴＰメッセージ列記憶領域に記憶する。
［ステップＳ２６］ＨＴＴＰメッセージ列取得部５４は、プロキシサーバとしてブラウザ５３から受け付けたリクエストを加工（たとえば、Connection ヘッダフィールドの変更）してウェブアプリケーション４６に送信する。また、ＨＴＴＰメッセージ列取得部５４は、ウェブアプリケーション４６から受け付けたレスポンスを加工（たとえば、Connection ヘッダフィールドの変更）する。
【００８８】
［ステップＳ２７］ＨＴＴＰメッセージ列取得部５４は、確保したＨＴＴＰメッセージ列記憶領域に、ブラウザ５３へのレスポンスと、レスポンスを受け付けた時刻を記憶する。
【００８９】
［ステップＳ２８］ＨＴＴＰメッセージ列取得部５４は、加工したレスポンスをブラウザ５３に送信する。
［ステップＳ２９］ＨＴＴＰメッセージ列取得部５４は、制御部５１から終了指示がなければステップＳ２２にすすみ、制御部５１から終了指示があればＨＴＴＰメッセージ列取得処理の実行を終了する。
【００９０】
ＨＴＴＰメッセージ列取得部５４は、ＨＴＴＰメッセージ列４０、４１のそれぞれの取得について、ＨＴＴＰメッセージ列取得処理を実行する。制御部５１の指示にもとづくＨＴＴＰメッセージ列取得処理の２回の実行により、第１のＨＴＴＰメッセージ列は、第１のＨＴＴＰメッセージ列記憶領域に記憶され、第２のＨＴＴＰメッセージ列は、第２のＨＴＴＰメッセージ列記憶領域に記憶される。これにより、ＨＴＴＰメッセージ列取得部５４は、ＨＴＴＰメッセージ列４０、４１を取得する。
【００９１】
次に、ＨＴＴＰメッセージ列取得部５４が取得したＨＴＴＰメッセージ列４０（第１のＨＴＴＰメッセージ列）、ＨＴＴＰメッセージ列４１（第２のＨＴＴＰメッセージ列）について図１１から図１４を用いて説明する。図１１、図１２は、第２の実施形態の第１のＨＴＴＰメッセージ列の一例を示す図である。図１３、図１４は、第２の実施形態の第２のＨＴＴＰメッセージ列の一例を示す図である。
【００９２】
ＨＴＴＰメッセージ列７８は、第１のＨＴＴＰメッセージ列の一例である。ＨＴＴＰメッセージ列７８は、記憶領域ＩＤ（記憶領域識別子）、リクエストと、レスポンスと、時刻をアクセス単位（リクエストと、そのリクエストに対するレスポンスの対）で列挙する。ＨＴＴＰメッセージ列７８は、２つのアクセス単位を列挙し、１つ目のアクセス単位は記憶領域ＩＤを“Ｍ１−Ａ”、２つ目のアクセス単位は記憶領域ＩＤを“Ｍ１−Ｂ”とする。各アクセス単位は、記憶領域ＩＤに対応する記憶領域に記憶される。なお、ＨＴＴＰメッセージ列に含まれるアクセス単位の数は、例示した２つに限らず任意の値を取ることができる。
【００９３】
ＨＴＴＰメッセージ列７８の１つ目のアクセス単位に含まれるリクエストは、一部を省略記載するが、リクエストパラメータを含まない。ＨＴＴＰメッセージ列７８の１つ目のアクセス単位に含まれるレスポンスは、ｈｉｄｄｅｎフィールド情報７９を含む。ＨＴＴＰメッセージ列７８の１つ目のアクセス単位の時刻は、レスポンスに記録された時刻をＩＳＯ８６０１形式で表す。
【００９４】
ＨＴＴＰメッセージ列７８の２つ目のアクセス単位に含まれるリクエストは、一部を省略記載するが、リクエストパラメータ値８０、８１を含む。ＨＴＴＰメッセージ列７８の２つ目のアクセス単位に含まれるレスポンスは、ｈｉｄｄｅｎフィールド情報８２、８３、８４を含む。ＨＴＴＰメッセージ列７８の２つ目のアクセス単位の時刻は、レスポンスに記録された時刻をＩＳＯ８６０１形式で表す。
【００９５】
ＨＴＴＰメッセージ列８５は、第２のＨＴＴＰメッセージ列の一例である。ＨＴＴＰメッセージ列８５は、記憶領域ＩＤ、リクエストと、レスポンスと、時刻をアクセス単位で列挙する。ＨＴＴＰメッセージ列８５は、２つのアクセス単位を列挙し、１つ目のアクセス単位は記憶領域ＩＤを“Ｍ２−Ａ”、２つ目のアクセス単位は記憶領域ＩＤを“Ｍ２−Ｂ”とする。各アクセス単位は、記憶領域ＩＤに対応する記憶領域に記憶される。
【００９６】
ＨＴＴＰメッセージ列８５の１つ目のアクセス単位に含まれるリクエストは、一部を省略記載するが、リクエストパラメータを含まない。ＨＴＴＰメッセージ列８５の１つ目のアクセス単位に含まれるレスポンスは、ｈｉｄｄｅｎフィールド情報８６を含む。ＨＴＴＰメッセージ列８５の１つ目のアクセス単位の時刻は、レスポンスに記録された時刻をＩＳＯ８６０１形式で表す。
【００９７】
ＨＴＴＰメッセージ列８５の２つ目のアクセス単位に含まれるリクエストは、一部を省略記載するが、リクエストパラメータ値８７、８８を含む。ＨＴＴＰメッセージ列８５の２つ目のアクセス単位に含まれるレスポンスは、ｈｉｄｄｅｎフィールド情報８９、９０、９１を含む。ＨＴＴＰメッセージ列８５の２つ目のアクセス単位の時刻は、レスポンスに記録された時刻をＩＳＯ８６０１形式で表す。
【００９８】
なお、複数のリクエストを受ける順序とリクエストに対応するレスポンスを返す順序とが必ずしも同じであるとは限らないので、順序が異なる場合には、ＨＴＴＰメッセージ列取得部５４が時刻順に整列して記憶することができる。
【００９９】
次に、ＨＴＴＰメッセージ列４０、４１を入力とする検証対象ｈｉｄｄｅｎフィールド抽出部３０の未入力ｈｉｄｄｅｎフィールド解析部３１が実行する処理を図１５、図１６を用いて詳細に説明する。図１５は、第２の実施形態の未入力ｈｉｄｄｅｎフィールド解析処理のフローチャートである。図１６は、第２の実施形態の未入力ｈｉｄｄｅｎフィールド抽出処理のフローチャートである。
【０１００】
まず、未入力ｈｉｄｄｅｎフィールド解析処理について説明する。未入力ｈｉｄｄｅｎフィールド解析処理は、ＨＴＴＰメッセージ列４０、４１を入力として、未入力ｈｉｄｄｅｎフィールド集合を出力とする。
【０１０１】
［ステップＳ３１］未入力ｈｉｄｄｅｎフィールド解析部３１は、相互に比較対象となる２つのＨＴＴＰメッセージ列４０、４１の各記憶領域を受け付ける。
［ステップＳ３２］未入力ｈｉｄｄｅｎフィールド解析部３１は、ＨＴＴＰメッセージ列４０（第１のＨＴＴＰメッセージ列）を解析対象として指定する。
【０１０２】
［ステップＳ３３］未入力ｈｉｄｄｅｎフィールド解析部３１は、ＨＴＴＰメッセージ列４０を解析対象として、未入力ｈｉｄｄｅｎフィールド抽出処理を実行する。未入力ｈｉｄｄｅｎフィールド抽出処理の詳細は、図１６を用いて後で説明する。
【０１０３】
［ステップＳ３４］未入力ｈｉｄｄｅｎフィールド解析部３１は、ＨＴＴＰメッセージ列４１（第２のＨＴＴＰメッセージ列）を解析対象として指定する。
［ステップＳ３５］未入力ｈｉｄｄｅｎフィールド解析部３１は、ＨＴＴＰメッセージ列４１を解析対象として、未入力ｈｉｄｄｅｎフィールド抽出処理を実行する。
【０１０４】
これにより、ＨＴＴＰメッセージ列４０、４１から、未入力ｈｉｄｄｅｎフィールド集合が生成される。
なお、ＨＴＴＰメッセージ列４０、あるいは、ＨＴＴＰメッセージ列４１を入力とする未入力ｈｉｄｄｅｎフィールド抽出処理を直列的に実行する場合について説明したが、２つの処理を同時並行的に実行するようにしてもよい。
【０１０５】
次に、未入力ｈｉｄｄｅｎフィールド抽出処理について説明する。未入力ｈｉｄｄｅｎフィールド抽出処理は、ＨＴＴＰメッセージ列４０、４１を入力して、未入力ｈｉｄｄｅｎフィールド集合４４を出力する。
【０１０６】
［ステップＳ４１］未入力ｈｉｄｄｅｎフィールド解析部３１は、指定されたＨＴＴＰメッセージ列に対応する記憶領域に、リクエストパラメータ値集合と未入力ｈｉｄｄｅｎフィールド集合を用意する。
【０１０７】
たとえば、指定されたＨＴＴＰメッセージ列がＨＴＴＰメッセージ列４０のとき、未入力ｈｉｄｄｅｎフィールド解析部３１は、リクエストパラメータ値集合Ｐ１と未入力ｈｉｄｄｅｎフィールド集合Ｈ１を用意する。リクエストパラメータ値記憶部３４は、リクエストパラメータ値集合Ｐ１をリクエストパラメータ値集合４２の部分集合として記憶する。未入力ｈｉｄｄｅｎフィールド記憶部３５は、未入力ｈｉｄｄｅｎフィールド集合Ｈ１を未入力ｈｉｄｄｅｎフィールド集合４３の部分集合として記憶する。また、指定されたＨＴＴＰメッセージ列がＨＴＴＰメッセージ列４１のとき、未入力ｈｉｄｄｅｎフィールド解析部３１は、リクエストパラメータ値集合Ｐ２と未入力ｈｉｄｄｅｎフィールド集合Ｈ２を用意する。リクエストパラメータ値記憶部３４は、リクエストパラメータ値集合Ｐ２をリクエストパラメータ値集合４２の部分集合として記憶する。未入力ｈｉｄｄｅｎフィールド記憶部３５は、未入力ｈｉｄｄｅｎフィールド集合Ｈ２を未入力ｈｉｄｄｅｎフィールド集合４３の部分集合として記憶する。このとき、リクエストパラメータ値集合Ｐ１、Ｐ２、未入力ｈｉｄｄｅｎフィールド集合Ｈ１、Ｈ２は、空集合となる。
【０１０８】
［ステップＳ４２］未入力ｈｉｄｄｅｎフィールド解析部３１は、ＨＴＴＰメッセージ列に含まれるアクセス単位の数だけステップＳ４２からステップＳ５２までの処理を繰り返し実行する。ＨＴＴＰメッセージ列７８の例では、記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位と、記憶領域ＩＤが“Ｍ１−Ｂ”のアクセス単位について、未入力ｈｉｄｄｅｎフィールド解析部３１は、２回の繰り返し処理を実行する。
【０１０９】
［ステップＳ４３］未入力ｈｉｄｄｅｎフィールド解析部３１は、解析対象のＨＴＴＰメッセージ列をＨＴＴＰメッセージ列記憶部５５から読み込む。ＨＴＴＰメッセージ列７８の例では、未入力ｈｉｄｄｅｎフィールド解析部３１は、１回目の繰り返し処理で記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位のＨＴＴＰメッセージ列を読み込む。そして、未入力ｈｉｄｄｅｎフィールド解析部３１は、２回目の繰り返し処理で記憶領域ＩＤが“Ｍ１−Ｂ”のアクセス単位のＨＴＴＰメッセージ列を読み込む。
【０１１０】
［ステップＳ４４］未入力ｈｉｄｄｅｎフィールド解析部３１は、読み込んだメッセージ列を指定して、リクエストパラメータ解析部３２にリクエストパラメータ値の抽出を指示する。リクエストパラメータ解析部３２は、指定されたメッセージ列からリクエストパラメータ値を抽出する。記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位のＨＴＴＰメッセージ列の例ではリクエストパラメータ値が１つも含まれないため、リクエストパラメータ値は、抽出されない（図１１参照）。
【０１１１】
［ステップＳ４５］未入力ｈｉｄｄｅｎフィールド解析部３１は、リクエストパラメータ解析部３２が抽出したリクエストパラメータ値をリクエストパラメータ値記憶部３４に記憶するリクエストパラメータ値集合４２に追加する。記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位のＨＴＴＰメッセージ列の例ではリクエストパラメータ値が１つも含まれないため、リクエストパラメータ値は、追加されない。
【０１１２】
［ステップＳ４６］未入力ｈｉｄｄｅｎフィールド解析部３１は、読み込んだメッセージ列を指定して、ｈｉｄｄｅｎフィールド解析部３３にｈｉｄｄｅｎフィールド情報の抽出を指示する。ｈｉｄｄｅｎフィールド解析部３３は、指定されたメッセージ列からｈｉｄｄｅｎフィールド情報を抽出する。記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位のＨＴＴＰメッセージ列の例ではｈｉｄｄｅｎフィールド情報７９が含まれるため、ｈｉｄｄｅｎフィールド情報７９が抽出される（図１１参照）。より具体的には、ｈｉｄｄｅｎフィールド情報７９は、“ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”として抽出される。
【０１１３】
［ステップＳ４７］未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ４６で抽出したｈｉｄｄｅｎフィールド情報のうち、未選択のｈｉｄｄｅｎフィールド情報がなくなるまでステップＳ４７からステップＳ５１までの処理を繰り返し実行する。記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位のＨＴＴＰメッセージ列から抽出したｈｉｄｄｅｎフィールド情報の例では、ｈｉｄｄｅｎフィールド情報７９が１つだけ含まれるためステップＳ４７からステップＳ５１までの処理が１回だけ実行される。
【０１１４】
［ステップＳ４８］未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ４６で抽出したｈｉｄｄｅｎフィールド情報のうち、未選択のｈｉｄｄｅｎフィールド情報を選択する。記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位のＨＴＴＰメッセージ列から抽出したｈｉｄｄｅｎフィールド情報の例では、ｈｉｄｄｅｎフィールド情報７９が選択される。
【０１１５】
［ステップＳ４９］未入力ｈｉｄｄｅｎフィールド解析部３１は、選択したｈｉｄｄｅｎフィールド情報の値がリクエストパラメータ値集合４２に含まれているか否かを判定する。選択したｈｉｄｄｅｎフィールド情報の値がリクエストパラメータ値集合４２に含まれている場合、未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ５１にすすむ。一方、選択したｈｉｄｄｅｎフィールド情報の値がリクエストパラメータ値集合４２に含まれていない場合、未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ５０にすすむ。ｈｉｄｄｅｎフィールド情報７９の例では、リクエストパラメータ値集合４２の部分集合であるリクエストパラメータ値集合Ｐ１にｈｉｄｄｅｎフィールド情報７９の値が含まれないため、未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ５０にすすむ。
【０１１６】
［ステップＳ５０］未入力ｈｉｄｄｅｎフィールド解析部３１は、未だリクエストされた履歴のないｈｉｄｄｅｎフィールド情報を、未入力ｈｉｄｄｅｎフィールド記憶部３５に記憶する未入力ｈｉｄｄｅｎフィールド集合４３に追加する。ｈｉｄｄｅｎフィールド情報７９の例では、ｈｉｄｄｅｎフィールド情報７９は、未入力ｈｉｄｄｅｎフィールド記憶部３５に記憶する未入力ｈｉｄｄｅｎフィールド集合４３の部分集合である未入力ｈｉｄｄｅｎフィールド集合Ｈ１に追加される。これにより、未入力ｈｉｄｄｅｎフィールド集合Ｈ１は、｛ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１（Ｍ１−Ａ）｝となる。なお、未入力ｈｉｄｄｅｎフィールド集合の要素は、“Ｍ１−Ａ”のようにアクセス単位を識別する情報を付加するようにしてもよい。
【０１１７】
［ステップＳ５１］未入力ｈｉｄｄｅｎフィールド解析部３１は、未選択のｈｉｄｄｅｎフィールド情報がなければステップＳ５２にすすみ、未選択のｈｉｄｄｅｎフィールド情報があればステップＳ４７にすすむ。
【０１１８】
［ステップＳ５２］未入力ｈｉｄｄｅｎフィールド解析部３１は、未読のＨＴＴＰメッセージ列があればステップＳ４２にすすみ、未読のＨＴＴＰメッセージ列がなければ未入力ｈｉｄｄｅｎフィールド抽出処理を終了する。
【０１１９】
ＨＴＴＰメッセージ列７８の例では、記憶領域ＩＤが“Ｍ１−Ａ”のアクセス単位についてステップＳ４２からステップＳ５２の処理を実行した後、記憶領域ＩＤが“Ｍ１−Ｂ”のアクセス単位についてもステップＳ４２からステップＳ５２の処理を実行する。このとき、未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ４３（２回目の繰り返し処理）で、記憶領域ＩＤが“Ｍ１−Ｂ”のアクセス単位のＨＴＴＰメッセージ列を読み込む。そして、リクエストパラメータ解析部３２は、ステップＳ４４で、記憶領域ＩＤが“Ｍ１−Ｂ”のアクセス単位のＨＴＴＰメッセージ列からリクエストパラメータ値８０、８１を抽出する（図１２参照）。より具体的には、リクエストパラメータ値８０は、“ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”として抽出される。そして、リクエストパラメータ値８１は、“ｎａｍｅ＝％Ｅ８％ＡＢ％Ｂ８％Ｅ８％９１％９Ｂ％Ｅ４％ＢＡ％ＡＥ”として抽出される。
【０１２０】
抽出されたリクエストパラメータ値８０、８１は、リクエストパラメータ値集合４２に追加される。このとき、第１のＨＴＴＰメッセージ列にもとづくリクエストパラメータ値８０、８１は、リクエストパラメータ値集合４２の部分集合となるリクエストパラメータ値集合Ｐ１に追加される。また、エンコードされているリクエストパラメータ値は、デコードされて追加する。より具体的には、エンコードされた値“％Ｅ８％ＡＢ％Ｂ８％Ｅ８％９１％９Ｂ％Ｅ４％ＢＡ％ＡＥ”は、デコードされた値“諸葛亮”として追加される。これにより、リクエストパラメータ値集合Ｐ１は、｛１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１、諸葛亮｝となる。なお、リクエストパラメータ値集合４２へのリクエストパラメータ値の追加は、エンコードされている値としてもよいし、エンコードされた値とデコードされた値の両方としてもよい。
【０１２１】
未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ４６で、記憶領域ＩＤが“Ｍ１−Ｂ”のアクセス単位のＨＴＴＰメッセージ列を指定して、ｈｉｄｄｅｎフィールド解析部３３にｈｉｄｄｅｎフィールド情報の抽出を指示する。ｈｉｄｄｅｎフィールド解析部３３は、ｈｉｄｄｅｎフィールド情報８２、８３、８４を抽出する（図１２参照）。より具体的には、ｈｉｄｄｅｎフィールド情報８２は、“ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”として抽出される。ｈｉｄｄｅｎフィールド情報８３は、“ｎａｍｅ＝諸葛亮”として抽出される。ｈｉｄｄｅｎフィールド情報８４は、“ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ”として抽出される。未入力ｈｉｄｄｅｎフィールド解析部３１は、抽出したｈｉｄｄｅｎフィールド情報８２、８３、８４についてステップＳ４７からステップＳ５１までの処理を繰り返し実行する。
【０１２２】
未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ４８で、たとえば、ｈｉｄｄｅｎフィールド情報８２を選択する。未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ４９で、ｈｉｄｄｅｎフィールド情報８２の値“１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”がリクエストパラメータ値集合Ｐ１に含まれているかを判定する。ｈｉｄｄｅｎフィールド情報８２の値“１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１”は、リクエストパラメータ値集合Ｐ１に含まれているので、未入力ｈｉｄｄｅｎフィールド解析部３１は、ステップＳ５１にすすむ。ｈｉｄｄｅｎフィールド情報８２は、未入力ｈｉｄｄｅｎフィールド集合Ｈ１に追加されない。同様にして、ｈｉｄｄｅｎフィールド情報８３の値“諸葛亮”は、未入力ｈｉｄｄｅｎフィールド集合Ｈ１に追加されず、ｈｉｄｄｅｎフィールド情報８４の値“ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ”は、未入力ｈｉｄｄｅｎフィールド集合Ｈ１に追加される。これにより、未入力ｈｉｄｄｅｎフィールド集合Ｈ１は、｛ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１（Ｍ１−Ａ）、ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ（Ｍ１−Ｂ）｝となる。
【０１２３】
ＨＴＴＰメッセージ列７８、８５の例について、未入力ｈｉｄｄｅｎフィールド解析処理を実行した結果を、図１７から図１９に示す。図１７は、第２の実施形態のリクエストパラメータ値集合の一例を示す図である。図１８は、第２の実施形態の未入力ｈｉｄｄｅｎフィールド集合の一例を示す図である。図１９は、第２の実施形態の検証対象ｈｉｄｄｅｎフィールド集合の一例を示す図である。
【０１２４】
リクエストパラメータ値集合９２は、部分集合であるリクエストパラメータ値集合Ｐ１（識別名Ｐ１）と、部分集合であるリクエストパラメータ値集合Ｐ２（識別名Ｐ２）を含む。リクエストパラメータ値集合Ｐ１は、第１のＨＴＴＰメッセージ列にもとづくリクエストパラメータ値の集合であり、集合データ｛１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１、諸葛亮｝を含む。リクエストパラメータ値集合Ｐ２は、第２のＨＴＴＰメッセージ列にもとづくリクエストパラメータ値の集合であり、集合データ｛２Ａ１００Ｄ３Ｃ８４ＢＣ６Ｅ９２、諸葛亮｝を含む。なお、各集合要素にいずれのＨＴＴＰメッセージ列に含まれたのかを識別する識別情報を付加することで、リクエストパラメータ値集合Ｐ１、Ｐ２を１つの集合としてもよい。
【０１２５】
未入力ｈｉｄｄｅｎフィールド集合９３は、部分集合である未入力ｈｉｄｄｅｎフィールド集合Ｈ１（識別名Ｈ１）と、部分集合である未入力ｈｉｄｄｅｎフィールド集合Ｈ２（識別名Ｈ２）を含む。未入力ｈｉｄｄｅｎフィールド集合Ｈ１は、第１のＨＴＴＰメッセージ列にもとづく未入力ｈｉｄｄｅｎフィールド情報の集合である。未入力ｈｉｄｄｅｎフィールド集合Ｈ１は、集合データ｛ｉｄ＝１Ｅ４ＤＣ００Ｄ４７６ＡＢＤＦ１（Ｍ１−Ａ）、ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ（Ｍ１−Ｂ）｝を含む。未入力ｈｉｄｄｅｎフィールド集合Ｈ２は、第２のＨＴＴＰメッセージ列にもとづく未入力ｈｉｄｄｅｎフィールド情報の集合である。未入力ｈｉｄｄｅｎフィールド集合Ｈ２は、集合データ｛ｉｄ＝２Ａ１００Ｄ３Ｃ８４ＢＣ６Ｅ９２（Ｍ２−Ａ）、ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ（Ｍ２−Ｂ）｝を含む。なお、各集合要素にいずれのＨＴＴＰメッセージ列に含まれたのかを識別する識別情報を付加することで、未入力ｈｉｄｄｅｎフィールド集合Ｈ１、Ｈ２を１つの集合としてもよい。
【０１２６】
なお、リクエストパラメータ値集合９２と未入力ｈｉｄｄｅｎフィールド集合９３は、必ずしも数学的な意味の集合でなくてもよい。たとえば、リクエストパラメータ値集合９２と未入力ｈｉｄｄｅｎフィールド集合９３、同一のデータの重複を許すリストや、データ群などであってもよい。また、リクエストパラメータ値集合９２を記憶するリクエストパラメータ値記憶部３４と、未入力ｈｉｄｄｅｎフィールド集合９３を記憶する未入力ｈｉｄｄｅｎフィールド記憶部３５を区別せず、データに識別情報を付加して共通の記憶部に記憶するようにしてもよい。
【０１２７】
このようにして生成されたリクエストパラメータ値集合９２と未入力ｈｉｄｄｅｎフィールド集合９３を重複ｈｉｄｄｅｎフィールド解析部３６が参照して、検証対象ｈｉｄｄｅｎフィールド集合９４が抽出される。重複ｈｉｄｄｅｎフィールド解析部３６は、未入力ｈｉｄｄｅｎフィールド集合Ｈ１、Ｈ２で重複するｈｉｄｄｅｎフィールド（積集合）｛ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ｝を検証対象ｈｉｄｄｅｎフィールドとして抽出する。なお、例示したリクエストパラメータ値集合９２は、１つの要素しか含まないが、入力データによっては、当然に複数の要素を有し得る。
【０１２８】
重複ｈｉｄｄｅｎフィールド解析部３６は、ｈｉｄｄｅｎフィールドの検証の便宜のために付加情報を併せて出力する。付加情報は、該当する（検証対象ｈｉｄｄｅｎフィールドの抽出元となる）ＨＴＴＰメッセージの記憶場所を特定する情報（たとえば、“Ｍ１−Ｂ”、“Ｍ２−Ｂ”）を含む。ＨＴＴＰメッセージの記憶場所を特定する情報は、ＨＴＴＰメッセージを特定する識別情報などであってもよい。また、付加情報は、該当するＨＴＴＰリクエストのメソッドとＵＲＩ（たとえば、“ＧＥＴ  ｈｔｔｐ：／／ｅｘａｍｐｌｅ．ｃｏｍ／ｆｏｒｍ１”）を含むことができる。該当するＨＴＴＰリクエストのメソッドとＵＲＩは、記憶されているＨＴＴＰメッセージから取得することができる。
【０１２９】
また、重複ｈｉｄｄｅｎフィールド解析部３６は、検証対象ｈｉｄｄｅｎフィールドを検証対象とする優先度情報を付加情報としてもよい。優先度情報は、検証対象として提示された検証対象ｈｉｄｄｅｎフィールド集合４４を後段の処理が実際に検証対象として採用するか否かの判断に用いるための情報である。検証対象ｈｉｄｄｅｎフィールド集合４４の抽出後におこなうｈｉｄｄｅｎフィールドの検証は、検証対象ｈｉｄｄｅｎフィールド集合４４の各要素に付加された優先度情報を参照することで、資源に制約がある場合に、より効率化される。
【０１３０】
優先度情報は、たとえば、検証対象ｈｉｄｄｅｎフィールドの名前や値など検証対象ｈｉｄｄｅｎフィールドが含む情報を評価して得られる情報である。たとえば、重複ｈｉｄｄｅｎフィールド解析部３６は、あらかじめ文字列（狭義の文字列に限定されず、数その他の情報を含む）と、文字列の評価値とを登録する評価基準情報を備える。重複ｈｉｄｄｅｎフィールド解析部３６は、検証対象ｈｉｄｄｅｎフィールドに含まれる文字列を評価基準情報に登録してある文字列を探索して評価値を算出する。より具体的な評価基準情報の一例を以下に挙げる。
【０１３１】
（１）ｈｉｄｄｅｎフィールド情報が名前に“ｆｒｏｍ”、“ｔｏ”、“ｈｏｓｔ”、“ｐｏｒｔ”、“ｆｉｌｅ”、“ＰＡＴＨ”、“ＣＯＭＭＡＮＤ”、“ＣＭＤ”、“ＱＵＥＲＹ”、“ＳＱＬ”を含む場合は、評価値を１加算する。なお、名前に所定の文字または文字列を含むかどうかの判定では大文字と小文字は区別しない。
【０１３２】
（２）ｈｉｄｄｅｎフィールド情報が名前に“ｉｄ”を含む場合は、評価値を１減算する。なお、名前に所定の文字または文字列を含むかどうかの判定では大文字と小文字は区別しない。
【０１３３】
（３）ｈｉｄｄｅｎフィールド情報が値に“．（ドット）”、“／（スラッシュ）”、“￥（円記号、バックスラッシュ）”を含む場合は、１加算する。
これにより、たとえば、検証対象ｈｉｄｄｅｎフィールド｛ｔｏ＝ａｄｍｉｎ＠ｅｘａｍｐｌｅ．ｃｏｍ｝は、名前に“ｔｏ”を含み、“ｉｄ”を含まず、値に“．”を含むので、２加算して評価値「２」の優先度を得る。これにより、評価値「２」の優先度を有するｈｉｄｄｅｎフィールドは、評価値「−１」、「０」、「１」の優先度を有するｈｉｄｄｅｎフィールドよりも優先して検証対象に取り上げる判断がされ得る。
【０１３４】
なお、評価基準情報は、ユーザにより評価対象文字列の追加、削除、変更を可能とし、また、評価値を設定可能であってよい。これにより、時間、人などの資源に限りがあるときに、セキュリティ上の問題を有するおそれのあるウェブアプリケーションの検証対象を効率よく検証することができる。
【０１３５】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、検証対象抽出装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１３６】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの外部記憶媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３７】
プログラムを実行するコンピュータは、たとえば、外部記憶媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、外部記憶媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１３８】
なお、上述の実施の形態は、実施の形態の要旨を逸脱しない範囲内において種々の変更を加えることができる。
さらに、上述の実施の形態は、多数の変形、変更が当業者にとって可能であり、説明した正確な構成および応用例に限定されるものではない。
【０１３９】
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
（付記１）  コンピュータを、
構造化文書提供アプリケーションを実装するサーバと、前記サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む第１のメッセージデータ、および前記一連の通信と異なるタイミングの一連の通信の内容を含む第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、前記リクエストパラメータをリクエストパラメータ記憶手段に格納するリクエストパラメータ抽出手段、
前記第１のメッセージデータ、および前記第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、前記非表示属性項目を非表示属性項目記憶手段に格納する非表示属性項目抽出手段、
前記非表示属性項目記憶手段が記憶する前記非表示属性項目のうちから、前記リクエストパラメータ記憶手段が記憶する前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を未入力非表示属性項目として抽出して、前記未入力非表示属性項目を未入力非表示属性項目記憶手段に格納する未入力非表示属性項目抽出手段、
前記未入力非表示属性項目記憶手段が記憶する前記未入力非表示属性項目のうち、前記第１のメッセージデータに含まれた前記未入力非表示属性項目と前記第２のメッセージデータに含まれた前記未入力非表示属性項目とで重複する前記未入力非表示属性項目を検証対象非表示属性項目として抽出する検証対象非表示属性項目抽出手段、
として機能させることを特徴とする検証対象抽出プログラム。
【０１４０】
（付記２）  前記コンピュータを、さらに、
前記サーバと前記クライアントとの通信の内容から前記第１のメッセージデータ、および前記第２のメッセージデータを取得して、メッセージデータ記憶手段に格納する通信内容取得手段、
として機能させることを特徴とする付記１記載の検証対象抽出プログラム。
【０１４１】
（付記３）  前記コンピュータを、さらに、
前記構造化文書の前記閲覧アプリケーションを操作する閲覧アプリケーション操作手段、
として機能させることを特徴とする付記２記載の検証対象抽出プログラム。
【０１４２】
（付記４）  前記閲覧アプリケーション操作手段は、あらかじめ用意された閲覧アプリケーション操作の操作スクリプトにもとづいて、前記閲覧アプリケーションを操作することを特徴とする付記３記載の検証対象抽出プログラム。
【０１４３】
（付記５）  前記通信内容取得手段は、前記クライアントの代理サーバとして、前記サーバと前記クライアントとの通信の内容を取得することを特徴とする付記２記載の検証対象抽出プログラム。
【０１４４】
（付記６）  前記未入力非表示属性項目抽出手段は、
前記第１のメッセージデータにもとづく前記非表示属性項目のうちから、前記第１のメッセージデータにもとづく前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を前記第１のメッセージデータにもとづく前記未入力非表示属性項目として抽出し、
前記第２のメッセージデータにもとづく前記非表示属性項目のうちから、前記第２のメッセージデータにもとづく前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を前記第２のメッセージデータにもとづく前記未入力非表示属性項目として抽出することを特徴とする付記１または付記２に記載の検証対象抽出プログラム。
【０１４５】
（付記７）  前記コンピュータを、さらに、
抽出した前記検証対象非表示属性項目の検証の優先度を評価する評価手段、
として機能させ、
前記検証対象非表示属性項目抽出手段は、前記検証対象非表示属性項目に前記評価を付加することを特徴とする付記１または付記２に記載の検証対象抽出プログラム。
【０１４６】
（付記８）  前記評価手段は、あらかじめ定めた文字列と、前記文字列の評価値とを登録した評価基準情報を備え、前記検証対象非表示属性項目に前記文字列が含まれる場合に、前記評価値にもとづいて前記検証対象非表示属性項目を評価することを特徴とする付記７記載の検証対象抽出プログラム。
【０１４７】
（付記９）  構造化文書提供アプリケーションの検証対象となる非表示属性項目を抽出する検証対象抽出装置において、
前記構造化文書提供アプリケーションを実装するサーバと、前記サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む第１のメッセージデータ、および前記一連の通信と異なるタイミングの一連の通信の内容を含む第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、前記リクエストパラメータをリクエストパラメータ記憶手段に格納するリクエストパラメータ抽出手段と、
前記第１のメッセージデータ、および前記第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、前記非表示属性項目を非表示属性項目記憶手段に格納する非表示属性項目抽出手段と、
前記非表示属性項目記憶手段が記憶する前記非表示属性項目のうちから、前記リクエストパラメータ記憶手段が記憶する前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を未入力非表示属性項目として抽出して、前記未入力非表示属性項目を未入力非表示属性項目記憶手段に格納する未入力非表示属性項目抽出手段と、
前記未入力非表示属性項目記憶手段が記憶する前記未入力非表示属性項目のうち、前記第１のメッセージデータに含まれた前記未入力非表示属性項目と前記第２のメッセージデータに含まれた前記未入力非表示属性項目とで重複する前記未入力非表示属性項目を検証対象非表示属性項目として抽出する検証対象非表示属性項目抽出手段と、
を備えることを特徴とする検証対象抽出装置。
【０１４８】
（付記１０）  構造化文書提供アプリケーションの検証対象となる非表示属性項目を抽出する検証対象抽出装置の検証対象抽出方法において、
前記検証対象抽出装置が、
前記構造化文書提供アプリケーションを実装するサーバと、前記サーバが提供する構造化文書の閲覧アプリケーションを実装するクライアントとの一連の通信の内容を含む第１のメッセージデータ、および前記一連の通信と異なるタイミングの一連の通信の内容を含む第２のメッセージデータに含まれるリクエストデータからリクエストパラメータを抽出して、前記リクエストパラメータをリクエストパラメータ記憶手段に格納し、
前記第１のメッセージデータ、および前記第２のメッセージデータに含まれるレスポンスデータから非表示属性項目を抽出して、前記非表示属性項目を非表示属性項目記憶手段に格納し、
前記非表示属性項目記憶手段が記憶する前記非表示属性項目のうちから、前記リクエストパラメータ記憶手段が記憶する前記リクエストパラメータに含まれていない値を有する前記非表示属性項目を未入力非表示属性項目として抽出して、前記未入力非表示属性項目を未入力非表示属性項目記憶手段に格納し、
前記未入力非表示属性項目記憶手段が記憶する前記未入力非表示属性項目のうち、前記第１のメッセージデータに含まれた前記未入力非表示属性項目と前記第２のメッセージデータに含まれた前記未入力非表示属性項目とで重複する前記未入力非表示属性項目を検証対象非表示属性項目として抽出することを特徴とする検証対象抽出方法。
【符号の説明】
【０１４９】
１  検証対象抽出装置
１１  リクエストパラメータ抽出手段
１２  非表示属性項目抽出手段
１３  非表示属性項目記憶手段
１４  リクエストパラメータ記憶手段
１５  未入力非表示属性項目抽出手段
１６  未入力非表示属性項目記憶手段
１７  検証対象非表示属性項目抽出手段
２０ａ  メッセージデータ
２０ｂ  メッセージデータ
２１ａ  リクエストデータ
２１ｂ  リクエストデータ
２２ａ  スポンスデータ
２２ｂ  レスポンスデータ
２３  非表示属性項目
２４  リクエストパラメータ
２５  未入力非表示属性項目
２６  検証対象非表示属性項目
【図１】
0005381649.tif 000002
【図２】
0005381649.tif 000003
【図３】
0005381649.tif 000004
【図４】
0005381649.tif 000005
【図５】
0005381649.tif 000006
【図６】
0005381649.tif 000007
【図７】
0005381649.tif 000008
【図８】
0005381649.tif 000009
【図９】
0005381649.tif 000010
【図１０】
0005381649.tif 000011
【図１１】
0005381649.tif 000012
【図１２】
0005381649.tif 000013
【図１３】
0005381649.tif 000014
【図１４】
0005381649.tif 000015
【図１５】
0005381649.tif 000016
【図１６】
0005381649.tif 000017
【図１７】
0005381649.tif 000018
【図１８】
0005381649.tif 000019
【図１９】
0005381649.tif 000020
【図２０】
0005381649.tif 000021