(57)【特許請求の範囲】
【請求項１】
マークアップ言語で記述された文書における各ブロックのデータの種別を示す種別情報ごとに、当該種別情報に関する検査ルールを対応付けて記憶する検査ルール記憶部と、
前記マークアップ言語で記述された文書を出力するアプリケーションの実行結果として、ブロックごとに前記種別情報が付加された文書を受け付ける文書受付部と、
前記文書受付部により受け付けた文書の各ブロックから前記種別情報を抽出し、前記検査ルール記憶部に記憶された検査ルールのうち当該種別情報に対応する検査ルールを参照し、所定の種別のブロックに攻撃用文字列が含まれているか否か検査する検査部と
を有することを特徴とする検査装置。
【請求項２】
前記検査部は、前記種別情報としてユーザが出所として示されているブロックについては、スクリプトが含まれているか否かを検査することを特徴とする請求項１に記載の検査装置。
【請求項３】
前記検査部は、前記種別情報としてプログラマが出所として示されており、かつ変化が禁止されているブロックについては、該ブロックに改ざんがあるか否かを検査することを特徴とする請求項１に記載の検査装置。
【請求項４】
前記アプリケーションのソースコードとして、前記種別情報が付加されたソースコードを受け付け、当該種別情報の改ざんを防止するための検証情報を生成する検証情報生成部と、
前記文書受付部により受け付けた文書の各ブロックから抽出された種別情報が改ざんされているか否かを、前記検証情報生成部により生成した検証情報に基づいて検証する検証部と
をさらに有する請求項１、２または３に記載の検査装置。
【請求項５】
マークアップ言語で記述された文書における各ブロックのデータの種別を示す種別情報ごとに、当該種別情報に関する検査ルールを対応付けて記憶する検査ルール記憶部と、
前記マークアップ言語で記述された文書を出力するアプリケーションを実行させる実行制御部と、
前記実行制御部によるアプリケーションの実行結果として、ブロックごとに前記種別情報が付加された文書を受け付ける文書受付部と、
前記文書受付部により受け付けた文書の各ブロックから前記種別情報を抽出し、前記検査ルール記憶部に記憶された検査ルールのうち当該種別情報に対応する検査ルールを参照し、所定の種別のブロックに攻撃用文字列が含まれているか否か検査する検査部と
を有することを特徴とするサーバ装置。
【請求項６】
マークアップ言語で記述された文書を出力するアプリケーションの実行結果として、当該文書における各ブロックのデータの種別を示す種別情報がブロックごとに付加された文書を受け付ける文書受付手順と、
前記種別情報ごとに当該種別情報に関する検査ルールを対応付けて記憶する検査ルール記憶部に記憶された検査ルールのうち、前記文書受付手順により受け付けた文書の各ブロックから抽出した種別情報に対応する検査ルールを参照し、所定の種別のブロックに攻撃用文字列が含まれているか否か検査する検査手順と
をコンピュータに実行させることを特徴とする検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検査装置、サーバ装置及び検査プログラムに関する。
【背景技術】
【０００２】
近年、ＷＷＷ（World  Wide  Web）アプリケーションのセキュリティホールが注目されている。かかるＷｅｂアプリケーションのセキュリティホールの一例としては、クロスサイトスクリプティング（Cross  Site  Scripting）、いわゆるＸＳＳが挙げられる。なお、以下では、ＷｅｂアプリケーションをＷｅｂアプリと略記する。
【０００３】
このＸＳＳ攻撃を図１９を用いて説明する。図１９は、従来技術におけるＸＳＳ攻撃を説明するための説明図である。図１９の例では、ＸＳＳ攻撃の一例として、チャットや掲示板などのコミュニティサービスを提供するＷｅｂアプリを搭載したＷｅｂサーバを介して攻撃者が一般ユーザのブラウザにＸＳＳ攻撃を仕掛ける場合を想定する。図１９の右側に示すフォームは、チャットや掲示板にコメントを行うユーザの氏名を入力するｎａｍｅ欄のテキストボックスの一例である。図１９に示す左側に示す文書は、Ｗｅｂサーバが一般ユーザへ送信するＨＴＭＬ（HyperText  Markup  Language）文書の一例である。この図１９の例では、ブラウザからのｎａｍｅ欄の入力値をチェックするＷｅｂアプリに脆弱性があるものとして説明を進める。なお、ここでは、Ｗｅｂサーバが扱う文書としてＨＴＭＬ文書を例に挙げて説明するが、ＳＧＭＬ（Standard  Generalized  Markup  Language）など、他のマークアップ言語で記述される文書の場合も同様にしてＸＳＳ攻撃が行われる。
【０００４】
図１９の例で言えば、攻撃者は、攻撃スクリプト「<script>攻撃コード</script>」をテキストボックスへ入力した後にボックス中の送信ボタンを入力デバイスを介して操作する。かかる攻撃者によるブラウザへの操作により出力された攻撃スクリプトは、Ｗｅｂサーバの所定の記憶領域に蓄積される。このようにして、攻撃者は、Ｗｅｂサーバに対して動的な入力値を送信できるフォームを介して攻撃スクリプトをＷｅｂサーバへ送り込む。
【０００５】
一方、Ｗｅｂサーバは、ユーザのブラウザからＨＴＭＬ文書の取得要求を受け付けた場合に、それまでに他のユーザのブラウザから受け付けていた入力値を合成したＨＴＭＬ文書を出力する。例えば、掲示板のようなＨＴＭＬ文書の場合には、過去に他のユーザが入力した氏名やコメントなどがＨＴＭＬ文書の動的出力箇所に合成される。そして、攻撃スクリプトが送り込まれていた場合には、Ｗｅｂサーバは、図１９の左側に示すように、攻撃スクリプト「<script>攻撃コード</script>」をｎａｍｅ欄に合成したＨＴＭＬ文書を一般ユーザのブラウザへ出力することとなる。
【０００６】
このようにしてＨＴＭＬ文書を取得した一般ユーザのブラウザでは、ＨＴＭＬで記述された内容にしたがって表示画面を作成する。図１９に示す例で言えば、ブラウザは、プログラマが記述した本来のスクリプト「<script>function(){本当に必要なコード}</script>」を実行する。ところが、ブラウザでは、本来のスクリプトの直下に攻撃スクリプト「<script>攻撃コード</script>」が埋め込まれているので、本来のスクリプト「本当に必要なコード」の引数に攻撃スクリプトを使用してしまう。
【０００７】
このとき、一般ユーザのブラウザでは、Ｗｅｂサーバから取得したスクリプトがＷｅｂアプリの作成者であるプログラマにより記述された本来のスクリプト又は攻撃スクリプトのいずれであるのかを区別できない。このため、一般ユーザのブラウザは、攻撃スクリプトが実行される結果となる。例えば、図示しない引数で指定するＵＲＬへジャンプさせるコードが本来のスクリプトとして記述されていた場合には、攻撃者によって特定のＷｅｂサイトのＵＲＬが攻撃スクリプトとして送り込まれることが予想される。この場合には、引数で指定するＵＲＬへジャンプさせるという本来のスクリプトの文法的な意味が改ざんされる。このため、一般ユーザは、プログラマが意図しないＷｅｂサイトへ誘導されてしまう結果となる。
【０００８】
かかるＸＳＳ攻撃を防護するために、セキュリティを強化したコーディング（従来技術１）や出力ＨＴＭＬの検査（従来技術２）などの手法が採用される。
【０００９】
このうち、従来技術１には、入力値検査やサニタイジングなどのコーディング手法が該当する。かかるコーディングが施されていれば、Ｗｅｂアプリは、ブラウザからの入力値をＨＴＭＬ文書に合成する際に、その入力値の中に合成先のＨＴＭＬ文書の文法へ悪影響を与える文字列が含まれているか否かを検査する。そして、Ｗｅｂアプリは、悪影響を与えるおそれのある文字列を他の無害な文字列に置き換え、置き換えた文字列をＨＴＭＬ文書に合成してそのＨＴＭＬ文書をブラウザに送信できる。
【００１０】
また、従来技術２には、ＷＡＦ（Web  Application  Firewall）やＷｅｂ監査ツールなどが該当する。ここでは、ＷＡＦを図２０を用いて説明し、Ｗｅｂ監査ツールを図２１を用いて説明する。図２０は、従来技術におけるＷＡＦの検査要領を説明するための説明図である。また、図２１は、従来技術におけるＷｅｂ監査ツールの検査要領を説明するための説明図である。図２０及び図２１に示すＷｅｂサーバは、Ｗｅｂアプリを実行するサーバ装置である。このＷｅｂサーバは、ブラウザからＨＴＭＬ文書の取得要求を受け付けた場合に、それまでに他のブラウザから受け付けていた入力値を動的に合成してＨＴＭＬ文書を生成する。図２０及び図２１に示すブラウザは、ユーザ端末に搭載されるＷｅｂページ閲覧用のアプリケーションであり、例えば、ＨＴＭＬの記述にしたがって表示画面を生成したり、ＨＴＭＬ文書に含まれるスクリプトを実行したりする。また、図２０及び図２１に示す検査装置は、Ｗｅｂサーバとユーザ端末の間に介在し、Ｗｅｂサーバがブラウザに出力するＨＴＭＬ文書、或いは出力しようとするＨＴＭＬ文書を検査する装置である。なお、Ｗｅｂアプリが呼び出すＨＴＭＬ文書のソースコードは、プログラマによってＪＳＰ（Java（登録商標）Server  Pages）などを用いてプログラミングされた後にＷｅｂサーバがアクセス可能な所定の場所、例えばＷｅｂサーバの記憶装置や外部装置に格納される。
【００１１】
図２０に示すＷＡＦの場合には、ＷｅｂサーバからＨＴＭＬ文書が出力された場合に、検査装置は、所定の検査ルールを記憶する検査ルールベースを用いて、Ｗｅｂサーバによって出力されたＨＴＭＬ文書に対するＸＳＳ検査を実行する。この検査ルールベースには、ＸＳＳ攻撃に使用される攻撃パターンとその攻撃パターンが検出された場合の措置とが検査ルールとして規定される。そして、検査装置は、Ｗｅｂサーバにより出力された文書から攻撃パターンに合致する文字列が検出されなかった場合には、ＯＫ（正常なＨＴＭＬ文書）と判定し、Ｗｅｂサーバが生成したＨＴＭＬ文書をブラウザに送信する。一方、検査装置は、Ｗｅｂサーバにより出力された文書から攻撃パターンに合致する文字列が検出された場合には、ＮＧ（ＸＳＳ攻撃を受けたＨＴＭＬページのおそれあり）と判定し、ＨＴＭＬ文書のブラウザへの送信を中断する。
【００１２】
図２１に示すＷｅｂ監査ツールの場合には、検査装置は、プログラマが作成したＨＴＭＬ文書のソースコードを解析し、ソースコードの中で脆弱性がある箇所の近傍にＸＳＳ検査を行う命令を含む保護コードを埋め込む前処理を行う。かかる保護コードの埋め込みにより、Ｗｅｂサーバは、ＨＴＭＬ文書がブラウザに送信される前の段階で検査装置を呼び出し、検査装置にＸＳＳ検査を実行させることができる。このようにしてＸＳＳ検査が呼び出されると、検査装置は、所定の検査ルールを記憶する検査ルールベースを用いて、Ｗｅｂサーバが出力しようとするＨＴＭＬ文書に対するＸＳＳ検査を実行する。この検査ルールベースには、ＸＳＳ攻撃に使用される文字列のパターンとそのパターンが検出された場合の措置とが検査ルールとして規定される。そして、検査装置は、出力予定のＨＴＭＬ文書から攻撃パターンに合致する文字列が検出されなかった場合には、ＯＫ（正常なＨＴＭＬ文書）と判定し、Ｗｅｂサーバが生成したＨＴＭＬ文書の出力を許可する。一方、検査装置は、出力予定のＨＴＭＬ文書から攻撃パターンに合致する文字列が検出された場合には、ＮＧ（ＸＳＳ攻撃を受けたＨＴＭＬ文書のおそれあり）と判定し、ＨＴＭＬ文書の送信を中断させる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特表２００９−５０６４３９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、上記の従来技術１〜２は、以下に説明するように、プログラマが多大な労力を費やさなければ、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止できないという問題がある。
【００１５】
例えば、上記の従来技術１では、プログラマが文書に含まれる全ての動的出力箇所に適切なコーディングを行う必要がある。ところが、全ての動的出力箇所に適切なコーディングを行うためには、多大な時間及び労力がかかる。結局、コーディングを洩れなく行うのは困難であるので、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止することはできない。
【００１６】
また、上記の従来技術２では、Ｗｅｂサーバによって出力される文書に含まれたコードをプログラマ又は攻撃者のいずれが記述したのかを特定することができない。このため、従来技術２では、プログラマが記述した正当なコードを攻撃者が記述したものと誤検出したり、また、攻撃者が記述した攻撃コードをプログラマが記述した正当なコードと誤検出したりするおそれがある。このような誤検出を低減するには、検査ルールを調整することも考えられるが、Ｗｅｂアプリごとに検査ルールを微調整する手間がプログラマに生じるので、検査ルールを調整するのは現実的に不可能である。したがって、上記の従来技術２でも、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止することはできない。
【００１７】
なお、従来技術１及び２以外にも、文書内におけるタグの記述を制限する対応も考えられる。一例としては、ＨＴＭＬ文書中におけるタグの記述を禁止するなどの制限の強化を行うことによりスクリプトを強制除去する対応が挙げられる。ところが、かかる対応を採用した場合には、プログラムの開発自由度を阻害するので、プログラマに過度の制限が課されるという別の問題が発生する。さらに、タグの記述がないフレームワークしか開発に使用できず、既に開発されたフレームワークが使用できないので、プログラムの開発効率も悪化するという問題も生じる。
【００１８】
開示の技術は、上記に鑑みてなされたものであって、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止できる検査装置、サーバ装置及び検査プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１９】
本願の開示する検査装置は、マークアップ言語で記述された文書における各ブロックのデータの出所を示す出所情報ごとに、当該出所情報に関する検査ルールを対応付けて記憶する検査ルール記憶部を有する。さらに、前記検査装置は、前記マークアップ言語で記述された文書を出力するアプリケーションの実行結果として、ブロックごとに前記出所情報が付加された文書を受け付ける文書受付部を有する。さらに、前記検査装置は、前記文書受付部により受け付けた文書の各ブロックから前記出所情報を抽出する。さらに、前記検査装置は、前記検査ルール記憶部に記憶された検査ルールのうち当該出所情報に対応する検査ルールを参照し、ブロックごとに攻撃用文字列が含まれているか否か検査する検査部を有する。
【発明の効果】
【００２０】
本願の開示する検査装置の一つの態様によれば、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止できるという効果を奏する。
【図面の簡単な説明】
【００２１】
【図１】図１は、実施例１に係る検査装置の構成を示すブロック図である。
【図２】図２は、実施例２に係るＷｅｂサーバの構成を示すブロック図である。
【図３】図３は、オリジナルソースコードの一例を示す図である。
【図４】図４は、検証情報付きソースコードの一例を示す図である。
【図５】図５は、検査ルールの作成方針を説明するための説明図である。
【図６】図６は、検査ルールテーブルに記憶される情報の構成例を示す図である。
【図７】図７は、検証情報テーブルに記憶される情報の構成例を示す図である。
【図８】図８は、実施例２に係る検証情報作成処理の手順を示すフローチャートである。
【図９】図９は、実施例２に係る文書出力処理の手順を示すフローチャートである。
【図１０】図１０は、図９のステップＳ２０２に示したＸＳＳ検査処理の手順を示すフローチャートである。
【図１１】図１１は、図９のステップＳ２０５に示した汚染検証処理の手順を示すフローチャートである。
【図１２】図１２は、正常なＨＴＭＬ文書の出力例を示す図である。
【図１３】図１３は、正常なＨＴＭＬ文書の出力に対する検査結果の一例を示す図である。
【図１４】図１４は、ＸＳＳ攻撃を含むＨＴＭＬ文書の出力例を示す図である。
【図１５】図１５は、ＸＳＳ攻撃を含むＨＴＭＬ文書に対する検査結果の一例を示す図である。
【図１６】図１６は、分離マークアップの汚染を含むＨＴＭＬ文書の出力例を示す図である。
【図１７】図１７は、分離マークアップの汚染を含むＨＴＭＬ文書に対する検証結果の一例を示す図である。
【図１８】図１８は、実施例３に係る検査プログラムを実行するコンピュータの一例について説明するための図である。
【図１９】図１９は、従来技術におけるＸＳＳ攻撃を説明するための説明図である。
【図２０】図２０は、従来技術におけるＷＡＦの検査要領を説明するための説明図である。
【図２１】図２１は、従来技術におけるＷｅｂ監査ツールの検査要領を説明するための説明図である。
【発明を実施するための形態】
【００２２】
以下に、本願の開示する検査装置、サーバ装置及び検査プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例１】
【００２３】
図１は、実施例１に係る検査装置の構成を示すブロック図である。図１に示すように、検査装置１は、検査ルール記憶部２と、文書受付部３と、検査部４とを有する。
【００２４】
このうち、検査ルール記憶部２は、マークアップ言語で記述された文書における各ブロックのデータの出所を示す出所情報ごとに、当該出所情報に関する検査ルールを対応付けて記憶する。
【００２５】
文書受付部３は、マークアップ言語で記述された文書を出力するアプリケーションの実行結果として、ブロックごとに出所情報が付加された文書を受け付ける。
【００２６】
検査部４は、文書受付部３により受け付けた文書の各ブロックから出所情報を抽出し、検査ルール記憶部２に記憶された検査ルールのうち当該出所情報に対応する検査ルールを参照し、ブロックごとに攻撃コードが含まれているか否か検査する。
【００２７】
このように、文書に含まれる各ブロックのデータの出所が文書に含まれていれば、ブロックのデータの出所がプログラマ又はそれ以外の者であるかという分類で検査ルールを定義できる。このため、検査装置１では、ブロックのデータの出所がプログラマ又はそれ以外の者のいずれであるかを既知として検査できる。それゆえ、従来技術のように、プログラマが記述した正当なコードを攻撃者が記述したものと誤検出したり、また、攻撃者が記述した攻撃コードをプログラマが記述した正当なコードと誤検出したりすることもない。したがって、検査装置１によれば、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止することが可能になる。
【００２８】
さらに、検査装置１では、上記のように単純な分類で検査ルールを定義できるので、一般性のある検査ルールを用いてＷｅｂサーバから出力される攻撃コードを検査できる。このため、プログラマによるコーディングを出所情報の付加作業に集約できる。それゆえ、従来技術のように、プログラマがＷｅｂアプリケーションごとにその特性に適合した検査ルールを作成する必要はない。したがって、検査装置１によれば、Ｗｅｂサーバが出力する文書を検査するのにあたってプログラマに多大な労力を負わせることもない。
【実施例２】
【００２９】
続いて、実施例２に係る検査装置について説明する。ここで、実施例２では、ブラウザへ出力する文書を検査する検査装置の機能をＷｅｂサーバに搭載した場合を例示して以下の説明を行うこととする。さらに、実施例２では、Ｗｅｂサーバがチャットや掲示板などのコミュニティサービスを提供するＷｅｂアプリケーションを搭載する場合を例示して以下の説明を行うこととする。なお、以下では、ＷｅｂアプリケーションをＷｅｂアプリと略記する。
【００３０】
図２は、実施例２に係るＷｅｂサーバの構成を示すブロック図である。図２に示すように、Ｗｅｂサーバ１０は、通信制御インタフェース（interface）部１１と、記憶部１２と、制御部１３とを有する。なお、図２の例では、入力部や出力部などを図示していないが、既存のＷｅｂサーバが有する標準のデバイスや汎用のソフトウェアは搭載されているものとする。また、通信制御インタフェース部１１は、インタフェースの部分をＩ／Ｆと略記し、通信制御Ｉ／Ｆ部１１と表記する。
【００３１】
通信制御Ｉ／Ｆ部１１は、他装置との間で通信を行うためのインタフェースである。なお、通信制御Ｉ／Ｆ部１１は、インターネットを介してユーザ端末と接続されるとともに、インターネット、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）を介してプログラマが使用する端末と接続される。
【００３２】
記憶部１２は、例えば、フラッシュメモリ（flash  memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部１２は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００３３】
この記憶部１２は、制御部１３で実行される各種プログラム（例えば、Ｗｅｂアプリケーション）やそのプログラムの実行に必要なデータ（例えば、ブラウザから受け付けた入力値）を記憶する。このほか、記憶部１２は、例えばソースコード１２ａと、検査ルールテーブル１２ｂと、検証情報テーブル１２ｃとを記憶する。
【００３４】
ソースコード１２ａは、Ｗｅｂアプリの作成者であるプログラマによって所定のマークアップ言語を用いて記述されたプログラムである。このソースコード１２ａは、プログラマが記述したオリジナルのソースコードではなく、後述の検証情報作成部１３ｂによって所定の検証情報付加された検証情報付きのソースコードである。なお、ここでは、検証情報付きのソースコードだけを記憶することとしたが、検証情報が付加される前のオリジナルコードを併せて記憶することとしてもよい。
【００３５】
これらオリジナルソースコード及び検証情報付きソースコードを図３及び図４を用いて説明する。図３は、オリジナルソースコードの一例を示す図であり、また、図４は、検証情報付きソースコードの一例を示す図である。図３及び図４に示すソースコードは、ＨＴＭＬで記述される掲示板のソースコードを示す。なお、図３及び図４の例では、ソースコードがＨＴＭＬで記述された場合を例示するが、ＳＧＭＬ（Standard  Generalized  Markup  Language）など、他のマークアップ言語で記述されることとしてもかまわない。
【００３６】
図３に示すオリジナルソースコードには、掲示板に係るＨＴＭＬ文書を形成する文書の構造やブラウザで生成させる画面のレイアウトがＨＴＭＬで記述される。ここで、本実施例に係るオリジナルソースコードは、所定のブロックごとにソースコードが分離マークアップで区切られるとともに各ブロックのデータの出所を示すブロック種別が分離マークアップに含めて記述される点が既存のソースコードとは異なる。なお、かかる分離マークアップは、ソースコード作成時にプログラマによって記述されることとする。
【００３７】
このブロック種別には、「Static」、「Safe」、「Dynamic」、「Unsafe」が含まれる。このうち、「Static」は、固定メッセージなどデータの中身が不変なブロックの種別を指す。「Safe」は、プログラマが意図する本来のスクリプトが含まれるブロックの種別を指す。「Dynamic（動的出力）」は、個人の属性情報や日付情報など、ブラウザからの入力値によって動的出力を行うブロック種別を指す。また、「Unsafe」は、既存のプログラミング言語との相互運用性やプログラムの実行効率向上のために使用されるブロック種別を指す。これら４つのブロック種別のうち「Static」、「Safe」及び「Unsafe」の３つは出所がプログラマであることを意味し、「Dynamic」は出所がユーザであることを意味する。
【００３８】
図３に示す例で言えば、オリジナルソースコードの各ブロックは、[[BLOCK  ブロック種別]]及び[[BLOCK  END]]で表される分離マークアップによってブロックの内容が他のブロックから分離される。図３に示す例を上から順に説明すると、最上部の分離マークアップは、プログラマが意図する「本当に必要なコード」を図示しない引数を用いて実行する「function」の「script」タグを他のブロックから区切る。上から２番目の分離マークアップは、過去に掲示板に書き込みを行ったユーザがブラウザを介して入力した氏名を入力値として動的出力するブロックを他のブロックから区切る。上から３番目の分離マークアップは、テキストボックスに入力値の定義と、ボタンクリック時に入力値をブラウザにチェックさせるチェックコードとを含む「script」タグを他のブロックから区切る。上から４番目の分離マークアップは、Ｗｅｂサーバへのアクセス日付を入力値として動的出力するブロックを他のブロックから区切る。
【００３９】
このような分離マークアップの入力仕様とした場合には、例えば複数の動的出力を一定範囲に連続して配置する設計を行う場合に、プログラマは、各々の動的出力箇所にサニタイジングなどのコーディングを行う必要はない。すなわち、プログラマは、複数の動的出力をまとめて[[BLOCK  Dynamic]]及び[[BLOCK  END]]と記述することで、Ｗｅｂサーバ１０に攻撃スクリプトの検査を実行させることができる。
【００４０】
図４に示す検証情報付きソースコードは、図３に示したオリジナルソースコードと概ね同じものであるが、ソースコードの各ブロックの分離マークアップに検証情報としてブロックのシーケンス番号を示す「ｉｄ」が付加されている点が異なる。
【００４１】
このブロック「ｉｄ」は、出所情報である分離マークアップが攻撃者によって偽装されていないか否かを検証するためのものである。かかるブロック「ｉｄ」としては、後述の検証情報作成部１３ｂにより分離マークアップの先頭又は後尾から順に連番が作成される。このようにして検証情報作成部１３ｂにより作成されたブロック「ｉｄ」は、例えばブロック種別の後に付加される。図４の例で言えば、最上部の分離マークアップには、ブロック種別「Safe」の後ろに「#id=49001」が付加される。上から２番目の分離マークアップには、ブロック種別「Dynamic」の後ろに「#id=49002」が付加される。上から３番目の分離マークアップには、ブロック種別「Safe」の後ろに「#id=49003」が付加される。上から４番目の分離マークアップには、ブロック種別「Dynamic」の後ろに「#id=49004」が付加される。
【００４２】
図２の説明に戻り、検査ルールテーブル１２ｂは、ブロック種別ごとにそのブロック内部の検査ルールを定義したテーブルである。図５は、検査ルールの作成方針を説明するための説明図である。検査ルールテーブル１２ｂは、図５に示す作成方針にしたがって作成される。
【００４３】
図５に示すように、「Static」は、固定メッセージなどデータの中身が不変なブロックであり、その出所はプログラマである。このため、「Static」のブロック内部にはスクリプトが存在してはならず、「Static」のブロック内部はソースコード１２ａの記述から変化があってはならない。「Safe」は、プログラマが意図する本来のスクリプトが含まれるブロックであり、その出所はプログラマである。このため、「Safe」のブロック内部にはスクリプトが存在してもよいが、「Safe」のブロック内部はソースコード１２ａの記述から変化があってはならない。「Dynamic」は、個人の属性情報や日付情報などブラウザからの入力値によって動的出力を行うブロックであり、その出所はユーザである。このため、「Dynamic」のブロック内部にはスクリプトが存在してはいけないが、「Dynamic」のブロック内部はソースコード１２ａの記述から変化があってもかまわない。また、「Unsafe」は、既存のプログラミング言語との相互運用性やプログラムの実行効率向上のために使用されるブロックであり、その出所はプログラマである。このため、「Unsafe」のブロック内部にはスクリプトが存在してもよく、「Unsafe」のブロック内部はソースコード１２ａの記述から変化があってもよい。
【００４４】
このような作成方針の下、図６に示す検査ルールテーブル１２ｂが予め定義される。図６は、検査ルールテーブルに記憶される情報の構成例を示す図である。図中に示す「○」は、ＨＴＭＬ文書の出力を許可することを示し、また、「×」は、ＨＴＭＬ文書の出力を禁止することを示す。
【００４５】
図６に示す検査ルールテーブル１２ｂには、ブロック種別ごとにそのブロック内部の文字列構成の変化及びブロック内部の指定要素の包含の許可可否が定義される。ここでは、ＸＳＳ攻撃を防護する観点からスクリプトを指定要素とする場合を想定して説明を行うが、「img」タグ、「object」タグや「frame」タグなどの他のタグ、外部サイトのＵＲＬ、テキスト以外の全てのＨＴＭＬであってもかまわない。図６に示す例で言えば、ブロック内部の文字列構成の変化、すなわち動的出力は、ブロック種別が「Dynamic」及び「Unsafe」である場合に許可されるが、それ以外の「Static」及び「Safe」である場合には禁止される。また、ブロック内部の指定要素の包含、すなわちスクリプトの包含は、ブロック種別が「Safe」及び「Unsafe」である場合に許可されるが、それ以外の「Static」及び「Dynamic」である場合には禁止される。
【００４６】
図２の説明に戻り、検証情報テーブル１２ｃは、検証情報を記憶したテーブルである。この検証情報は、攻撃者が分離マークアップ[[BLOCK  END]][[BLOCK  Safe  #id=XXXXX]]<script>攻撃コード</script>を偽装して攻撃スクリプトを入力フォームへ入力することにより、分離マークアップが汚染されることを防止するためのものである。
【００４７】
ここで、検証情報には、後述の検証情報作成部１３ｂによってオリジナルソースコードからハッシュ関数を用いて作成されたハッシュ値が含まれる。このハッシュ値には、分離マークアップのハッシュ値とそのブロック内部のハッシュ値の２つが存在する。分離マークアップのハッシュ値は、後述のＷｅｂアプリ１３ａから出力されるＨＴＭＬに含まれた分離マークアップの文字列がソースコード１２ａの登録時と比べて変化がないか否かを検証するためのものである。かかる分離マークアップのハッシュ値を予め登録しておけば、Ｗｅｂアプリ１３ａよるＨＴＭＬ文書の出力時にその分離マークアップの文字列の偽装を看破できる。一方、ブロック内部のハッシュ値は、後述のＷｅｂアプリ１３ａから出力されるＨＴＭＬに含まれたブロック内部の文字列がソースコード１２ａの登録時と比べて変化がないか否かを検証するためのものである。かかるブロック内部のハッシュ値を予め登録しておけば、Ｗｅｂアプリ１３ａよるＨＴＭＬ文書の出力時にブロック内部の文字列の偽装を看破できる。
【００４８】
また、検証情報には、後述の検証情報作成部１３ｂによってオリジナルソースコードから作成されたシーケンス番号が含まれる。このシーケンス番号は、上記のブロック「ｉｄ」に対応し、後述のＷｅｂアプリ１３ａから出力されるＨＴＭＬに含まれた分離マークアップの個数及び順番がソースコード１２ａの登録時と比べて変化がないか否かを検証するためのものである。かかるシーケンス番号を予め登録しておけば、先頭の分離マークアップの前部、分離マークアップ間、或いは最後尾の分離マークアップの後部への偽装マークアップの挿入を看破できる。なお、シーケンス番号は、外部から予測不能な程度の桁数の連番が採番されるものとする。
【００４９】
図７は、検証情報テーブルに記憶される情報の構成例を示す図である。図７に示すハッシュ値ｈ１は、分離マークアップのハッシュ値を示し、また、ハッシュ値ｈ２は、ブロック内部のハッシュ値を示す。また、図７の例では、各々のハッシュ値の下にソースコード１２ａにおける該当部分の元データを図示しているが、元データを登録する必要はない。図７に示すように、図４に示した最上部の分離マークアップの例では、「ｉｄ」として「４９００１」、ハッシュ値ｈ１として「aWcMrTm4Uf」、さらに、ハッシュ値ｈ２として「AzxzMLxLem」が登録された場合を示す。上から２番目の分離マークアップの例では、「ｉｄ」として「４９００２」、ハッシュ値ｈ１として「bFReycmBpE」、さらに、ハッシュ値ｈ２として「BzFXLtX4pN」が登録された場合を示す。上から３番目の分離マークアップの例では、「ｉｄ」として「４９００３」、ハッシュ値ｈ１として「c2bNU8aigm」、さらに、ハッシュ値ｈ２として「C3kCkV7JLP」が登録された場合を示す。上から４番目の分離マークアップの例では、「ｉｄ」として「４９００４」、ハッシュ値ｈ１として「dUeY5ZmD8V」、さらに、ハッシュ値ｈ２として「DQyB4YKF2L」が登録された場合を示す。なお、ここでは、ソースコード１２ａに含まれる分離マークアップすべての「ｉｄ」を格納することとしたが、全ての分離マークアップのうち最終のシーケンス番号だけを格納することもできる。
【００５０】
制御部１３は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、または、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路である。
【００５１】
この制御部１３は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部１３は、図２に示すように、Ｗｅｂアプリ１３ａと、検証情報作成部１３ｂと、ＸＳＳ検証部１３ｃと、汚染検証部１３ｄと、分離マークアップ除去部１３ｅとを有する。
【００５２】
このうち、Ｗｅｂアプリ１３ａは、Ｗｅｂサーバ１０に搭載されるＷｅｂアプリケーションである。Ｗｅｂアプリ１３ａは、ブラウザから入力値を受け付けた場合には、その入力値を動的出力用のデータとして記憶部１２の所定の記憶領域へ格納する。また、Ｗｅｂアプリ１３ａは、ブラウザからＨＴＭＬ文書の取得要求を受け付けた場合に、それまでに他のブラウザから受け付けていた入力値を動的に合成してＨＴＭＬ文書を生成する。このＷｅｂサーバ１３ａでは、ＨＴＭＬ文書の生成後にそのＨＴＭＬ文書をレスポンスとしてブラウザへ出力する前にＸＳＳ検査部１３ｃへ出力する。
【００５３】
検証情報作成部１３ｂは、後述の汚染検証部１３ｄによって使用される検証情報を作成する処理部である。例えば、検証情報作成部１３ｂは、ネットワークを介して接続される他のＷｅｂサーバ、ＬＡＮまたはＷＡＮなどを介して接続させるプログラマの端末、図示しない入力部、或いは記憶部１２を介してオリジナルソースコードから受け付ける。そして、検証情報作成部１３ｂは、オリジナルソースコードに含まれるＭ個の分離マークアップ群を抽出し、Ｍ個のうち１つの分離マークアップ（ｍ：任意の自然数）を取り出す。続いて、検証情報作成部１３ｂは、取り出した分離マークアップ（ｍ）に新しいｉｄ、すなわち１つのソースコードに含まれるブロック間で連番となるシーケンス番号を生成し、生成したｉｄを分離マークアップ（ｍ）へ付加する。その後、検証情報作成部１３ｂは、分離マークアップ（ｍ）のハッシュ値（ｈ１）を算出するとともにそのブロック内部のハッシュ値（ｈ２）を算出する。そして、検証情報作成部１３ｂは、分離マークアップ（ｍ）へ付加したｉｄ、ハッシュ値（ｈ１）及びハッシュ値（ｈ２）を検証情報テーブル１２ｃへ登録する。その後、検証情報作成部１３ｂは、分離マークアップ群（Ｍ）に含まれる分離マークアップ（ｍ）全てのｉｄ、ハッシュ値（ｈ１）及びハッシュ値（ｈ２）を検証情報テーブル１２ｃへ登録するまで、検証情報の作成・登録を繰り返し行う。
【００５４】
ＸＳＳ検査部１３ｃは、検査ルールテーブル１２ｂを用いて、Ｗｅｂアプリ１３ａによって出力されたＨＴＭＬ文書に攻撃コードが含まれているか否かをブロックごとに検査する処理部である。
【００５５】
このＸＳＳ検査部１３ｃの動作内容の一例を説明すると、ＸＳＳ検査部１３ｃは、Ｗｅｂアプリ１３ａによってブラウザへのレスポンスとして出力されたＨＴＭＬ文書から、Ｍ個の分離マークアップ群を抽出する。そして、ＸＳＳ検査部１３ｃは、Ｍ個のうち１つの分離マークアップ（ｍ）を取り出し、ＸＳＳ攻撃の有無を検出する他、ＸＳＳ攻撃以外にける検査ルールの不整合の有無を検出する。なお、分離マークアップ群（Ｍ）に含まれる分離マークアップ（ｍ）全てにＸＳＳ攻撃又は不整合が検出されなかった場合には、ＸＳＳ検査部１３ｃは、ブラウザへのレスポンスを許可する旨、すなわち合格（ＯＫ）をＷｅｂアプリ１３ａへ応答する。
【００５６】
そして、分離マークアップ（ｍ）のブロック種別が「Unsafe」である場合には、ＸＳＳ検査部１３ｃは、スクリプトの存在が許可されているので、次の分離マークアップ（ｍ＋１）を取り出す。但し、ブロック種別が「Unsafe」の場合には、スクリプトの検出を行わないものの、図示しない表示部へ警告を表示するか、或いは分離マークアップのログを記憶部１２へ出力するかの少なくともいずれかを実行する。また、分離マークアップ（ｍ）のブロック種別が「Safe」である場合には、ＸＳＳ検査部１３ｃは、スクリプトの存在が無条件に許可されているので、スクリプトの検出を行わずに次の分離マークアップ（ｍ＋１）を取り出す。
【００５７】
また、分離マークアップ（ｍ）のブロック種別が「Dynamic」である場合には、ＸＳＳ検査部１３ｃは、分離マークアップ（ｍ）のブロック内部にスクリプトが含まれるか否かを検査する。このとき、スクリプトが含まれている場合には、ＸＳＳ検査部１３ｃは、ブロックのデータの出所がユーザであるので、ＸＳＳ攻撃が行われたおそれがあると判定する。このようにしてＸＳＳ攻撃を検出したと判定した場合には、ＸＳＳ検査部１３ｃは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答する。また、スクリプトが含まれていない場合には、ＸＳＳ検査部１３ｃは、ＸＳＳ攻撃が行われたおそれなしと判定し、次の分離マークアップ（ｍ＋１）を取り出す。
【００５８】
また、分離マークアップ（ｍ）のブロック種別が「Static」である場合には、ＸＳＳ検査部１３ｃは、分離マークアップ（ｍ）のブロック内部にスクリプトが含まれるか否かを検査する。このとき、スクリプトが含まれている場合には、ＸＳＳ検査部１３ｃは、ブラウザへ出力しようとするＨＴＭＬ文書に不整合な部分があると判定し、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答する。このような不整合の一例としては、プログラマがオリジナルソースコードのコーディング時点でブロック種別を「Safe」と記述するのが正しいところを「Static」とミスタイプした場合が挙げられる。また、スクリプトが含まれていない場合には、ＸＳＳ検査部１３ｃは、整合性ありと判定し、次の分離マークアップ（ｍ＋１）を取り出す。
【００５９】
汚染検証部１３ｄは、検査ルールテーブル１２ｂを用いて、Ｗｅｂアプリ１３ａによって出力されたＨＴＭＬ文書に含まれる分離マークアップが改ざんされているか否かを検証する処理部である。
【００６０】
この汚染検証部１３ｄの動作内容の一例を説明すると、汚染検証部１３ｄは、Ｗｅｂアプリ１３ａによってブラウザへのレスポンスとして出力されたＨＴＭＬ文書から、Ｍ個の分離マークアップ群を抽出する。そして、汚染検証部１３ｄは、Ｍ個のうち１つの分離マークアップ（ｍ）を取り出し、その分離マークアップ（ｍ）のブロック内部からｉｄ´を取得する。さらに、汚染検証部１３ｄは、分離マークアップ（ｍ）のハッシュ値（ｈ１´）を算出するとともにそのブロック内部のハッシュ値（ｈ２´）を算出する。その上で、汚染検証部１３ｄは、分離マークアップのブロック内部から取得したｉｄ´を検索キーとして、検証情報テーブル１２ｃを検索する。
【００６１】
このとき、検証情報テーブル１２ｃにｉｄ´と同じｉｄが存在しない場合には、汚染検証部１３ｄは、分離マークアップ（ｍ）がｉｄ偽造のマークアップであるおそれがあるので、分離マークアップの汚染を検出したと判定する。かかる判定を行った場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答する。
【００６２】
また、検証情報テーブル１２ｃにｉｄ´と同じｉｄが存在する場合には、汚染検証部１３ｄは、検証情報テーブル１２ｃにｉｄと対応付けて記憶されたハッシュ値（ｈ１）と、ｉｄ´のハッシュ値（ｈ１´）が一致するか否かを判定する。
【００６３】
このとき、ハッシュ値（ｈ１）とハッシュ値（ｈ１´）が一致しない場合には、汚染検証部１３ｄは、分離マークアップ（ｍ）が分離マークアップ形式を偽造したマークアップであるおそれがあるので、分離マークアップの汚染を検出したと判定する。かかる判定を行った場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答する。
【００６４】
また、ハッシュ値（ｈ１）とハッシュ値（ｈ１´）が一致する場合には、汚染検証部１３ｄは、分離マークアップ（ｍ）のブロック種別が「Dynamic」であるか否かを判定する。そして、ブロック種別が「Dynamic」でない場合には、汚染検証部１３ｄは、「Unsafe」であるか否かをさらに判定する。
【００６５】
このとき、ブロック種別が「Dynamic」又は「Unsafe」のいずれかである場合には、汚染検証部１３ｄは、ブロック内部の動的出力が許可されている。このため、汚染検証部１３ｄは、ハッシュ値（ｈ２）とハッシュ値（ｈ２´）の一致可否を検出せずに次の分離マークアップ（ｍ＋１）を取り出す。
【００６６】
一方、ブロック種別が「Static」又は「Safe」のいずれかである場合には、汚染検証部１３ｄは、検証情報テーブル１２ｃにｉｄと対応付けて記憶されたハッシュ値（ｈ２）とｉｄ´のハッシュ値（ｈ２´）が一致するか否かを判定する。
【００６７】
このとき、ハッシュ値（ｈ２）とハッシュ値（ｈ２´）が一致しない場合には、汚染検証部１３ｄは、分離マークアップ（ｍ）のブロック内部が改ざんされたおそれがあるので、分離マークアップの汚染を検出したと判定する。このようにして、分離マークアップの汚染を検出した場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答する。一方、ハッシュ値（ｈ２）とハッシュ値（ｈ２´）が一致した場合には、汚染検証部１３ｄは、次の分離マークアップ（ｍ＋１）を取り出す。
【００６８】
そして、分離マークアップ群（Ｍ）に含まれる分離マークアップ（ｍ）全てに汚染が検出されなかった場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可する旨、すなわち合格（ＯＫ）をＷｅｂアプリ１３ａへ応答する。
【００６９】
図２の説明に戻り、分離マークアップ除去部１３ｅは、Ｗｅｂアプリ１３ａによって出力されたＨＴＭＬ文書に含まれる分離マークアップを除去する処理部である。例えば、分離マークアップ除去部１３ｅは、ＸＳＳ検査部１３ｃ及び汚染検証部１３ｄの両方から合格の応答が得られた場合に、ＨＴＭＬ文書の各ブロックから[[BLOCK  ブロック種別  ｉｄ]]及び[[BLOCK  END]]を除去する。このように、ブラウザに送信される前に分離マークアップを除去するので、ユーザから分離マークアップの記述を秘匿できる結果、分離マークアップが汚染する危険性を低減できる。
【００７０】
［処理の流れ］
次に、本実施例に係る処理の流れを説明する。なお、ここでは、ＨＴＭＬ文書の生成に使用する前処理として検証情報作成部１３ｂにより実行される（１）検証情報作成処理を説明した後に、Ｗｅｂサーバ１０により実行される（２）文書出力処理を説明する。さらに、（２）の処理の後にＸＳＳ検査部１３ｃにより実行される（３）ＸＳＳ検査処理を説明した後に、汚染検証部１３ｄにより実行される（４）汚染検証処理を説明することとする。
【００７１】
（１）検証情報作成処理
ここでは、図８を用いて、本実施例に係る検証情報作成処理を説明する。図８は、実施例２に係る検証情報作成処理の手順を示すフローチャートである。この処理は、ネットワークを介して接続される他のＷｅｂサーバ、ＬＡＮまたはＷＡＮなどを介して接続させるプログラマの端末、図示しない入力部、或いは記憶部１２を介してオリジナルソースコードが入力された場合に起動される。
【００７２】
図８に示すように、オリジナルソースコードを受け付けると（ステップＳ１０１）、検証情報作成部１３ｂは、オリジナルソースコードに含まれるＭ個の分離マークアップ群を抽出する（ステップＳ１０２）。そして、検証情報作成部１３ｂは、Ｍ個のうち１つの分離マークアップ（ｍ）を取り出す（ステップＳ１０３）。
【００７３】
続いて、検証情報作成部１３ｂは、取り出した分離マークアップ（ｍ）に新しいｉｄ、すなわち１つのソースコードに含まれるブロック間で連番となるシーケンス番号を生成する（ステップＳ１０４）。そして、検証情報作成部１３ｂは、生成したｉｄを分離マークアップ（ｍ）へ付加する（ステップＳ１０５）。なお、既にｉｄが分離マークアップに付加されていた場合には、新たに生成したｉｄが上書きされることになる。
【００７４】
その後、検証情報作成部１３ｂは、分離マークアップ（ｍ）のハッシュ値（ｈ１）を算出するとともにそのブロック内部のハッシュ値（ｈ２）を算出する（ステップＳ１０６及びＳ１０７）。
【００７５】
そして、検証情報作成部１３ｂは、分離マークアップ（ｍ）へ付加したｉｄ、ハッシュ値（ｈ１）及びハッシュ値（ｈ２）を検証情報テーブル１２ｃへ登録する（ステップＳ１０８）。
【００７６】
そして、検証情報作成部１３ｂは、分離マークアップ群（Ｍ）に含まれる全ての分離マークアップ（ｍ）に対し、上記のステップＳ１０３〜Ｓ１０８までの処理が終了するまで（ステップＳ１０９Ｎｏ）、検証情報の作成・登録を繰り返し行う。
【００７７】
その後、全ての分離マークアップ（ｍ）に対して上記のステップＳ１０３〜Ｓ１０８までの処理が終了すると（ステップＳ１０９Ｙｅｓ）、検証情報作成部１３ｂは、検証情報付きのソースコードを記憶部１２へ保存し（ステップＳ１１０）、処理を終了する。
【００７８】
なお、図８のフローチャートでは、上記のステップの順に処理を行うこととしたが、これらの各ステップは処理順序を適宜変更できる。例えば、ステップＳ１０６及びＳ１０７の処理は、順序が逆であってもよいし、それぞれを並列して行うこととしてもよい。
【００７９】
（２）文書出力処理
次に、図９を用いて、本実施例に係る文書出力処理を説明する。図９は、実施例２に係る文書出力処理の手順を示すフローチャートである。この処理は、Ｗｅｂアプリ１３ａによってブラウザへのレスポンスとしてＨＴＭＬ文書が出力された場合に起動される。
【００８０】
図９に示すように、Ｗｅｂアプリ１３ａからブラウザへのレスポンスを受信すると（ステップＳ２０１）、ＸＳＳ検査部１３ｃは、ＸＳＳ攻撃の他、ＸＳＳ攻撃以外にける検査ルールの不整合の有無を検査する（ステップＳ２０２）。なお、この「ＸＳＳ検査処理」の詳細は、図１０を用いて後述する。
【００８１】
そして、ＸＳＳ検査部１３ｃによりブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）と判定された場合（ステップＳ２０３Ｎｏ）には、Ｗｅｂアプリ１３ａは、ブラウザへのレスポンスをエラーレスポンスへ置き換える（ステップＳ２０４）。
【００８２】
一方、ＸＳＳ検査部１３ｃにより合格（ＯＫ）、すなわちブラウザへのレスポンスを許可すると判定された場合（ステップＳ２０３Ｙｅｓ）には、汚染検証部１３ｄは、ＨＴＭＬ文書に含まれる分離マークアップの汚染の有無を検証する（ステップＳ２０５）。なお、この「汚染検証処理」の詳細は、図１１を用いて後述する。
【００８３】
そして、汚染検証部１３ｄにより不合格（ＮＧ）、すなわちブラウザへのレスポンスを許可しないと判定された場合（ステップＳ２０６Ｎｏ）には、Ｗｅｂアプリ１３ａは、ブラウザへのレスポンスをエラーレスポンスへ置き換える（ステップＳ２０４）。
【００８４】
一方、汚染検証部１３ｄにより合格（ＯＫ）、すなわちブラウザへのレスポンスを許可すると判定された場合（ステップＳ２０６Ｙｅｓ）には、分離マークアップ除去部１３ｅは、ＨＴＭＬ文書から分離マークアップを除去する（ステップＳ２０７）。そして、Ｗｅｂアプリ１３ａは、分離マークアップが除去されたＨＴＭＬ文書をブラウザに返送し（ステップＳ２０８）、処理を終了する。
【００８５】
なお、図９のフローチャートでは、上記のステップの順に処理を行うこととしたが、これらの各ステップは処理順序を適宜変更できる。例えば、ステップＳ２０２及びＳ２０５の処理は、順序が逆であってもよいし、それぞれを並列して行うこととしてもよい。
【００８６】
（３）ＸＳＳ検査処理
次に、図１０を用いて、本実施例に係るＸＳＳ検査処理を説明する。図１０は、図９のステップＳ２０２に示したＸＳＳ検査処理の手順を示すフローチャートである。この処理は、Ｗｅｂアプリ１３ａによってＨＴＭＬ文書が出力された場合に起動される。
【００８７】
図１０に示すように、ＸＳＳ検査部１３ｃは、Ｗｅｂアプリ１３ａによってブラウザへのレスポンスとして出力されたＨＴＭＬ文書から、Ｍ個の分離マークアップ群を抽出する（ステップＳ３０１）。そして、ＸＳＳ検査部１３ｃは、Ｍ個のうち１つの分離マークアップ（ｍ）を取り出す（ステップＳ３０２）。
【００８８】
このとき、分離マークアップ（ｍ）のブロック種別が「Unsafe」である場合（ステップＳ３０３Ｙｅｓ）には、ＸＳＳ検査部１３ｃは、スクリプトの存在が許可されているので、スクリプトの検出を行わない。但し、ＸＳＳ検査部１３ｃは、所定の表示部（図２には図示せず）へ警告を表示するか、或いは分離マークアップのログを記憶部１２へ出力するかの少なくともいずれかを実行し（ステップＳ３０４）、ステップＳ３１２へ移行する。
【００８９】
また、分離マークアップ（ｍ）のブロック種別が「Safe」である場合（ステップＳ３０５Ｙｅｓ）には、ＸＳＳ検査部１３ｃは、スクリプトの存在が無条件に許可されているので、スクリプトの検出を行わずにステップＳ３１２へ移行する。
【００９０】
ここで、分離マークアップ（ｍ）のブロック種別が「Dynamic」である場合（ステップＳ３０６Ｙｅｓ）には、ＸＳＳ検査部１３ｃは、分離マークアップ（ｍ）のブロック内部にスクリプトが含まれるか否かを検査する（ステップＳ３０７）。
【００９１】
このとき、スクリプトが含まれている場合（ステップＳ３０７Ｙｅｓ）には、ＸＳＳ検査部１３ｃは、ブロックのデータの出所がユーザであるので、ＸＳＳ攻撃が行われたおそれがあると判定する（ステップＳ３０８）。このようにしてＸＳＳ攻撃を検出したと判定した場合には、ＸＳＳ検査部１３ｃは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答し（ステップＳ３０９）、処理を終了する。一方、スクリプトが含まれていない場合（ステップＳ３０７Ｎｏ）には、ＸＳＳ検査部１３ｃは、ＸＳＳ攻撃が行われたおそれなしと判定し、ステップＳ３１２へ移行する。
【００９２】
また、分離マークアップ（ｍ）のブロック種別が「Static」である場合（ステップＳ３０６Ｎｏ）には、ＸＳＳ検査部１３ｃは、分離マークアップ（ｍ）のブロック内部にスクリプトが含まれるか否かを検査する（ステップＳ３１０）。
【００９３】
このとき、スクリプトが含まれている場合（ステップＳ３１０Ｙｅｓ）には、ＸＳＳ検査部１３ｃは、ブラウザへ出力しようとするＨＴＭＬ文書に不整合な部分があると判定する（ステップＳ３１１）。このようにしてＨＴＭＬ文書に不整合な部分があると判定した場合には、ＸＳＳ検査部１３ｃは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答し（ステップＳ３０９）、処理を終了する。一方、スクリプトが含まれていない場合（ステップＳ３１０Ｎｏ）には、ＸＳＳ検査部１３ｃは、整合性ありと判定し、ステップＳ３１２へ移行する。
【００９４】
そして、分離マークアップ群（Ｍ）に含まれる全ての分離マークアップ（ｍ）に対し、上記のステップＳ３０２〜Ｓ３１１までの処理が終了するまで（ステップＳ３１２Ｎｏ）、ＸＳＳ攻撃及び検査ルールの不整合の有無の検査を繰り返し行う。
【００９５】
その後、全ての分離マークアップ（ｍ）に対して上記のステップＳ３０２〜Ｓ３１１までの処理が終了すると（ステップＳ３１２Ｙｅｓ）、ＸＳＳ検査部１３ｃは、次の処理を行う。すなわち、ＸＳＳ検査部１３ｃは、ブラウザへのレスポンスを許可する旨、すなわち合格（ＯＫ）をＷｅｂアプリ１３ａへ応答し（ステップＳ３１３）、処理を終了する。
【００９６】
（４）汚染検証処理
次に、図１１を用いて、本実施例に係る汚染検証処理を説明する。図１１は、図９のステップＳ２０５に示した汚染検証処理の手順を示すフローチャートである。この処理は、ＸＳＳ検査部１３ｃによりブラウザへのレスポンスを許可する旨、すなわち合格（ＯＫ）がＷｅｂアプリ１３ａへ応答された場合に起動される。
【００９７】
図１１に示すように、汚染検証部１３ｄは、Ｗｅｂアプリ１３ａによってブラウザへのレスポンスとして出力されたＨＴＭＬ文書から、Ｍ個の分離マークアップ群を抽出する（ステップＳ４０１）。そして、汚染検証部１３ｄは、Ｍ個のうち１つの分離マークアップ（ｍ）を取り出し（ステップＳ４０２）、その分離マークアップ（ｍ）のブロック内部からｉｄ´を取得する（ステップＳ４０３）。
【００９８】
さらに、汚染検証部１３ｄは、分離マークアップ（ｍ）のハッシュ値（ｈ１´）を算出するとともにそのブロック内部のハッシュ値（ｈ２´）を算出する（ステップＳ４０４及びＳ４０５）。その上で、汚染検証部１３ｄは、分離マークアップのブロック内部から取得したｉｄ´を検索キーとして、検証情報テーブル１２ｃを検索する（ステップＳ４０６）。
【００９９】
このとき、ｉｄ´と同じｉｄが存在しない場合（ステップＳ４０７Ｎｏ）には、汚染検証部１３ｄは、分離マークアップ（ｍ）がｉｄ偽造のマークアップであるおそれがあるので、分離マークアップの汚染を検出したと判定する（ステップＳ４０８）。かかる判定を行った場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答し（ステップＳ４０９）、処理を終了する。
【０１００】
また、ｉｄ´と同じｉｄが存在する場合（ステップＳ４０７Ｙｅｓ）には、汚染検証部１３ｄは、ｉｄのハッシュ値（ｈ１）とｉｄ´のハッシュ値（ｈ１´）とが一致するか否かを判定する（ステップＳ４１０）。
【０１０１】
このとき、ハッシュ値（ｈ１）とハッシュ値（ｈ１´）が一致しない場合（ステップＳ４１０Ｎｏ）には、汚染検証部１３ｄは、分離マークアップ（ｍ）が分離マークアップ形式を偽造したマークアップであるおそれがある。このため、汚染検証部１３ｄは、分離マークアップの汚染を検出したと判定する（ステップＳ４０８）。かかる判定を行った場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答し（ステップＳ４０９）、処理を終了する。
【０１０２】
また、ハッシュ値（ｈ１）とハッシュ値（ｈ１´）が一致する場合（ステップＳ４１０Ｙｅｓ）には、汚染検証部１３ｄは、分離マークアップ（ｍ）のブロック種別が「Dynamic」であるか否かを判定する（ステップＳ４１１）。そして、ブロック種別が「Dynamic」でない場合（ステップＳ４１１Ｎｏ）には、汚染検証部１３ｄは、ブロック種別が「Unsafe」であるか否かをさらに判定する（ステップＳ４１２）。
【０１０３】
このとき、ブロック種別が「Dynamic」又は「Unsafe」のいずれかである場合（ステップＳ４１１Ｙｅｓ又はＳ４１２Ｙｅｓ）には、汚染検証部１３ｄは、ブロック内部の動的出力が許可されている。このため、汚染検証部１３ｄは、ハッシュ値（ｈ２）とハッシュ値（ｈ２´）の一致可否を検出せずにステップＳ４１５へ移行する。
【０１０４】
一方、ブロック種別が「Static」又は「Safe」のいずれかである場合（ステップＳ４１１ＮｏかつＳ４１２Ｎｏ）には、汚染検証部１３ｄは、ｉｄのハッシュ値（ｈ２）とｉｄ´のハッシュ値（ｈ２´）とが一致するか否かを判定する（ステップＳ４１３）。
【０１０５】
このとき、ハッシュ値（ｈ２）とハッシュ値（ｈ２´）が一致しない場合（ステップＳ４１３Ｎｏ）には、汚染検証部１３ｄは、分離マークアップ（ｍ）のブロック内部が改ざんされたおそれがある。このため、汚染件書部１３ｄは、分離マークアップの汚染を検出したと判定する（ステップＳ４１４）。このようにして、分離マークアップの汚染を検出した場合には、汚染検証部１３ｄは、ブラウザへのレスポンスを許可しない旨、すなわち不合格（ＮＧ）をＷｅｂアプリ１３ａへ応答し（ステップＳ４０９）、処理を終了する。
【０１０６】
一方、ハッシュ値（ｈ２）とハッシュ値（ｈ２´）が一致した場合（ステップＳ４１３Ｙｅｓ）には、汚染検証部１３ｄは、分離マークアップ（ｍ）に汚染のおそれなしと判定し、ステップＳ４１５へ移行する。
【０１０７】
そして、分離マークアップ群（Ｍ）が含む全ての分離マークアップ（ｍ）に対し、上記のステップＳ４０２〜Ｓ４１４までの処理が終わるまで（ステップＳ４１５Ｎｏ）、汚染検証部１３ｄは、分離マークアップ及びブロックの汚染の有無の検証を繰り返し行う。
【０１０８】
その後、全ての分離マークアップ（ｍ）に対して上記のステップＳ４０２〜Ｓ４１４までの処理が終了すると（ステップＳ４１５Ｙｅｓ）、汚染検証部１３ｄは、次の処理を行う。すなわち、汚染検証部１３ｄは、ブラウザへのレスポンスを許可する旨、すなわち合格（ＯＫ）をＷｅｂアプリ１３ａへ応答し（ステップＳ４１６）、処理を終了する。
【０１０９】
なお、図１１のフローチャートでは、上記のステップの順に処理を行うこととしたが、これらの各ステップは処理順序を適宜変更できる。例えば、ステップＳ４０３〜Ｓ４０５の処理は、順序が逆であってもよいし、それぞれを並列して行うこととしてもよい。
【０１１０】
［検査例］
ここで、図１２〜１７を用いて、Ｗｅｂアプリによって出力されるＨＴＭＬ文書を例示しながらＸＳＳ攻撃の検査内容及び分離マークアップにおける汚染の検証内容を説明する。図１２は、正常なＨＴＭＬ文書の出力例を示す図である。図１３は、正常なＨＴＭＬ文書の出力に対する検査結果の一例を示す図である。図１４は、ＸＳＳ攻撃を含むＨＴＭＬ文書の出力例を示す図である。図１５は、ＸＳＳ攻撃を含むＨＴＭＬ文書に対する検査結果の一例を示す図である。図１６は、分離マークアップの汚染を含むＨＴＭＬ文書の出力例を示す図である。また、図１７は、分離マークアップの汚染を含むＨＴＭＬ文書に対する検証結果の一例を示す図である。
【０１１１】
図１２、図１４及び図１６は、図４に示す検証情報付きソースコードに動的出力が合成されたＨＴＭＬ文書であり、上から２番目の[[BLOCK  Dynamic  #id=49002]]〜[[BLOCK  END]]の分離マークアップ以外は図４と同様であるので説明を省略する。このうち、図１２に示す例では、図４に示す検証情報付きソースコードに入力値「田中  太郎」が動的出力された場合を示す。図１４に示す例では、図４に示す検証情報付きソースコードに入力値「<script>攻撃コード</script>」が動的出力された場合を示す。図１６は、図４に示す検証情報付きソースコードに入力値「[[BLOCK  END]][[BLOCK  Safe  #id=00001]]<script>攻撃コード</script>」が動的出力された場合を示す。
【０１１２】
図１３に示す例では、図１２に示したＨＴＭＬ文書の出力から分離マークアップのハッシュ値ｈ１´及びそのブロック内部のハッシュ値ｈ２´が算出された算出結果、ＸＳＳ検査結果、汚染検証結果をｉｄ´ごとに示す。図１５に示す例では、図１４に示したＨＴＭＬ文書の出力から分離マークアップのハッシュ値ｈ１´及びそのブロック内部のハッシュ値ｈ２´が算出された算出結果、ＸＳＳ検査結果、汚染検証結果をｉｄ´ごとに示す。図１７に示す例では、図１６に示したＨＴＭＬ文書の出力から分離マークアップのハッシュ値ｈ１´及びそのブロック内部のハッシュ値ｈ２´が算出された算出結果、ＸＳＳ検査結果、汚染検証結果をｉｄ´ごとに示す。なお、図１３、図１５及び図１７に示す例では、各々のハッシュ値の下に図１２、図１４又は図１６における該当部分の元データを示す。
【０１１３】
図１２に示すように、Ｗｅｂアプリ１３ａによって入力値「田中  太郎」が動的出力される場合には、ブロック種別が「Dynamic」である「#id=49002」及び「#id=49004」の動的出力にはスクリプトが包含されない。このため、図１３に示すように、「#id=49001」〜「#id=49004」までの全てのｉｄ´のＸＳＳ検査は合格（ＯＫ）となる。また、図１２に示すｉｄ´ごとのハッシュ値（ｈ１´）が図４に示す検証情報テーブル１２ｃに記憶されたｉｄごとのハッシュ値（ｈ１）と完全一致する。さらに、動的出力が禁止されるブロック種別「Safe」の「#id=49001」及び「#id=49003」のハッシュ値（ｈ２´）が図４に示す検証情報テーブル１２ｃに記憶された「#id=49001」及び「#id=49003」のハッシュ値（ｈ２）と一致する。このため、図１３に示すように、「#id=49001」〜「#id=49004」までの全てのｉｄ´の汚染検証は合格（ＯＫ）となる。
【０１１４】
図１４に示すように、Ｗｅｂアプリ１３ａによって入力値「<script>攻撃コード</script>」が動的出力される場合には、ブロック種別が「Dynamic」である「#id=49002」にスクリプトが包含される。このため、図１５に示すように、「#id=49002」のｉｄ´のＸＳＳ検査は不合格（ＮＧ）となる。なお、図１４に示すｉｄ´ごとのハッシュ値（ｈ１´）が図４に示す検証情報テーブル１２ｃに記憶されたｉｄごとのハッシュ値（ｈ１）と完全一致する。また、動的出力が禁止されるブロック種別「Safe」の「#id=49001」及び「#id=49003」のハッシュ値（ｈ２´）が図４に示す検証情報テーブル１２ｃに記憶された「#id=49001」及び「#id=49003」のハッシュ値（ｈ２）と一致する。このため、図１５に示すように、「#id=49001」〜「#id=49004」までの全てのｉｄ´の汚染検証は合格（ＯＫ）となる。
【０１１５】
図１６に示すように、Ｗｅｂアプリ１３ａによって入力値「[[BLOCK  END]][[BLOCK  Safe  #id=00001]]<script>攻撃コード</script>」が動的出力される場合には、ブロック種別が「Dynamic」である「#id=49002」及び「#id=49004」の動的出力にはスクリプトが含まれない。このため、図１７に示すように、「#id=49001」〜「#id=49004」までの全てのｉｄ´のＸＳＳ検査は合格（ＯＫ）となる。ところが、図１６に示す例では、図４に示す検証情報テーブル１２ｃのいずれのｉｄにも該当しない「#id=00001」がｉｄ´に含まれる。このため、図１７に示すように、「#id=00001」のｉｄ´の汚染検証は不合格（ＮＧ）となる。さらに、図１６に示すように、動的出力が禁止されるブロック種別「Safe」の「#id=00001」のハッシュ値（ｈ２´）が図４に示す検証情報テーブル１２ｃに登録されていない。それゆえｉｄのハッシュ値（ｈ２）とｉｄ´のハッシュ値（ｈ２´）にも不一致が発生する。このため、図１７に示すように、「#id=00001」のｉｄ´の汚染検証は不合格（ＮＧ）となる。
【０１１６】
［実施例２の効果］
上述してきたように、本実施例に係るＷｅｂサーバ１０では、ブロックのデータの出所がプログラマ又はそれ以外の者のいずれであるかを既知として検査できる。それゆえ、Ｗｅｂサーバ１０では、プログラマが記述した正当なコードを攻撃者が記述したものと誤検出したり、また、攻撃者が記述した攻撃コードをプログラマが記述した正当なコードと誤検出したりする事態を防止できる。したがって、本実施例に係るＷｅｂサーバ１０によれば、Ｗｅｂサーバによって攻撃コードを含む文書が出力されるのを防止することが可能になる。
【０１１７】
さらに、本実施例に係るＷｅｂサーバ１０では、一般性のある検査ルールを用いて、Ｗｅｂサーバから出力される攻撃コードを検査できる。このため、プログラマによるコーディングを出所情報の付加作業に集約できる。したがって、本実施例に係るＷｅｂサーバ１０によれば、Ｗｅｂサーバが出力する文書を検査するのにあたってプログラマに多大な労力を負わせることもなくなる。
【０１１８】
加えて、本実施例に係るＷｅｂサーバ１０では、出所情報としてプログラマではなくユーザが示されているブロックについては、スクリプトが存在するか否かを検査する。このため、出所がユーザであるブロックにスクリプトが存在する場合には、ＸＳＳ攻撃が行われたと即座に判定できるので、ＸＳＳ攻撃の検査ルールを単純化できる。したがって、本実施例に係るＷｅｂサーバ１０によれば、多種多様のＷｅｂアプリに対して同様のＸＳＳ攻撃の検査ルールを適用できる。
【０１１９】
また、本実施例に係るＷｅｂサーバ１０では、Ｗｅｂアプリ１３ａよるＨＴＭＬ文書の出力時にその分離マークアップの文字列の偽装を看破できる。さらに、Ｗｅｂアプリ１３ａよるＨＴＭＬ文書の出力時にブロック内部の文字列の偽装を看破できる。先頭の分離マークアップの前部、分離マークアップ間、或いは最後尾の分離マークアップの後部への偽装マークアップの挿入を看破できる。このため、本実施例に係るＷｅｂサーバ１０によれば、分離マックアップ全般に関する偽装を防止できる。
【実施例３】
【０１２０】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１２１】
［応用例］
例えば、上記の実施例２では、ＸＳＳ攻撃を検査する場合を例示したが、開示の装置の検査対象が狭義のＸＳＳ攻撃（スクリプト）に限定されるものではない。例えば、不正な画像の注入を検査対象とする観点から、図６に示す指定要素に「img」タグを含めることもできる。また、外部サイトのリソースへの誘導を検査対象とする観点から、図６に示す指定要素にＨＴＭＬタグのＵＲＬ属性の値における外部サイトのＵＲＬを含めることもできる。さらに、危険タグを検査対象とする観点から、図６に示す指定要素にＷｅｂサーバ１０を利用するユーザが指定する任意のタグ、例えば「object」タグや「frame」タグなどを含めることもできる。加えて、図６に示す指定要素にテキスト以外の全てのＨＴＭＬタグを含めることもできる。開示の装置では、上述した指定要素として少なくとも１つが指定されている場合に好適に実施することができる。
【０１２２】
また、上記の実施例２では、検証情報作成部１３ｂが検証情報としてシーケンス番号やハッシュ値を作成する場合を説明したが、これらの２種類の検証情報に開示の装置の検証情報が限定されない。例えば、検証情報作成部１３ｂは、外部から秘匿した秘密値を生成し、その秘密値をオリジナルソースコードのブロックごとに付加して検証情報付きソースコードを生成するとともにブロックに対応付けて秘密値を記憶部１２へ格納する。一方、汚染検証部１３ｄは、Ｗｅｂアプリ１３ａからブラウザへのレスポンスを受信した場合に、分離マークアップから抽出した秘密値が予め記憶部１２に記憶された秘密値と一致するか否かを判定する。これによって、シーケンス番号やハッシュ値と同様に偽装マークアップを看破できる。
【０１２３】
［適用例］
例えば、上記の実施例２では、ＸＳＳ検査部１３ｃがＷｅｂアプリによって出力される文書を検査したり、また、汚染検証部１３ｄがＷｅｂアプリによって出力される文書を検証する場合を例示した。しかし、開示の装置の検査対象及び検証対象は、Ｗｅｂアプリによって出力される文書にされない。すなわち、開示の装置では、ＬＡＮやＷＡＮを介してクライアントと接続されるサーバ装置に搭載されたアプリケーションが出力する文書を検査対象及び検証対象とすることができる。
【０１２４】
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、Ｗｅｂアプリ１３ａと、検証情報作成部１３ｂ、ＸＳＳ検査部１３ｃ、汚染検証部１３ｄ及び分離マークアップ除去部１３ｅとに分散してもよい。つまり、検証情報作成部１３ｂ、ＸＳＳ検査部１３ｃ、汚染検証部１３ｄ及び分離マークアップ除去部１３ｅをＷｅｂサーバの外部装置としてネットワーク経由で接続するようにしてもよい。また、Ｗｅｂアプリ１３ａ、検証情報作成部１３ｂ、ＸＳＳ検査部１３ｃ、汚染検証部１３ｄ又は分離マークアップ除去部１３を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記のＷｅｂサーバの機能を実現するようにしてもよい。また、記憶部に記憶される検査ルールテーブル１２ｂ、検査情報テーブル１２ｃの全部または一部を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記のＷｅｂサーバの機能を実現するようにしてもかまわない。
【０１２５】
［検査プログラム］
また、上記の実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１８を用いて、上記の実施例と同様の機能を有する検査プログラムを実行するコンピュータの一例について説明する。なお、図１８は、実施例３に係る検査プログラムを実行するコンピュータの一例について説明するための図である。
【０１２６】
図１８に示すように、実施例Ｘにおけるコンピュータ１００は、操作部１１０ａと、マイク１１０ｂと、スピーカ１１０ｃと、ディスプレイ１０２と、通信部１３０とを有する。さらに、このコンピュータ１００は、ＣＰＵ１５０と、ＲＯＭ１６０と、ＨＤＤ（Hard  Disk  Drive）１７０と、ＲＡＭ（Random  Access  Memory）１８０と有する。これら１１０〜１８０の各部はバス１４０を介して接続される。
【０１２７】
ＲＯＭ１６０には、上記の実施例２で示したＷｅｂアプリ１３ａと、検証情報作成部１３ｂと、ＸＳＳ検査部１３ｃと、汚染検証部１３ｄと、分離マークアップ除去部１３ｅと同様の機能を発揮する制御プログラムが予め記憶される。つまり、ＲＯＭ１６０には、図１８に示すように、Ｗｅｂアプリケーションプログラム１６０ａと、検証情報作成プログラム１６０ｂと、ＸＳＳ検査プログラム１６０ｃと、汚染検証プログラム１６０ｄと、分離マークアップ除去部１６０ｅとが記憶される。なお、これらのプログラム１６０ａ〜１６０ｅについては、図２に示した検査装置の各構成要素と同様、適宜統合又は分離しても良い。
【０１２８】
そして、ＣＰＵ１５０が、これらのプログラム１６０ａ〜１６０ｅをＲＯＭ１６０から読み出して実行する。これによって、ＣＰＵ１５０は、図１８に示すように、各プログラム１６０ａ〜１６０ｅについては、Ｗｅｂアプリケーションプロセス１５０ａ、検証情報作成プロセス１５０ｂ、ＸＳＳ検査プロセス１５０ｃとして機能するようになる。さらに、ＣＰＵ１５０は、図１８に示すように、汚染検証プロセス１５０ｄ及び分離マークアップ除去部１５０ｅとして機能するようになる。なお、各プロセス１５０ａ〜１５０ｅは、図Ｘに示した、Ｗｅｂアプリ１３ａと、検証情報作成部１３ｂと、ＸＳＳ検査部１３ｃと、汚染検証部１３ｄと、分離マークアップ除去部１３ｅとにそれぞれ対応する。
【０１２９】
そして、ＨＤＤ１７０には、ソースファイル１７０ａと、検査ルールテーブル１７０ｂと、検証情報テーブル１７０ｃとが設けられる。なお、これらソースファイル１７０ａ、検証情報テーブル１７０ｂ及び検査ルールテーブル１７０ｃは、図２に示したソースコード１２ａ、検査ルールテーブル１２ｂ及び検証情報テーブル１２ｃに対応する。
【０１３０】
そして、ＣＰＵ１５０は、ソースファイル１７０ａ、検査ルールテーブル１７０ｂ及び検証情報テーブル１７０ｃを読み出してＲＡＭ１８０に格納する。さらに、ＣＰＵ１５０は、ＲＡＭ１８０に格納されたソースコード１８０ａと、検査ルールデータ１８０ｂと、検証情報１８０ｃとを用いて、検査プログラムを実行する。
【符号の説明】
【０１３１】
１    検査装置
２    検査ルール記憶部
３    文書受付部
４    検査部
１０    Ｗｅｂサーバ
１１    通信制御Ｉ／Ｆ部
１２    記憶部
１２ａ  ソースコード
１２ｂ  検査ルールテーブル
１２ｃ  検証情報テーブル
１３    制御部
１３ａ  Ｗｅｂアプリ
１３ｂ  検証情報作成部
１３ｃ  ＸＳＳ検査部
１３ｄ  汚染検証部
１３ｅ  分離マークアップ除去部
【図１】
0005458829.tif 000002
【図２】
0005458829.tif 000003
【図３】
0005458829.tif 000004
【図４】
0005458829.tif 000005
【図５】
0005458829.tif 000006
【図６】
0005458829.tif 000007
【図７】
0005458829.tif 000008
【図８】
0005458829.tif 000009
【図９】
0005458829.tif 000010
【図１０】
0005458829.tif 000011
【図１１】
0005458829.tif 000012
【図１２】
0005458829.tif 000013
【図１３】
0005458829.tif 000014
【図１４】
0005458829.tif 000015
【図１５】
0005458829.tif 000016
【図１６】
0005458829.tif 000017
【図１７】
0005458829.tif 000018
【図１８】
0005458829.tif 000019
【図１９】
0005458829.tif 000020
【図２０】
0005458829.tif 000021
【図２１】
0005458829.tif 000022