(57)【要約】【課題】自由度の高い汎用的なフォーマットを持つ構造化文書のうち、不正な構造化文書の入力を拒否することができるようにする。【解決手段】入力データ制限装置１は、構造化文書２ａが入力されると、入力された構造化文書２ａの構造を自由度制限条件１ａと比較する（ステップＳ１）。入力された構造化文書２ａが自由度制限条件１ａを満たしていない場合、入力データ制限装置１は、入力された構造化文書の送信元であるクライアント２に関連付けてエラー情報１ｂを記録する（ステップＳ２）。そして、コンピュータは、クライアント２に関連付けられたエラー情報１ｂが所定の条件を満たした場合、以後のクライアント２からの構造化文書２ｂの入力を拒否する（ステップＳ３）。入力データ制限装置１で入力が拒否されず、自由度制限を満たした構造化文書は、構造化文書処理装置３に入力され、解析される（ステップＳ４）。【選択図】        図１
2005056007.tif 000002
【特許請求の範囲】
【請求項１】
入力される構造化文書の受け取りの許否を判定する入力データ制限プログラムにおいて、
コンピュータに、
文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較し、
前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする入力データ制限プログラム。
【請求項２】
前記クライアントから送られた構造化文書によるエラーの発生回数が所定回数以上になった場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする請求項１記載の入力データ制限プログラム。
【請求項３】
前記自由度制限条件には、制限内容毎に攻撃性を表す数値が定義されており、前記構造化文書が前記自由度制限条件を満たしていない場合、違反している制限内容に応じた攻撃性を表す数値を含む前記エラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報に含まれる攻撃性を表す数値の合計が所定値以上になった場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする請求項１記載の入力データ制限プログラム。
【請求項４】
前記入力された構造化文書の構造が前記自由度制限条件を満たしていない場合、前記入力された構造化文書を破棄する、
処理を実行させることを特徴とする請求項１記載の入力データ制限プログラム。
【請求項５】
入力される構造化文書の受け取りの許否を判定する入力データ制限方法において、
文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較し、
前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する、
ことを特徴とする入力データ制限方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は入力される構造化文書の受け取りの許否を判定する入力データ制限プログラムおよび入力データ制限方法に関し、特に自由度の高い構造化文書の受け取りの許否を判定する入力データ制限プログラムおよび入力データ制限方法に関する。
【０００２】
【従来の技術】
インターネット等を介した情報交換では、構造化文書によって情報交換する場合がある。構造化文書を用いれば、その構造化文書を受け取ったときにその構造を解析することができ、文書内の個々の要素に対する処理が容易となる。たとえば、所定の項目内の文字列をデータベースに登録する等の処理が容易である。
【０００３】
構造化文書には、自由度の高い汎用的なフォーマットを持つものがある。自由度の高い汎用的なフォーマットを持つ構造化文書は、データ作成の容易性などの理由で処理システムが受け付けることのできるデータ形式として採用されることが多い。特に、一般的に使用されているＳＧＭＬ（Ｓｔａｎｄａｒｄ  Ｇｅｎｅｒａｌｉｚｅｄ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、ＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などにおいては、クライアントにとってはデータを作成しやすいという利点がある。また、処理システムの側でも一般的に流通している解析モジュールを利用することでデータ解析が容易となる利点がある。
【０００４】
ところで、近年のインターネットの発達により、インターネット経由で自由度の高い汎用的なフォーマットを持つ入力データを受け付けることのできるシステムが増加している。特にＸＭＬにおいてその傾向が顕著である。たとえば、セキュリティ処理が施された電子文書をネットワーク経由で送受信する場合、その電子文書をＸＭＬで作成するシステムも提案されている（例えば、特許文献１参照）。
【０００５】
【特許文献１】
特開２００３−９１６４９号公報
【０００６】
【発明が解決しようとする課題】
しかし、インターネットという環境においては、必ずしもクライアントが正当な入力データを送信してくるとは限らない。そのため、ＸＭＬを用いて自由度の高いデータの送受信環境を構築すると、悪意のある第三者からの攻撃に対する防御が弱くなってしまう。たとえば、悪意のある第三者が、自由度の高さを逆手に取った不正な構造化文書を送信することで、サーバ側の入力データ処理プログラムの負荷を増大させるケースが考えられる。また、自由度が高いほどセキュリティホールが発生する可能性が高まる。そのセキュリティホールが悪意のある第三者に狙われると、最悪の場合、システムが乗っ取られてしまう。
【０００７】
これらのケースでは、単に定められたフォーマットに従っていることをデータ解析によって確認するだけでは不十分であり、自由度を制限して悪意を持つクライアントの攻撃を回避するような仕組みが必要となる。
【０００８】
本発明はこのような点に鑑みてなされたものであり、自由度の高い汎用的なフォーマットを持つ構造化文書のうち不正な構造化文書の入力を拒否することができる入力データ制限プログラムおよび入力データ制限方法を提供することを目的とする。
【０００９】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示すような入力データ制限プログラムが提供される。本発明に係る入力データ制限プログラムは、入力される構造化文書の受け取りの許否を判定する処理をコンピュータに実行させるためのものである。この入力データ制限プログラムに従ってコンピュータが以下の処理を実行する。
【００１０】
コンピュータは、文書構造上の許容範囲を示す自由度制限条件１ａが予め定義されており、構造化文書２ａが入力されると、入力された構造化文書２ａの構造を自由度制限条件１ａと比較する（ステップＳ１）。入力された構造化文書２ａが自由度制限条件を満たしていない場合、コンピュータは、入力された構造化文書の送信元であるクライアント２に関連付けてエラー情報１ｂを記録する（ステップＳ２）。そして、コンピュータは、クライアント２に関連付けられたエラー情報１ｂが所定の条件を満たした場合、以後のクライアント２からの構造化文書２ｂの入力を拒否する（ステップＳ３）。
【００１１】
このような入力データ制限プログラムを実行するコンピュータによれば、クライアント２から送られた構造化文書が自由度制限条件１ａを満たしていなければエラー情報１ｂが格納される。そのエラー情報１ｂが所定の条件を満たした場合、以後のクライアント２からの構造化文書２ｂの入力が拒否される。
【００１２】
また、上記課題を解決するために、入力される構造化文書の受け取りの許否を判定する入力データ制限方法において、文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較し、前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録し、前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する、ことを特徴とする入力データ制限方法が提供される。
【００１３】
このような入力データ制限方法によれば、クライアントから送られた構造化文書が自由度制限条件を満たしていなければエラー情報が格納される。エラー情報が所定の条件を満たすと、以後のクライアントからの構造化文書の入力が拒否される。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
まず、実施の形態に適用される発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。なお、本発明に係る入力データ制限プログラムを実行するコンピュータを入力データ制限装置とする。
【００１５】
図１は、実施の形態に適用される発明の概念図である。入力データ制限装置１は、クライアント２と構造化文書処理装置３との間に配置されている。クライアント２は、構造化文書２ａ，２ｂ，・・・を構造化文書処理装置３へ入力するためのコンピュータである。構造化文書処理装置３は、入力された構造化文書の文書構造を解析し、所定の処理を行う（たとえば、所定の項目内の情報をデータベースへ登録する）。
【００１６】
入力データ制限装置１は、クライアント２から構造化文書処理装置３へ入力される構造化文書２ａ，２ｂ，・・・の自由度を制限し、その制限に違反する構造化文書を、構造化文書処理装置３への入力前に破棄する。そのために、入力データ制限装置１には、予め文書構造上の許容範囲を示す自由度制限条件１ａが定義されている。そして、入力データ制限装置１は、構造化文書２ａ，２ｂ，・・・が入力された際に以下の処理を行う。
【００１７】
入力データ制限装置１は、構造化文書２ａが入力されると、入力された構造化文書２ａの構造を自由度制限条件１ａと比較する（ステップＳ１）。入力された構造化文書２ａが自由度制限条件１ａを満たしていない場合、入力データ制限装置１は、入力された構造化文書の送信元であるクライアント２に関連付けてエラー情報１ｂを記録する（ステップＳ２）。そして、コンピュータは、クライアント２に関連付けられたエラー情報１ｂが所定の条件を満たした場合、以後のクライアント２からの構造化文書２ｂの入力を拒否する（ステップＳ３）。入力データ制限装置１で入力が拒否されず、自由度制限条件１ａを満たした構造化文書は、構造化文書処理装置３に入力され、解析される（ステップＳ４）。
【００１８】
このように構造化文書の自由度を制限する機能と、過去のエラー情報１ｂから接続の許否を判断する機能とを有する入力データ制限装置１を設けることで、クライアント２から構造化文書が送信されると、過去のエラー情報１ｂから接続を受け入れるか否かの判断が行われる。ここで、接続を拒否すると判断した場合には、構造化文書処理装置３に対して構造化文書は渡されない。接続を受け入れると判断した場合、構造化文書があらかじめ指定された自由度制限条件１ａを超えるものでないかどうか検証される。自由度制限条件１ａを満たしていなければ、構造化文書処理装置３に対して構造化文書は渡されない。このとき、エラー情報１ｂが記録される。正当であると判断した場合は、その構造化文書が構造化文書処理装置３へと転送される。
【００１９】
このようにして攻撃者によりデータフォーマットの自由度を悪用した入力データが送信されてきた場合に、構造化文書処理装置３でのバッファオーバーフローなどの予期せぬエラーが発生することを防止できる。また、処理の負担が大きい構造化文書処理装置３にデータが渡る前にエラーを検出できる。さらに、攻撃者による連続して悪意のある入力データを送信するという攻撃を防止することができる。
【００２０】
なお、自由度制限条件１ａには、構造化文書のデータ構造上の様々な制限内容が設定される。制限内容は、フォーマットの自由度を持つ項目について、その長さまたは出現数などが超えてはならない閾値などが定義されている。構造化文書がＸＭＬ文書の場合、例えば以下のような制限内容（括弧内に対象となる項目名を示す）を自由度制限の対象とすることができる。
・ＸＭＬ文書のサイズ
・連続する空白文字の長さ
・名前の長さ（要素名、属性名、処理命令のターゲット名、実体名、記法名）
・値の長さ（コメントの内容、処理命令の内容、連続する文字データおよびＣＤＡＴＡセクションの内容、属性値、要素型宣言内の要素内容モデル、属性リスト宣言内の＃ＦＩＸＥＤキーワードで宣言されたデフォルト値、実体宣言内の置換テキスト、システム識別子、公開識別子、ＤＴＤ（Ｄｏｃｕｍｅｎｔ  Ｔｙｐｅ  Ｄｅｆｉｎｉｔｉｏｎ）宣言内のキーワードがＩＧＮＯＲＥである条件付セクションの内容の長さ）
・出現数（要素が持つ属性の数、要素が持つ子ノードの数、要素の入れ子の深さ、ＤＴＤ宣言、パラメタ実体参照）
すなわち、ＸＭＬの仕様では上記の項目には制限がない。よって既存のＸＭＬパーザでは上記の項目はエラーとして検出できない。そのため、不必要な長さまたは出現数の場合でも処理を続けてしまう。自由度制限モジュールによって不必要な長さまたは出現数を持つＸＭＬ文書をエラーとすることで、解析モジュールにＸＭＬ文書が入力される前にエラーとして処理を中止することができる。
【００２１】
また、そのようなデータを送信してくるクライアントは悪意を持っているとみなすこともできる。その場合はデータの受け付け自体を拒否するようにすることで、攻撃が及ぶ範囲を限定することが可能となる。
【００２２】
そこで、構造化文書がＸＭＬ文書の場合を例に採り、本発明の実施の形態を以下に説明する。
［第１の実施の形態］
まず、第１の実施の形態について説明する。第１の実施の形態では、クライアントから送信されたＸＭＬ文書によるエラー発生回数が所定回数以上になると、以後、そのクライアントからの接続を制限するようにしたものである。
【００２３】
図２は、本発明の実施の形態におけるシステム構成例を示す図である。第１の実施の形態では、クライアント２１と公開サーバ１００とがネットワーク１０を介して接続されている。ネットワーク１０は、たとえばインターネットである。また、公開サーバ１００には、ＸＭＬ処理サーバ２００が接続されている。
【００２４】
クライアント２１は、ユーザが使用するコンピュータである。クライアント２１は、ユーザからの操作入力等に応答して、ＸＭＬ文書をネットワーク１０経由で公開サーバ１００に送信する。公開サーバ１００は、クライアント２１から送られたＸＭＬ文書の入力の許否を判断し、受け取りを許可したＸＭＬ文書のみをＸＭＬ処理サーバ２００に渡す。ＸＭＬ処理サーバ２００は、渡されたＸＭＬ文書の文書構造を解析し、所定の処理を実行する。
【００２５】
図３は、本発明の実施の形態に用いる公開サーバのハードウェア構成例を示す図である。公開サーバ１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０８を介してＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０２、ハードディスクドライブ（ＨＤＤ：Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００２６】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００２７】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０８を介してＣＰＵ１０１に送信する。
【００２８】
通信インタフェース１０６は、ＸＭＬ処理サーバ２００に接続されており、ＸＭＬ処理サーバ２００との間でデータの送受信を行う。
通信インタフェース１０７は、ネットワーク１０に接続されている。通信インタフェース１０７は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００２９】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図３には、公開サーバ１００のハードウェア構成例を示したが、クライアント２１やＸＭＬ処理サーバ２００も同様のハードウェアで実現することができる。
【００３０】
図４は、第１の実施の形態の構成を示すブロック図である。図４の例では、クライアント２１から複数のＸＭＬ文書３１〜３３が公開サーバ１００に送信されるものとする。なお、ＸＭＬ文書３１のデータ容量は１ＭＢ（メガバイト）、ＸＭＬ文書３２のデータ容量は５００ＭＢ、ＸＭＬ文書３３のデータ容量は１ＭＢである。また、クライアント２１のＩＰアドレスは、「１０．３５．８６．６６」であるものとする。
【００３１】
公開サーバ１００は、所定のプログラムに基づいて、所定の処理を実行する。公開サーバ１００が有するプログラムは、複数のモジュールで構成される。各モジュールに基づいて、公開サーバ１００には、接続制限部１１０、自由度制限部１２０、およびエラー情報管理部１３０が構築される。
【００３２】
接続制限部１１０は、過去のエラー情報を基に入力データを受け入れるか否かの判断を行う。たとえば、過去に自由度制限部１２０により発生したエラーの数が３回以上発生した後は、入力データを受け付けないものとする。接続制限部１１０は、接続制限モジュールを公開サーバ１００が実行することで実現する機能である。具体的には、接続制限部１１０は、クライアント２１からＸＭＬ文書３１〜３３を受け取ると、クライアント２１のＩＰアドレス「１０．３５．８６．６６」がエラー情報管理部１３０に登録されているか否かを判断する。クライアント２１のＩＰアドレスがエラー情報管理部１３０に登録されていれば、接続制限部１１０は、クライアント２１からのアクセスを拒否する。すなわち、内容を解析することなくＸＭＬ文書が破棄される。
【００３３】
自由度制限部１２０は、予め定義されている自由度制限情報に基づいて、受付可能なＸＭＬ文書を制限する。自由度制限部１２０は、自由度制限モジュールを公開サーバ１００が実行することで実現する機能である。具体的には、自由度制限情報として、文書サイズの制限内容が定義されている。自由度制限部１２０は、自由度制限情報に定義されている各制限内容を、受信したＸＭＬ文書３１〜３３が満たしているか否か（制限内であるか否か）を判断する。この例では、文書サイズが１０ＭＢ未満であることが、制限内容として定義されているものとする。この場合、１０ＭＢ未満のデータ容量のＸＭＬ文書は、自由度制限を満たしている。１０ＭＢ以上のデータ容量のＸＭＬ文書は、自由度制限を満たしていない。
【００３４】
制限内容は、複数設定することもできる。その場合、全ての制限内容を満たすＸＭＬ文書は、自由度制限を満たす。少なくとも１つの制限内容を満たさないＸＭＬ文書は、自由度制限を満たさない。
【００３５】
自由度制限部１２０は、該当するＸＭＬ文書をＸＭＬ処理サーバ２００に渡す。少なくとも１つの制限内容を満たしていない場合、自由度制限部１２０は、エラー通知をエラー情報管理部１３０に対して行う。また、自由度制限部１２０は、エラー通知をクライアント２１に対しても行う。
【００３６】
エラー情報管理部１３０は、クライアント２１から送られたＸＭＬ文書によるエラー発生回数を管理する。エラー情報管理部１３０は、エラー管理モジュールを公開サーバ１００が実行することで実現する機能である。具体的には、エラー情報管理部１３０は、クライアント２１から送られたＸＭＬ文書によるエラー回数を計数するカウンタ１３１を有している。そして、エラー情報管理部１３０は、エラー通知を受け取ると、カウンタ１３１のエラー回数をカウントアップする。
【００３７】
ＸＭＬ処理サーバ２００は、解析部２１０を有している。ＸＭＬ処理サーバ２００では、公開サーバ１００から送られたＸＭＬ文書３１〜３３が解析部２１０で受け取られる。
【００３８】
解析部２１０は、ＸＭＬの仕様に従い、受け取ったＸＭＬ文書の文書構造を解析する。解析部２１０は、解析モジュールをＸＭＬ処理サーバ２００が実行することで実現する機能である。具体的には、解析部２１０は、自由度制限部１２０から受け取ったＸＭＬ文書のデータ構造を、文書内のタグ等に基づいて解析する。そして、解析部２１０は、所定のタグに設定されたデータをデータベースに登録する等の所定の処理を実行する。
【００３９】
以上のような構成のＸＭＬ処理サーバ２００によって、ネットワーク１０を介したＸＭＬ文書の取得および処理を安全に行うことができる。
図５は、ＸＭＬサーバの処理手順を示すフローチャートである。以下、図５に示す処理をステップ番号に沿って説明する。この処理は、クライアント２１から公開サーバ１００へＸＭＬ文書が送られたときに実行される。
【００４０】
［ステップＳ１１］公開サーバ１００では、接続制限部１１０がクライアント２１からのＸＭＬ文書を受信する。
［ステップＳ１２］接続制限部１１０は、エラー情報管理部１３０が保持しているカウンタ１３１を参照することで、クライアント２１から送られたＸＭＬ文書に基づく過去のエラー発生回数を調べる。
【００４１】
［ステップＳ１３］接続制限部１１０は、クライアント２１に関するエラー回数が３回未満か否かを判断する。３回未満であれば、ＸＭＬ文書が接続制限部１１０から自由度制限部１２０に渡され、処理がステップＳ１４に進められる。３回以上であれば、処理がステップＳ１９に進められる。
【００４２】
［ステップＳ１４］自由度制限部１２０は、ＸＭＬ文書のサイズを調べる。ＸＭＬ文書のサイズは、ヘッダ情報等を解析することで判断できる。
［ステップＳ１５］自由度制限部１２０は、ＸＭＬ文書のサイズが、１０ＭＢ未満か否かを判断する。たとえば、ＸＭＬ文書３１が送られた場合、１０ＭＢ未満であると判断される。また、ＸＭＬ文書３２が送られた場合、１０ＭＢ以上であると判断される。１０ＭＢ未満の場合、自由度制限部１２０から解析部２１０へＸＭＬ文書が渡され、処理がステップＳ１６に進められる。１０ＭＢ以上の場合、処理がステップＳ１８に進められる。
【００４３】
［ステップＳ１６］自由度制限部１２０は、ＸＭＬ処理サーバ２００にＸＭＬ文書を転送する。これにより、ＸＭＬ処理サーバ２００内の解析部２１０がＸＭＬ文書を解析し、ＸＭＬ文書の内容に応じた処理を実行する。
【００４４】
［ステップＳ１７］解析部２１０は、クライアント２１に対して処理結果を返す。その後、処理が終了する。
［ステップＳ１８］自由度制限部１２０は、エラー情報管理部１３０にエラーを通知する。すると、エラー情報管理部１３０は、エラー回数を示すカウンタ１３１の値をカウントアップする。
【００４５】
［ステップＳ１９］接続制限部１１０または自由度制限部１２０が、エラーの発生をクライアントに通知する。具体的には、ステップＳ１３で過去のエラー回数が３回以上と判断された場合、接続制限部１１０によってエラー通知が行われる。また、ステップＳ１５で文書サイズが１０ＭＢ以上と判断されたときは、自由度制限部１２０によってエラー通知が行われる。その後、処理が終了する。
【００４６】
以上のようにして、文書サイズが大きすぎる（１０ＭＢ以上）ＸＭＬ文書は、ＸＭＬ処理サーバ２００で受付可能なフォーマットであったとしても公開サーバ１００で破棄される。しかも、エラー回数が所定値（３回）以上になると文書サイズに関係なくクライアント２１から送られたＸＭＬ文書が破棄される。
【００４７】
たとえば、クライアント２１から過去に送られたＸＭＬ文書によりエラーが２回発生し、その後、ＸＭＬ文書３１（文書サイズが１ＭＢ）、ＸＭＬ文書３２（文書サイズが５００ＭＢ）、ＸＭＬ文書３３（文書サイズが１ＭＢ）の順でクライアント２１から公開サーバ１００にデータ入力が行われた場合を考える。
【００４８】
まず、クライアント２１から公開サーバ１００に対し、１ＭＢのサイズを持つＸＭＬ文書３１が入力される。すると、接続制限部１１０は過去のエラー回数を調べる。この時点ではまだエラー回数は２回であり、エラーが３回未満のため、接続制限部１１０はＸＭＬ文書３１の受け入れを許可する。
【００４９】
次に、自由度制限部１２０がＸＭＬ文書３１のサイズ（データ容量）をチェックする。サイズは１ＭＢであり制限値の１０ＭＢの範囲内であるため、ＸＭＬ文書３１が解析部２１０に渡され、解析部２１０によりＸＭＬ文書３１が解析される。そして、解析部２１０は、解析結果に応じて処理を行い、クライアント２１に結果を返却する。
【００５０】
次に、クライアント２１から公開サーバ１００に対し、５００ＭＢのサイズを持つＸＭＬ文書３２が入力される。すると、まず接続制限部１１０が過去のエラー回数を調べる。この時点ではまだエラー回数は２回であり、エラーが３回未満である。そのため、接続制限部１１０はＸＭＬ文書３２の受け入れを許可する。
【００５１】
次に、自由度制限部１２０は、ＸＭＬ文書３２のサイズをチェックする。サイズは５００ＭＢと制限値の１０ＭＢを超えているため、自由度制限部１２０は、ＸＭＬ文書３２を破棄し、エラー情報管理部１３０にエラーの発生を通知する。すると、エラー情報管理部１３０において、クライアント２１に対応するエラー回数がカウントアップされる。このとき、クライアント２１に対してもエラーが返される。
【００５２】
続けてクライアント２１が、ＸＭＬ文書３３を入力しようとした場合、接続制限部１１０は、クライアント２１の過去のエラー回数を調べる。結果として過去に３回のエラーが発生しているため、接続制限部１１０は入力データの受け入れを拒否し、クライアント２１にエラーを通知する。
【００５３】
このように、ＸＭＬ文書のデータサイズが所定値以上の場合に、そのＸＭＬ文書を受け取らないようにしたことで、不当に大きなサイズのＸＭＬ文書がＸＭＬ処理サーバ２００に入力されずにすむ。これにより、第三者からのＸＭＬ処理サーバ２００への攻撃を防ぐことができる。
【００５４】
すなわち、全てのＸＭＬ文書が解析部２１０に渡されると、どのようなサイズのＸＭＬ文書が入力されても、それを解析部２１０が解析しようとする。そのため、不当に大きなサイズのＸＭＬ文書が入力された場合には、ＸＭＬ処理サーバ２００にかかる負荷が過大となり、他の正常な入力データの処理に影響が及ぶ場合がある。本実施の形態に示すように、サイズが所定値以上のＸＭＬ文書の入力を排除することで、データサイズが大きいＸＭＬ文書が公開サーバ１００に送りつけられても、ＸＭＬ処理サーバ２００の処理に影響を及ぼさずにすむ。
【００５５】
［第２の実施の形態］
次に、第２の実施の形態について説明する。第２の実施の形態は、ＩＰアドレスによってクライアント毎にエラーを集計し、クライアントの接続制限を行うものである。
【００５６】
図６は、第２の実施の形態の構成を示すブロック図である。なお、第２の実施の形態では、ネットワーク１０とＸＭＬ処理サーバ２００については第１の実施の形態の同名の装置と同じ機能を有する。そこで、これらの構成要素には、図４に示した第１の実施の形態と同じ符号を付し、詳細な説明を省略する。
【００５７】
第２の実施の形態では、ネットワーク１０に複数のクライアント４１，４２，４３，・・・が接続されている。クライアント４１のＩＰアドレスは「１０．３５．８６．６１」であり、クライアント４２のＩＰアドレスは「１０．３５．８６．６２」であり、クライアント４３のＩＰアドレスは「１０．３５．８６．６３」である。クライアント４１，４２，４３，・・・からは、ＸＭＬ文書５１，５２，５３，・・・がネットワーク１０を介して公開サーバ３００に送られる。
【００５８】
公開サーバ３００は、クライアント識別部３１０、接続制限部３２０、自由度制限部３３０、およびエラー情報管理部３４０を有している。これらの要素の機能は、プログラムモジュールをコンピュータで実行することにより実現される。
【００５９】
クライアント識別部３１０は、クライアント４１，４２，４３，・・・からＸＭＬ文書５１，５２，５３，・・・転送のための接続要求を受け取ったとき、送信元のクライアントをＩＰアドレスによって識別する。そして、クライアント識別部３１０は、抽出したＩＰアドレスとＸＭＬ文書とを接続制限部３２０に渡す。
【００６０】
接続制限部３２０は、エラーログ３４１にＩＰアドレスが記録されているクライアントからの接続は受け付けないように、クライアントの接続制限を行う。具体的には、接続制限部３２０は、クライアント識別部３１０からＩＰアドレスを受け取ると、エラー情報管理部３４０が管理しているエラーログ３４１を参照し、受け取ったＩＰアドレスの有無を判断する。クライアント識別部３１０から受け取ったＩＰアドレスがエラーログ３４１に登録されていれば、接続制限部３２０は、エラーを発生させ、クライアントからのＸＭＬ文書の受け取りを拒否する。クライアント識別部３１０から受け取ったＩＰアドレスがエラーログ３４１に登録されていなければ、接続制限部３２０はＸＭＬ文書の受け取りを許可し、クライアント識別部３１０から受け取ったＩＰアドレスを自由度制限部３３０に渡す。
【００６１】
自由度制限部３３０は制限内容テーブル３３１を有している。制限内容テーブル３３１には、ＸＭＬ文書の自由度の制限内容が登録されている。自由度制限部３３０は、接続制限部３２０で受け取りが許可されたＸＭＬ文書をクライアントから受信する。そして、自由度制限部３３０は、受け取ったＸＭＬ文書が制限内容テーブル３３１に登録された制限内容の少なくとも１つに違反した場合、エラーを発生させそのＸＭＬ文書を破棄する。自由度制限部３３０は、エラーが発生した場合、接続制限部３２０から受け取ったＩＰアドレスとエラー内容とをエラー情報管理部３４０に渡す。また、自由度制限部３３０は、受け取ったＸＭＬ文書が制限内容テーブル３３１に登録された制限内容の全てに適合していた場合、そのＸＭＬ文書をＸＭＬ処理サーバ２００の解析部２１０に対して送信する。
【００６２】
エラー情報管理部３４０は、エラーを発生させたクライアントのＩＰアドレスとエラー内容とを、エラーログ３４１に登録し、管理する。具体的には、エラー情報管理部３４０は、自由度制限部３３０からＩＰアドレスとエラー内容とを受け取ると、それらの情報をエラーログ３４１に登録する。また、エラー情報管理部３４０は、接続制限部３２０からの要求に応じて、エラーログ３４１の内容を接続制限部３２０に渡す。
【００６３】
図７は、制限内容テーブルのデータ構造例を示す図である。制限内容テーブル３３１には、項目と正当である範囲との欄が設けられている。各欄の横方向に並べられた情報同士が互いに関連づけられてレコードを構成しており、各レコードが制限内容を示している。
【００６４】
項目の欄には、制限内容の判断対象となる項目が示されている。正当である範囲の欄には、判断対象となる項目毎の正当である範囲が設定されている。ＸＭＬ文書内の該当項目の内容が、正当である範囲を外れていた場合、そのＸＭＬ文書は受け取り制限対象として破棄される。
【００６５】
図７の例では、文書サイズが正当である範囲は、１ＭＢ以下である。連続する空白文字の数が正当である範囲は、１００文字以下である。コメントの長さが正当である範囲は、２００文字以下である。処理命令のターゲット名の長さが正当である範囲は、１００文字以下である。処理命令の長さが正当である範囲は、２００文字以下である。要素名の長さが正当である範囲は、１００文字以下である。要素が持つ属性の数が正当である範囲は、５０個以下である。属性名の長さが正当である範囲は、１００文字以下である。属性値の長さが正当である範囲は、１００文字以下である。連続する文字データおよびＣＤＡＴＡセクションの内容の長さが正当である範囲は、１００００文字以下である。要素が持つ子ノードの数が正当である範囲は、１００個以下である。要素の入れ子の深さが正当である範囲は、１０階層以下である。ＤＴＤ宣言が正当である範囲は、ＤＴＤ宣言が無いことである。
【００６６】
図８は、ＸＭＬ文書の判断対象項目の例を示す図である。ＸＭＬ文書５０は、タグによって項目が定義されている。図８には、ＤＴＤ宣言５０ａ、不当に長い要素名５０ｂ、不当に長い属性値５０ｃ、不当に長い空白文字５０ｄ、および不当に大きいＸＭＬ文書５０ｅの例が示されている。このようなＸＭＬ文書５０は、制限内容テーブル３３１に定義されている制限に違反し、自由度制限部３３０によってＸＭＬ処理サーバ２００への転送を拒否される。
【００６７】
図９は、エラーログのデータ構造例を示す図である。エラーログ３４１には、クライアントＩＰアドレスとエラー内容の欄が設けられている。各欄の横方向に並べられた情報同士が互いに関連づけられてレコードを構成しており、各レコードがエラー情報を示している。クライアントＩＰアドレスの欄には、エラーを生じさせたＸＭＬ文書の送信元のクライアントのＩＰアドレスが登録されている。エラー内容の欄には、クライアントＩＰアドレスに対応付けて、そのクライアントが送信したＸＭＬ文書によって生じたエラーの内容が登録されている。
【００６８】
図９の例では、ＩＰアドレス「１０．１２４．５０．１０１」のエラー内容は、「要素名長不当」である。ＩＰアドレス「１０．７４．１７３．１２０」のエラー内容は、「属性名長不当」である。ＩＰアドレス「１０．３１．２２１．５１」のエラー内容は、「コメント長不当」である。ＩＰアドレス「１０．３５．８６．６６」のエラー内容は、「文書サイズ不当」である。
【００６９】
以上のような構成のシステムにおいて、以下のような処理が行われる。
図１０は、第２の実施の形態の処理手順を示すフローチャートである。以下、図１０に示す処理をフローチャートに沿って説明する。
【００７０】
［ステップＳ２１］公開サーバ３００のクライアント識別部３１０は、クライアントからのＸＭＬ文書転送のための接続要求を受け付ける。
［ステップＳ２２］クライアント識別部３１０は、クライアントのＩＰアドレスを取得する。クライアント識別部３１０は、ＩＰアドレスを接続制限部３２０に渡す。
【００７１】
［ステップＳ２３］接続制限部３２０は、エラー情報管理部３４０からエラーログ３４１の内容を取得し、クライアント識別部３１０から受け取ったＩＰアドレスがエラーログ３４１に記録されている否かを調査する。
【００７２】
［ステップＳ２４］接続制限部３２０は、エラーログ３４１に該当するＩＰアドレスが登録されていない場合、過去にエラーが発生していないものと判断し、処理をステップＳ２５に進める。この際、接続制限部３２０は、ＩＰアドレスを自由度制限部３３０に渡す。また、接続制限部３２０は、エラーログ３４１に該当するＩＰアドレスが登録されていた場合、過去にエラーが有ったものと判断し、処理をステップＳ３０に進める。
【００７３】
［ステップＳ２５］自由度制限部３３０は、クライアントからＸＭＬ文書を受け取り、そのＸＭＬ文書が制限内容テーブル３３１に登録されている各制限内容を満たしているか否かを調査する。
【００７４】
［ステップＳ２６］自由度制限部３３０は、受け取ったＸＭＬ文書に、制限内容を超えた項目があるか否かを判断する。制限内容を超えた項目がない場合、処理がステップＳ２７に進められる。制限内容を超えた項目が少なくとも１つある場合、処理がステップＳ２９に進められる。
【００７５】
［ステップＳ２７］自由度制限部３３０は、ＸＭＬ文書をＸＭＬ処理サーバ２００に転送する。これにより、ＸＭＬ文書が解析部２１０に渡され、解析されると共に所定の処理が行われる。
【００７６】
［ステップＳ２８］自由度制限部３３０は、解析部２１０から処理結果を受け取り、その処理結果をクライアントに返す。その後、処理が終了する。
［ステップＳ２９］自由度制限部３３０は、自由度に関する制限内容の違反が見つかると、エラー情報管理部３４０に対してＩＰアドレスを渡すとともに、エラーの発生を通知する。すると、エラー情報管理部３４０が、エラー情報をエラーログ３４１に記録する。また、エラー情報管理部３４０は、エラーの発生を接続制限部３２０に通知する。
【００７７】
［ステップＳ３０］接続制限部３２０または自由度制限部３３０が、エラーの発生をクライアントに通知する。具体的には、ステップＳ２４で過去のエラー有りと判断された場合、接続制限部３２０によってエラー通知が行われる。また、ステップＳ２６で自由度の制限を越えていると判断されたときは、自由度制限部３３０によってエラー通知が行われる。その後、処理が終了する。
【００７８】
これにより、クライアントに公開された公開サーバ３００が接続を受け付け、一度エラーが発生した場合は、その後、同じクライアントからＸＭＬ処理サーバ２００へのＸＭＬ文書の入力を禁止することができる。
【００７９】
ここで、クライアント４１，４３が送信するＸＭＬ文書５１，５３は正当な内容であり、クライアント４２が送信するＸＭＬ文書５２は、不当に名前の長い要素（要素名の長さが１００文字を超える）を含んでいるものとする。また、図９に示すように、クライアント４１，４２のＩＰアドレスはエラーログ３４１に登録されていないが、クライアント４３のＩＰアドレスはエラーログ３４１に登録されているものとする。この場合の各ＸＭＬ文書５１，５２，５３に関する公開サーバ３００の処理を具体的に説明する。
【００８０】
はじめに、クライアント４１からのＸＭＬ文書５１送信時の処理について説明する。まず、クライアント４１がネットワーク１０を通じて公開サーバ３００に接続を要求する。すると、クライアント識別部３１０はクライアントのＩＰアドレスを取得する。そのＩＰアドレスに基づいて、接続制限部３２０がエラーログ３４１を調査する。エラーログ３４１にはクライアント４１のＩＰアドレスは記録されていないため、接続制限部３２０はクライアント４１の接続を許可する。
【００８１】
自由度制限部３３０はクライアント４１より送信されたＸＭＬ文書５１を受け取り、自由度の制限値を超えていないか検証を行う。ＸＭＬ文書５１は自由度制限の正当な範囲内であり、エラーは検出されない。そこで、自由度制限部３３０は、ＸＭＬ文書５１をＸＭＬ処理サーバ２００へ転送する。すると、ＸＭＬ文書５１が解析部２１０で解析される。ＸＭＬ文書５１は解析部２１０によりエラーは検出されないため、結果を成功として、公開サーバ３００に返却する。さらに公開サーバ３００はクライアント４１に成功という結果を返却する。たとえば、公開サーバ３００の自由度制限部３３０が解析部２１０からの結果を受け取り、クライアント４１に転送する。
【００８２】
次に、クライアント４２からのＸＭＬ文書５２送信時の処理について説明する。クライアント４２がネットワーク１０を通じて公開サーバ３００に接続を要求する。すると、クライアント識別部３１０はクライアント４２のＩＰアドレスを取得する。そのＩＰアドレスに基づいて、接続制限部３２０がエラーログ３４１を調査する。エラーログ３４１にはクライアント４２のＩＰアドレスは記録されていないため、接続制限部３２０はクライアント４２の接続を許可する。
【００８３】
自由度制限部３３０はクライアント４２より送信されたＸＭＬ文書５２を受け取り、自由度の制限値を超えていないか検証を行う。自由度制限部３３０によりＸＭＬ文書５２は不当な要素名の長さを持つことが検出されると、自由度制限部３３０はエラー情報管理部３４０にクライアント４２のＩＰアドレスおよびエラー種別を通知する。エラー情報管理部３４０は、通知された内容をエラーログ３４１に記録する。また、エラー情報管理部３４０は、クライアント４２にエラーとなった旨の結果を返却する。
【００８４】
次に、クライアント４３からのＸＭＬ文書５３送信時の処理について説明する。クライアント４３がネットワーク１０を通じて公開サーバ３００に接続を要求する。すると、クライアント識別部３１０はクライアント４３のＩＰアドレスを取得する。そのＩＰアドレスに基づいて、接続制限部３２０がエラーログ３４１を調査する。この場合、エラーログ３４１にクライアント４３のＩＰアドレスが記録されているため、接続制限部３２０はクライアント４３の接続を拒否し、クライアント４３にエラーとなった旨の結果を返却する。
【００８５】
このように、ＩＰアドレスがエラーログ３４１に登録されると、そのＩＰアドレスのクライアントからのＸＭＬ文書のＸＭＬ処理サーバ２００への入力は、公開サーバ３００で拒否される。しかも、ＸＭＬ文書内の項目毎に、自由度の制限内容が設定されているため、不正な内容を含むＸＭＬ文書を故意にＸＭＬ処理サーバ２００に送りつける行為を発見し、そのＸＭＬ文書を破棄することができる。
【００８６】
［第３の実施の形態］
次に第３の実施の形態について説明する。第３の実施の形態は、各エラーに攻撃性を表す数値を設定し、それをエラー情報に記録するようにしたものである。クライアントごとに攻撃性を表す数値の累計をとり、それがある閾値を超えた場合にそのクライアントの接続を拒否するようにする。これにより、さらに柔軟なアクセス制御を行うことができる。基本的な動作の流れは第２の実施の形態と同様であるが、エラーの記録方法およびクライアントの接続可否の判断に違いがある。
【００８７】
図１１は、第３の実施の形態の機能を示すブロック図である。第３の実施の形態では、クライアント６０からネットワーク１０を介して、ＸＭＬ文書６１〜６３が公開サーバ４００送信される。クライアント６０のＩＰアドレスは「１０．３５．８６．６６」である。なお、図１１では、クライアントが１台しか示されていないが、図６に示す第２の実施の形態と同様に複数台接続できる。
【００８８】
公開サーバ４００は、クライアント識別部４１０、接続制限部４２０、自由度制限部４３０、およびエラー情報管理部４４０を有している。これらの要素の機能は、プログラムモジュールをコンピュータで実行することにより実現される。
【００８９】
クライアント識別部４１０は、クライアント６０からＸＭＬ文書６１，６２，６３，・・・転送のための接続要求を受け取ったとき、送信元のクライアントをＩＰアドレスによって識別する。そして、クライアント識別部４１０は、抽出したＩＰアドレスとＸＭＬ文書とを接続制限部４２０に渡す。
【００９０】
接続制限部４２０は、エラー情報管理部４４０内の攻撃性合計値テーブル４４２において、攻撃性を表す数値の合計が所定値（本実施の形態では１０）以上であるクライアントからの接続は受け付けないように、クライアントの接続制限を行う。
【００９１】
具体的には、接続制限部４２０は、クライアント識別部４１０からＩＰアドレスを受け取ると、エラー情報管理部４４０が管理している攻撃性合計値テーブル４４２を参照し、受け取ったＩＰアドレスを検索する。クライアント識別部４１０から受け取ったＩＰアドレスが検出された場合、そのＩＰアドレスに対応するクライアントの攻撃性を示す数値の合計値を参照する。合計値が１０以上であれば、接続制限部４２０はエラーを発生させ、ＸＭＬ文書の受け取りを拒否する。クライアント識別部４１０から受け取ったＩＰアドレスが攻撃性合計値テーブル４４２に登録されていないか、もしくは、攻撃性の合計値が１０未満の場合、接続制限部４２０はＸＭＬ文書の受け取りを許可し、クライアント識別部４１０から受け取ったＩＰアドレスを自由度制限部４３０に渡す。
【００９２】
自由度制限部４３０は制限内容テーブル４３１を有している。制限内容テーブル４３１には、ＸＭＬ文書の自由度の制限内容が登録されている。自由度制限部４３０は、接続制限部４２０から接続を許可したクライアントのＩＰアドレスを受け取ると、該当するクライアントからＸＭＬ文書を受信する。そして、自由度制限部４３０は、受け取ったＸＭＬ文書が制限内容テーブル４３１に登録された制限内容の少なくとも１つに違反した場合、エラーを発生させそのＸＭＬ文書を破棄する。自由度制限部４３０は、エラーが発生した場合、接続制限部４２０から受け取ったＩＰアドレス、エラー内容および攻撃性を表す数値をエラー情報管理部４４０に渡す。また、自由度制限部４３０は、受け取ったＸＭＬ文書が制限内容テーブル４３１に登録された制限内容の全てに適合していた場合、そのＸＭＬ文書をＸＭＬ処理サーバ２００ａの解析部２２０に対して送信する。
【００９３】
エラー情報管理部４４０は、エラーを発生させたクライアントのＩＰアドレス、エラー内容および攻撃性を表す数値をエラーログ４４１に登録し、管理する。また、エラー情報管理部４４０は、攻撃性を表す通知をクライアント毎に合計し、攻撃性合計値テーブル４４２で管理する。具体的には、エラー情報管理部４４０は、自由度制限部４３０からＩＰアドレス、エラー内容、および攻撃性を表す数値を受け取ると、それらの情報をエラーログ４４１に登録する。このとき、エラー情報管理部４４０は、攻撃性合計値テーブル４４２の内容の更新も行う。また、エラー情報管理部４４０は、接続制限部４２０からの要求に応じて、攻撃性合計値テーブル４４２の内容を接続制限部４２０に渡す。
【００９４】
ＸＭＬ処理サーバ２００ａは、ＸＭＬ文書の解析、およびＸＭＬ文書の内容に対する所定の処理を実行するコンピュータである。ＸＭＬ処理サーバ２００ａは解析部２２０を有しており、解析部２２０がＸＭＬ文書の解析を行う。なお、解析部２２０は、ＸＭＬ文書を解析した際に、文書構造上のエラーが発生すると、そのＸＭＬ文書の送信元のＩＰアドレス、エラー内容および攻撃性を表す数値を公開サーバ４００のエラー情報管理部４４０に通知する。
【００９５】
図１２は、第３の実施の形態に係る制限内容テーブルのデータ構造例を示す図である。制限内容テーブル４３１には、項目、正当である範囲、および攻撃性を表す数値の欄が設けられている。各欄の横方向に並べられた情報同士が互いに関連づけられてレコードを構成しており、各レコードが制限内容を示している。
【００９６】
項目の欄には、制限内容の判断対象となる項目が示されている。正当である範囲の欄には、判断対象となる項目毎の正当である範囲が設定されている。攻撃性を表す数値の欄には、ＸＭＬ文書が制限内容に違反したときのそのＸＭＬ文書がＸＭＬ処理サーバ２００ａに対する攻撃と見なしたときの影響の度合い（攻撃性）を表す数値が設定されている。
【００９７】
図１２の例では、文書サイズが正当である範囲は１ＭＢ以下であり、攻撃性を表す数値は５である。連続する空白文字の数が正当である範囲は１００文字以下であり、攻撃性を表す数値は５である。コメントの長さが正当である範囲は２００文字以下であり、攻撃性を表す数値は３である。処理命令のターゲット名の長さが正当である範囲は１００文字以下であり、攻撃性を表す数値は３である。処理命令の長さが正当である範囲は２００文字以下であり、攻撃性を表す数値は３である。要素名の長さが正当である範囲は１００文字以下であり、攻撃性を表す数値は３である。要素が持つ属性の数が正当である範囲は５０個以下であり、攻撃性を表す数値は３である。属性名の長さが正当である範囲は１００文字以下であり、攻撃性を表す数値は３である。属性値の長さが正当である範囲は１００文字以下であり、攻撃性を表す数値は３である。連続する文字データおよびＣＤＡＴＡセクションの内容の長さが正当である範囲は１００００文字以下であり、攻撃性を表す数値は３である。要素が持つ子ノードの数が正当である範囲は１００個以下であり、攻撃性を表す数値は３である。要素の入れ子の深さが正当である範囲は１０階層以下であり、攻撃性を表す数値は３である。属性値が正当である範囲は、ＸＭＬ処理サーバ２００ａが受け付けるフォーマットに従うことであり、攻撃性を表す数値は１である。要素内のテキスト値が正当である範囲は、ＸＭＬ処理サーバ２００ａが受け付けるフォーマットに従うことであり、攻撃性を表す数値は１である。
【００９８】
図１３は、第３の実施の形態におけるエラーログのデータ構造例を示す図である。エラーログ４４１には、クライアントＩＰアドレス、エラー内容、および攻撃性を表す数値の欄が設けられている。各欄の横方向に並べられた情報同士が互いに関連づけられてレコードを構成しており、各レコードがエラー情報を示している。クライアントＩＰアドレスの欄には、エラーを生じさせたＸＭＬ文書の送信元のクライアントのＩＰアドレスが登録されている。エラー内容の欄には、クライアントＩＰアドレスに対応付けて、そのクライアントが送信したＸＭＬ文書によって生じたエラーの内容が登録されている。攻撃性を表す数値の欄には、発生したエラーによって該当するクライアントに加算すべき攻撃性を表す数値が設定されている。
【００９９】
たとえば、ＩＰアドレス「１０．３５．８６．６６」のエラー内容は「要素名長不当」であり、攻撃性を表す数値が「３」である。なお、同じＩＰアドレス「１０．３５．８６．６６」の「コメント長不当」というエラーも発生しており、このエラーの攻撃性を表す数値は「３」である。
【０１００】
図１４は、攻撃性合計値テーブルのデータ構造例を示す図である。攻撃性合計値テーブル４４２には、クライアントＩＰアドレスと、攻撃性を表す数値の合計との欄が設けられている。クライアントＩＰアドレスの欄には、エラーを発生させたＸＭＬ文書の送信元であるクライアントのＩＰアドレスが設定される。攻撃性を表す数値の合計は、対応するクライアントから送られたＸＭＬ文書によって発生した全てのエラーに関する攻撃性を表す数値の合計が設定される。
【０１０１】
たとえば、図１３のエラーログ４４１を参照すると、ＩＰアドレス「１０．３５．８６．６６」のクライアント６０から送られたＸＭＬ文書により２つのエラー（要素名長不当、コメント長不当）が発生している。従って、攻撃性合計値テーブル４４２では、ＩＰアドレス「１０．３５．８６．６６」のクライアント６０に関し、要素名長不当に関する攻撃性を表す数値「３」とコメント長不当に関する攻撃性を表す数値「３」とが合計され、攻撃性を表す数値の合計として「６」が設定されている。
【０１０２】
次に、第３の実施の形態に係る公開サーバ４００で行われる処理を詳細に説明する。
図１５は、第３の実施の形態の処理手順を示すフローチャートである。以下、図１５に示す処理をフローチャートに沿って説明する。
【０１０３】
［ステップＳ４１］公開サーバ４００のクライアント識別部４１０は、クライアントからのＸＭＬ文書転送のための接続要求を受け付ける。
［ステップＳ４２］クライアント識別部４１０は、クライアントのＩＰアドレスを取得する。クライアント識別部４１０は、ＩＰアドレスを接続制限部４２０に渡す。
【０１０４】
［ステップＳ４３］接続制限部４２０は、エラー情報管理部４４０から攻撃性合計値テーブル４４２の内容を取得し、クライアント識別部４１０から受け取ったＩＰアドレスの攻撃性を表す数値の合計を調査する。
【０１０５】
［ステップＳ４４］接続制限部４２０は、ステップＳ４３で調査した攻撃性を表す数値の合計が１０未満であるか否かを判断する。１０未満であれば処理がステップＳ４５に進められる。この際、接続制限部４２０は、ＩＰアドレスを自由度制限部４３０に渡す。また、合計が１０以上であれば処理がステップＳ５２に進められる。
【０１０６】
［ステップＳ４５］自由度制限部４３０は、クライアントからＸＭＬ文書を受け取り、そのＸＭＬ文書が制限内容テーブル４３１に登録されている各制限内容を満たしているか否かを調査する。
【０１０７】
［ステップＳ４６］自由度制限部４３０は、受け取ったＸＭＬ文書に、制限内容を超えた項目があるか否かを判断する。制限内容を超えた項目がない場合、処理がステップＳ４７に進められる。制限内容を超えた項目が少なくとも１つある場合、処理がステップＳ４９に進められる。
【０１０８】
［ステップＳ４７］自由度制限部４３０は、ＸＭＬ文書をＸＭＬ処理サーバ２００ａに転送する。これにより、ＸＭＬ文書が解析部２２０に渡され、解析されると共に所定の処理が行われる。このとき、解析部２２０においてエラーが発生すると、そのエラーが公開サーバ４００に返される。
【０１０９】
［ステップＳ４８］自由度制限部４３０は、解析部２２０からの処理結果を受け取り、その処理結果がエラー応答か否かを判断する。エラー応答の場合、処理がステップＳ５０に進められる。エラー応答で無い場合、処理がステップＳ４９に進められる。
【０１１０】
［ステップＳ４９］自由度制限部４３０は、処理結果をクライアントに返す。その後、処理が終了する。
［ステップＳ５０］自由度制限部４３０は、自由度に関する制限内容の違反、または解析部２２０によるエラーが見つかると、エラー情報管理部４４０に対して、ＸＭＬ文書の送信元であるクライアントのＩＰアドレスを渡すとともに、エラー内容およびの攻撃性を表す数値を通知する。すると、エラー情報管理部４４０が、受け取った情報をエラー情報として、エラーログ４４１に記録する。
【０１１１】
［ステップＳ５１］エラー情報管理部４４０は、エラーログ４４１に新たに登録されたエラー情報に基づいて、攻撃性合計値テーブル４４２における攻撃性を表す数値の合計を更新する。
【０１１２】
［ステップＳ５２］接続制限部４２０または自由度制限部４３０が、エラーの発生をクライアントに通知する。具体的には、ステップＳ４４で攻撃性を表す数値の合計が１０以上と判断された場合、接続制限部４２０によってエラー通知が行われる。また、ステップＳ４６で自由度の制限を越えていると判断されたとき、またはステップＳ４８においてエラー応答があったときは、自由度制限部４３０によってエラー通知が行われる。その後、処理が終了する。
【０１１３】
このようにして、エラーの攻撃性を表す数値が１０以上となったクライアントに対しては、以後の接続を拒否することができる。
ここで、クライアント６０は、ＸＭＬ文書６１、ＸＭＬ文書６２、ＸＭＬ文書６３を連続して公開サーバ４００に送信するものとする。ＸＭＬ文書６１は自由度制限部４３０でエラーとなる（自由度制限違反）ものとする。ＸＭＬ文書６２は、解析部２２０でエラーとなるものとする。ＸＭＬ文書６３は正当な入力データとする。また、クライアント６０からのＸＭＬ文書６１〜６３送信前のエラーログ４４１と攻撃性合計値テーブル４４２との状態は、それぞれ図１３，図１４に示す通りとする。
【０１１４】
まず、クライアント６０がＸＭＬ文書６１を送信する場合、クライアント６０がネットワーク１０を通じて公開サーバ４００に対して接続要求を出す。すると、クライアント識別部４１０はクライアントのＩＰアドレスを取得する。次に、接続制限部４２０は、攻撃性合計値テーブル４４２を解析し、クライアント６０の攻撃性を表す数値の合計を取得する。この時点では合計値が１０未満であるため、接続制限部４２０はクライアント６０の接続を許可する。
【０１１５】
自由度制限部４３０はＸＭＬ文書６１を受け取り、自由度の制限を超えていないか検証を行う。エラーが検出されるので、自由度制限部４３０は、クライアント６０のＩＰアドレス、エラー内容および攻撃性を表す数値「３」からなるエラー情報をエラー情報管理部４４０を渡す。エラー情報管理部４４０は、受け取ったエラー情報をエラーログ４４１に記録すると共に、攻撃性合計値テーブル４４２を更新する。また、自由度制限部４３０は、クライアント６０にエラーを通知する。
【０１１６】
続けてクライアント６０がＸＭＬ文書６２を送信しようとした場合、クライアント６０がネットワーク１０を通じて公開サーバ４００に対して接続要求を出す。すると、クライアント識別部４１０はクライアントのＩＰアドレスを取得する。接続制限部４２０は、攻撃性合計値テーブル４４２を解析し、クライアント６０の攻撃性を表す数値の合計を取得する。この時点では合計値が１０未満であるため、接続制限部４２０はクライアント６０の接続を許可する。
【０１１７】
自由度制限部４３０はＸＭＬ文書６２を受け取り、自由度の制限を超えていないか検証を行う。エラーは検出されないので、公開サーバ４００からＸＭＬ処理サーバ２００ａへとＸＭＬ文書６２が転送される。解析部２２０はＸＭＬ文書６２を解析する。すると、エラーが検出されるので、解析部２２０はクライアントのＩＰアドレス、エラー内容を自由度制限部４３０に返す。自由度制限部４３０は、攻撃性合計値テーブル４４２からエラー内容に応じた攻撃性を表す数値「１」を求め、クライアントのＩＰアドレス、エラー内容、および攻撃性を表す数値の組をエラー情報としてエラー情報管理部４４０に渡す。エラー情報管理部４４０は、受け取ったエラー情報をエラーログ４４１に記録すると共に、攻撃性合計値テーブル４４２を更新する。また、自由度制限部４３０は、クライアント６０にエラーを通知する。
【０１１８】
２つのＸＭＬ文書６１，６２が送信されたことで、エラーログ４４１と攻撃性合計値テーブル４４２の内容が更新される。
図１６は、更新後のエラーログの例を示す図である。エラーログ４４１は、図１３に示した状態に対して、クライアントＩＰアドレス「１０．３５．８６．６６」のエラー情報として要素名長不当（攻撃性を表す数値「３」）と属性値不当（攻撃性を表す数値「１」）とのエラー内容が登録されている。
【０１１９】
図１７は、更新後の攻撃性合計値テーブルの例を示す図である。攻撃性合計値テーブル４４２は、クライアントＩＰアドレス「１０．３５．８６．６６」の攻撃性を表す数値の合計が「６」（図１４の状態）から「１０」に更新されている。
【０１２０】
このような状態で、クライアント６０がＸＭＬ文書６３を送信しようとした場合、クライアント６０がネットワーク１０を通じて公開サーバ４００に対して接続要求を出す。すると、クライアント識別部４１０はクライアントのＩＰアドレスを取得する。接続制限部４２０は攻撃性合計値テーブル４４２を解析し、クライアント６０の攻撃性を表す数値の合計を取得する。合計値が１０以上であるため、接続制限部４２０はクライアント６０の接続を拒否し、エラーを返却する。
【０１２１】
このように、エラー発生時の攻撃性を表す数値を記録し、それに応じてクライアントの接続を制限することによって、不当なアクセスを繰り返すクライアントの攻撃を回避することが可能となる。
【０１２２】
なお、第３の実施の形態の変形例として、クライアントごとの過去のエラー情報から攻撃度数値を累計し、その累計した値に応じて各クライアントの処理の優先度を決定するような優先度決定部を追加することもできる。
【０１２３】
また、第３の実施の形態の他の変形例として、あらかじめ用意された特別なＩＰアドレスを持つクライアントに対しては、自由度制限モジュールが設定する制限を緩和するようなシステムも可能である。例えば、そのシステムを利用する契約を結んでいるクライアントは信用度が高いため、自由度制限モジュールによる検閲を軽度のものにしておき、その他の不特定なクライアントについては攻撃者が含まれる可能性もあるため、高度な制限を設定するようにすることもできる。
【０１２４】
さらに、第３の実施の形態のようにＩＰアドレスでクライアントを識別する方法では、ＩＰアドレスのなりすましについて対処ができない。この回避のために、クライアントの認証を行うモジュールを追加することでさらなる安全性の確保が可能となる。例えば、ユーザ名とパスワードによる認証を行うクライアント認証モジュールを追加する方法がある。クライアント認証モジュールの認証機構をさらに高度にすることで、さらに頑健なシステムの構築が可能である。
【０１２５】
また、第３の実施の形態では、ＸＭＬ処理サーバ２００ａの解析部２２０で発生したエラーを自由度制限部４３０に通知して、そのエラーに応じた攻撃性を表す数値を取得しているが、解析部２２０にエラー内容に応じた攻撃性を表す数値を定義しておくこともできる。すなわち、図１２示す制限内容テーブル４３１と同様の制限内容テーブルを解析部２２０内に設ける。解析部２２０内の制限内容テーブルには、少なくとも解析部２２０で発生するエラーに関する項目、正当である範囲、正当性を表す数値が設定されていればよい。
【０１２６】
ここで、エラー情報と攻撃性を表す数値の関係について説明する。通常、正規のクライアントを操作する善意のユーザは、出力するＸＭＬ文書が正しいことを十分に検証してから運用を始める。よって、基本的にエラーの発生は少なく、またサーバが要求するＸＭＬのフォーマットと大きく相違のあるＸＭＬデータを送信してくるケースはさらに少ないと考えられる。
【０１２７】
ここで、クライアントから送信されたＸＭＬデータがエラーとなるケースを以下に示し、これらのケースについて、攻撃性を表す数値をどのように設定すべきかを述べる。
第１のケース：自由度の制限を超えた場合
第２のケース：ＸＭＬが整形式でない場合
第３のケース：ＸＭＬが妥当でない場合（ＤＴＤ、ＸＭＬＳｃｈｅｍａなどの検証でエラー）第４のケース：データに意味的な誤りがある場合
第１のケースは、自由度制限部に指定されている、自由度の制限値を超えた場合に起こる。正規のクライアントであれば、たとえＸＭＬ文書作成プログラムに誤りがあっても、この制限値を超えるケースは非常に低い。よって、第１のケースでエラーが検出された場合は、クライアントは意図的にそのようなＸＭＬ文書を送信しており、攻撃の意図があると考えられる。よって、このケースでは攻撃性を表す数値は高く設定すべきである。また、データサイズの大きさなどといった危険性の高いエラーでは、さらに数値を高くするというように設定してもよい。
【０１２８】
第２のケースも、正規のクライアントではまず起きないエラーである。ＸＭＬ文書の生成は通常プログラムにより行われる。そのため、整形式でないＸＭＬ文書が出力される可能性は低く、またそれがクライアント側のテストで検出できないケースはさらに少ないと考えられる。よって、第２のケースでも攻撃性を表す数値は高くすべきである。
【０１２９】
第３のケースは、ＸＭＬパーザによる妥当性検証によるエラーで、第４のケースはＸＭＬの解析が完了したあとで、それを利用するプログラムがデータの意味的な誤りを検出した場合に起こるエラーである。この２つのケースは正規のクライアントが誤っているＸＭＬ文書を送っている可能性が高い。よって、このケースでは、第１、第２のケースよりも攻撃性の数値は低く設定してもよいと考えられる。ただし正規のクライアントでもエラーのあるデータを連続して送られると結果的に攻撃していることと同じになり、また攻撃を意図したクライアントがこのようなデータを送る可能性もある。そのため、低すぎない数値に設定するべきである。
【０１３０】
ところで、上記の説明では公開サーバとＸＭＬ処理サーバを別の装置として説明したが、ＸＭＬ処理サーバ内に公開サーバの機能を設けることもできる。
また、上記の各実施の形態では、クライアント識別部、接続制限部、自由度制限部が公開サーバ内に１つずつ設けられているが、各要素が２つ以上存在していてもよい。
【０１３１】
また、構造化文書としてＸＭＬ文書を対象としたときの実施の形態について説明したが、ＸＨＴＭＬ等の他の構造化文書に対しても適用可能である。
また、上記の実施の形態に示す処理機能は、コンピュータによって実現することができる。その場合、公開サーバが有すべき機能の処理内容を記述した入力データ制限プログラムが提供される。その入力データ制限プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述した入力データ制限プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ＤＶＤ−ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ（Ｒｅｃｏｒｄａｂｌｅ）／ＲＷ（ＲｅＷｒｉｔａｂｌｅ）などがある。光磁気記録媒体には、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｃ）などがある。
【０１３２】
入力データ制限プログラムを流通させる場合には、たとえば、その入力データ制限プログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、入力データ制限プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにその入力データ制限プログラムを転送することもできる。
【０１３３】
入力データ制限プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録された入力データ制限プログラムもしくはサーバコンピュータから転送された入力データ制限プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置から入力データ制限プログラムを読み取り、入力データ制限プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接入力データ制限プログラムを読み取り、その入力データ制限プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータから入力データ制限プログラムが転送される毎に、逐次、受け取った入力データ制限プログラムに従った処理を実行することもできる。
【０１３４】
（付記１）  入力される構造化文書の受け取りの許否を判定する入力データ制限プログラムにおいて、
コンピュータに、
文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較し、
前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする入力データ制限プログラム。
【０１３５】
（付記２）  前記クライアントから送られた構造化文書によるエラーの発生回数が所定回数以上になった場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする付記１記載の入力データ制限プログラム。
【０１３６】
（付記３）  前記自由度制限条件には、制限内容毎に攻撃性を表す数値が定義されており、前記構造化文書が前記自由度制限条件を満たしていない場合、違反している制限内容に応じた攻撃性を表す数値を含む前記エラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報に含まれる攻撃性を表す数値の合計が所定値以上になった場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする付記１記載の入力データ制限プログラム。
【０１３７】
（付記４）  前記入力された構造化文書の構造が前記自由度制限条件を満たしていない場合、前記入力された構造化文書を破棄する、
処理を実行させることを特徴とする付記１記載の入力データ制限プログラム。
【０１３８】
（付記５）  入力される構造化文書の受け取りの許否を判定する入力データ制限方法において、
文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較し、
前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する、
ことを特徴とする入力データ制限方法。
【０１３９】
（付記６）  入力される構造化文書の受け取りの許否を判定する入力データ制限装置において、
文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較する自由度制限判断手段と、
前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録するエラー情報記録手段と、
前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する入力拒否手段と、
を有することを特徴とする入力データ制限装置。
【０１４０】
（付記７）  入力される構造化文書の受け取りの許否を判定する入力データ制限プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータに、
文書構造上の許容範囲を示す自由度制限条件が予め定義されており、構造化文書が入力されると、入力された構造化文書の構造を前記自由度制限条件と比較し、
前記入力された構造化文書が前記自由度制限条件を満たしていない場合、前記入力された構造化文書の送信元であるクライアントに関連付けてエラー情報を記録し、
前記クライアントに関連付けられた前記エラー情報が所定の条件を満たした場合、以後の前記クライアントからの構造化文書の入力を拒否する、
処理を実行させることを特徴とする入力データ制限プログラムを記録したコンピュータ読み取り可能な記録媒体。
【０１４１】
【発明の効果】
以上説明したように本発明では、クライアントから送られた構造化文書が自由度制限条件を満たしていなければエラー情報を格納し、そのエラー情報が所定の条件を満たすと、以後のクライアントからの構造化文書の入力を拒否するようにした。そのため、フォーマット上の自由度の高い構造化文書に対して、その自由度を容易に制限することができる。その結果、自由度の高さを逆手に取った不正な構造化文書の入力を拒否することができ、構造化文書の解析等の処理機能の安全性を確保することができる。
【図面の簡単な説明】
【図１】実施の形態に適用される発明の概念図である。
【図２】本発明の実施の形態におけるシステム構成例を示す図である。
【図３】本発明の実施の形態に用いるコンピュータのハードウェア構成例を示す図である。
【図４】第１の実施の形態の構成を示すブロック図である。
【図５】ＸＭＬサーバの処理手順を示すフローチャートである。
【図６】第２の実施の形態の構成を示すブロック図である。
【図７】制限内容テーブルのデータ構造例を示す図である。
【図８】ＸＭＬ文書の判断対象項目の例を示す図である。
【図９】エラーログのデータ構造例を示す図である。
【図１０】第２の実施の形態の処理手順を示すフローチャートである。
【図１１】第３の実施の形態の機能を示すブロック図である。
【図１２】第３の実施の形態に係る制限内容テーブルのデータ構造例を示す図である。
【図１３】第３の実施の形態におけるエラーログのデータ構造例を示す図である。
【図１４】攻撃性合計値テーブルのデータ構造例を示す図である。
【図１５】第３の実施の形態の処理手順を示すフローチャートである。
【図１６】更新後のエラーログの例を示す図である。
【図１７】更新後の攻撃性合計値テーブルの例を示す図である。
【符号の説明】
１  入力データ制限装置
１ａ  自由度制限条件
１ｂ  エラー情報
２  クライアント
３  構造化文書処理装置
１００  公開サーバ
１１０  接続制限部
１２０  自由度制限部
１３０  エラー情報管理部
２００  ＸＭＬ処理サーバ
２１０  解析部
【図１】
2005056007.tif 000003
【図２】
2005056007.tif 000004
【図３】
2005056007.tif 000005
【図４】
2005056007.tif 000006
【図５】
2005056007.tif 000007
【図６】
2005056007.tif 000008
【図７】
2005056007.tif 000009
【図８】
2005056007.tif 000010
【図９】
2005056007.tif 000011
【図１０】
2005056007.tif 000012
【図１１】
2005056007.tif 000013
【図１２】
2005056007.tif 000014
【図１３】
2005056007.tif 000015
【図１４】
2005056007.tif 000016
【図１５】
2005056007.tif 000017
【図１６】
2005056007.tif 000018
【図１７】
2005056007.tif 000019