データ処理装置及びデータ処理方法及びプログラム
【課題】クロスサイト・スクリプティングを有効に防止する。
【解決手段】Webアプリケーション実行装置100が、特定種類のコードが埋め込まれている可能性のあるデータをクライアント装置200からのHTTPリクエストから抽出し、HTTPリクエストから抽出したデータと同じデータをHTTPレスポンスから抽出し、抽出したデータのうちHTTPレスポンス内で連続した位置に配置されている2以上のデータを連結し、連結されたデータに含まれている特定種類のコードを無効化する。これにより、特定種類のコードの配置がWebアプリケーション内部で変更された場合や、HTTPリクエストにおいて分割されて送信された場合にも、特定種類のコードを無効化することができ、特定種類のコードをクロスサイト・スクリプティングに用いられる不正なコードとすることにより、クロスサイト・スクリプティングを有効に防止することができる。
【解決手段】Webアプリケーション実行装置100が、特定種類のコードが埋め込まれている可能性のあるデータをクライアント装置200からのHTTPリクエストから抽出し、HTTPリクエストから抽出したデータと同じデータをHTTPレスポンスから抽出し、抽出したデータのうちHTTPレスポンス内で連続した位置に配置されている2以上のデータを連結し、連結されたデータに含まれている特定種類のコードを無効化する。これにより、特定種類のコードの配置がWebアプリケーション内部で変更された場合や、HTTPリクエストにおいて分割されて送信された場合にも、特定種類のコードを無効化することができ、特定種類のコードをクロスサイト・スクリプティングに用いられる不正なコードとすることにより、クロスサイト・スクリプティングを有効に防止することができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クライアント装置からサーバ装置へのリクエストと、サーバ装置からクライアント装置へのレスポンスとを解析して、レスポンスに含まれている特定種類のコードを抽出し、抽出した特定種類のコードを無効化する技術に関する。
【背景技術】
【0002】
クロスサイト・スクリプティング(以下、XSSとも表記する)は、HTML(HyperText Markup Language)中に外部から入力されたデータを出力する動的生成ページにおいて、悪意のあるスクリプトコードを利用者のクライアント装置で実行させる攻撃である。
悪意のあるスクリプトコードは、撃攻者によって、クライアント装置からサーバ装置へ送信されるHTTP(HyperText Transfer Protocol)リクエスト(以下、単にリクエストとも表記する)に混入させられる。
XSSを防ぐには、リクエストに混入しているスクリプトコードが動作しないようにする必要がある。
これは、サーバ装置のWebアプリケーション内部でリクエストに含まれる特定の文字を取り除くことで実現できる。
しかし、出力するHTML構文中のどの箇所にスクリプトコードが書き込まれるかより、取り除く文字が異なるため、悪意のあるスクリプトコードが動作しないようにするためには、HTML構文中の位置ごとに取り除くべき文字を判別する必要がある。
このような対策は開発者が実装しなければならず、開発者の知識不足や不注意などで対策抜けが発生する可能性がある。
XSSを自動で対策する従来技術としては、リクエストに現れた不正コードがHTTPレスポンス(以下、単にレスポンスとも表記する)にも現れたときに攻撃に使われる特定の文字を取り除く方法が知られている(例えば、特許文献1)。
なお、HTML構文の定義は、例えば、非特許文献1に示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2005−92564号公報
【非特許文献】
【0004】
【非特許文献1】HTML 4.01 Specification http://www.w3.org/TR/html401/
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1の技術では、Webアプリケーションへのリクエストに含まれる攻撃データのHTML構造に応じて、不正コードを一旦記憶し、記憶した不正コードがレスポンスにそのまま現れた場合に攻撃に使われる特定の文字を取り除く。
このため、当該不正コードの配置がWebアプリケーション内部で変更された場合や、リクエストにおいて分割されて送信された場合にはXSSを防ぐことができないという課題がある。
【0006】
また、特許文献1の技術では、リクエストに含まれる攻撃データのHTML構造に応じて取り除く文字を選択していた。
このため、出力するHTML構文中のどの箇所にスクリプトが書き込まれているかにより、取り除く文字を変更する必要があるXSSを正しく防ぐことができないという課題がある。
【0007】
さらに、特許文献1の技術では、HTTPリクエストのみを対象としている。
このため、データベースやファイルなどに一端保存された後に、別のリクエストで、保存されたデータを読み出す攻撃には対処できない。
例えば、不正コードを一旦データベースに保存し、別のページで再度これを読出す蓄積型XSSについては対処できないという課題がある。
【0008】
この発明は、上記の課題を解決することを主な目的としており、クロスサイト・スクリプティングを有効に防止する構成を実現することを主な目的とする。
【課題を解決するための手段】
【0009】
本発明に係るデータ処理装置は、
クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力部と、
前記リクエスト入力部により入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出部と、
前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力部と、
前記レスポンス入力部により入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出部と、
前記無効化候補データ抽出部により複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結部と、
前記データ連結部により連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化部とを有することを特徴とする。
【発明の効果】
【0010】
本発明によれば、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとしてリクエストから抽出し、レスポンスにおいて埋め込み先候補データと値が一致するデータを無効化候補データとして抽出し、レスポンス内で連続した位置に配置されている2以上の無効化候補データを連結し、連結された連結無効化候補データに含まれている特定種類のコードを無効化する。
このため、特定種類のコードの配置がWebアプリケーション内部で変更された場合や、特定種類のコードがリクエストにおいて分割されて送信された場合にも、特定種類のコードを無効化することができ、特定種類のコードをクロスサイト・スクリプティングに用いられる不正なコードとすることにより、クロスサイト・スクリプティングを有効に防止することができる。
【図面の簡単な説明】
【0011】
【図1】実施の形態1に係るシステム構成例を示す図。
【図2】実施の形態1に係るWebアプリケーション実行装置の構成例を示す図。
【図3】実施の形態1に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図4】実施の形態1に係る入力データの例を示す図。
【図5】実施の形態1に係るWebアプリケーションからの応答の例を示す図。
【図6】実施の形態1に係るWebアプリケーションからの応答に対する解析の中間結果を示す図。
【図7】実施の形態1に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図8】実施の形態1に係るWebアプリケーションからの応答に対する解析の最終結果を示す図。
【図9】実施の形態1に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図10】実施の形態1に係るHTML要素のレベルを説明する図。
【図11】実施の形態1に係るHTML構文情報の例を示す図。
【図12】実施の形態2に係るWebアプリケーション実行装置の構成例を示す図。
【図13】実施の形態2に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図14】実施の形態1及び2に係るWebアプリケーション実行装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【0012】
実施の形態1.
本実施の形態では、Webアプリケーションに脆弱性が存在した場合でも脆弱性への攻撃を防ぐために、HTTPリクエストなどの外部からの入力データをすべて記憶して、入力データを使って出力データを解析し、その解析結果に応じて、入力データの混入によって発生するWebアプリケーションの脆弱性への対策処理を行う構成を説明する。
【0013】
図1は、実施の形態1に係るWebアプリケーション実行装置を含むシステムの概略図である。
【0014】
図1において、本実施の形態に係るシステムは、Webアプリケーション実行装置100、クライアント装置200、ネットワーク300(インターネット等のネットワーク)から構成される。
Webアプリケーション実行装置100と複数のクライアント装置200は、ネットワーク300を介して接続される。
なお、Webアプリケーション実行装置100は、データ処理装置及びサーバ装置の例である。
【0015】
図2は、実施の形態1に係るWebアプリケーション実行装置100の構成例を示す図である。
図2において、Webアプリケーション実行装置100は、入力受信部101、入力記憶部102、Webアプリケーション103、出力検査部104、出力構文解析部105、出力送信部106、入力データ一致情報記憶部107、対策設定ファイル108で構成されている。
【0016】
入力受信部101は、クライアント装置200から送信されたHTTPリクエストを受信する。
また、入力受信部101は、受信したHTTPリクエストを解析し、HTTPリクエスト内の複数のデータのうち、スクリプトコード(特定種類のコードの例)が埋め込まれている可能性のあるデータを入力データ(埋め込み先候補データに相当)として抽出する。
入力受信部101は、リクエスト入力部及び埋め込み先候補データ抽出部の例である。
また、入力受信部101により実行される処理が、リクエスト入力ステップ及び埋め込み先候補データ抽出ステップに相当する。
【0017】
ここで、入力データとは、GETメソッド等で与えられるURL(Uniform Resource Locator)ストリング内のパラメータの値(以後、GETパラメータ値とよぶ)、POSTメソッドで与えられるパラメータの値(以後、POSTパラメータ値とよぶ)、Cookie以外の各HTTPヘッダの値(以後、ヘッダ値とよぶ)、Cookieの値(以後、Cookie値とよぶ)である。
なお、GETメソッドで与えられるパラメータは、HTTPリクエストのリクエストラインに含まれるURI(Uniform Resource Identifier)中のクエリストリングと呼ばれる部分で指定される。
クエリストリングは、URI内に含めた「?」後の文字列で指定され、パラメータの名前と値とを「=」で区切った形式で指定する。また複数のパラメータを指定する場合には「&」で区切る。
POSTメソッドで与えられるパラメータは、POSTメソッドで送信されたHTTPリクエストのボディ部に格納され、パラメータの名前と値とを「=」で区切った形式で指定される。複数のパラメータを指定する場合には「&」や「;」で区切られる。
ヘッダのパラメータは、HTTPリクエストのヘッダで指定され、ヘッダの名前と値とを「:」で区切った形式で指定される。各ヘッダは改行で区切られる。
Cookieは、HTTPリクエストのヘッダで指定され、ヘッダの名前が「Cookie」となる。
Cookieの名前と値とを「=」で区切った形式で指定される。
複数のパラメータを指定する場合には、複数のCookieヘッダで指定するか、1つのヘッダ中で、Cookieの指定を「;」、「,」で区切る。
【0018】
入力記憶部102は、入力受信部101で抽出された入力データを記憶し、Webアプリケーション実行装置100がHTTPレスポンスをクライアント装置200に返すまで保持する。
【0019】
Webアプリケーション103は、受信したHTTPリクエストに応じた処理を行い、処理結果としてHTTPレスポンスを出力する。
【0020】
出力検査部104は、Webアプリケーション103からHTTPレスポンスを入力する。
また、出力検査部104は、入力したHTTPレスポンスを解析し、HTTPレスポンスに含まれるHTML文書に入力データが含まれるかを文字列比較により検査する。
つまり、出力検査部104は、HTTPレスポンス内のデータのうち、入力データ(埋め込み先候補データ)と値が一致するデータを抽出する。
出力検査部104により抽出されたデータは、スクリプトコードが含まれている可能性があり、スクリプトコードを無効にする無効化処理(サニタイジング)の対象になる可能性があり、無効化候補データに相当する。
また、出力検査部104は、複数のデータを抽出した場合に、HTTPレスポンス内での位置が連続している2以上のデータを検索し、検索の結果抽出した2以上のデータを連結する。
出力検査部104により連結されたデータは、連結無効化候補データに相当する。
出力検査部104は、レスポンス入力部、無効化候補データ抽出部、データ連結部の例である。
また、出力検査部104が実行する処理が、レスポンス入力ステップ、無効化候補データ抽出ステップ、データ連結ステップに相当する。
【0021】
出力構文解析部105は、出力検査部104により抽出されたデータにスクリプトコードが含まれているか否かを判断し、また、HTTPレスポンスに含まれるHTML文書を構文解析し、出力検査部104により抽出されたデータが含まれる場所がHTML構造中のどの位置になるかを特定し、その特定した位置に応じてXSS対策(スクリプトコードの無効化)を行う。
出力構文解析部105は、コード無効化部の例である。
また、出力構文解析部105により実行される処理が、コード無効化ステップに相当する。
【0022】
出力送信部106は、HTTPレスポンスをクライアント装置200に対して送信する。
Webアプリケーション103からのHTTPレスポンスにスクリプトコードが含まれていたとしても、出力構文解析部105によりスクリプトコードが無効化されているので、出力送信部106からは無害なHTTPレスポンスが送信される。
【0023】
入力データ一致情報記憶部107は、出力するHTML文書に含まれている入力データに関する情報を一時的に記録する。
つまり、入力データ一致情報記憶部107は、出力検査部104により抽出されたデータの情報を一時的に記録する。
なお、記録した情報は、HTTPレスポンスのクライアント装置200への送信とともにクリアされる。
【0024】
対策設定ファイル108は、Webアプリケーション103内部で変換される可能性があるデータの変換パターンに関する設定と、出力検査部104での検査時に入力データと判定する最低文字数と、出力構文解析部105で実施するXSSの脆弱性に対処するための処理内容とが記載されている。
スクリプトコードが含まれているHTML文書内での位置、つまり、スクリプトコードが含まれているデータがどのカテゴリー(開始タグ、終了タグ、要素内、属性値内、コンテンツ内など)に分類されるかにより無効化方式が変化するが、対策設定ファイル108における「出力構文解析部105で実施するXSSの脆弱性に対処するための処理内容」とは、具体的には、カテゴリーごとのスクリプトコードの無効化方式が記述されている。
このように、対策設定ファイル108は、無効化方式情報の例に相当する。
【0025】
次に、図3を用いて本実施の形態に係るWebアプリケーション実行装置100の動作例を説明する。
【0026】
クライアント装置200からのHTTPリクエストがWebアプリケーション実行装置100に到達すると、入力受信部101がHTTPリクエストを受信する(S101)。
【0027】
HTTPリクエストを受信した入力受信部101は、HTTPリクエストに含まれるGETパラメータ値やPOSTパラメータ値、ヘッダ値、Cookie値を入力データとして抽出し、入力記憶部102に記憶する(S102)。
この際に、入力データについて、まったく同じ文字列となるものは1つの入力データとして記憶する。
また、GETパラメータについては、各パラメータ値のURLエンコーディングをデコードしたものを入力データとして記憶する。
入力データの記憶時には、対策設定ファイル108の内容に基づいて、特定のデータが変換された場合の文字列も入力データとして追加する(例えば、テキストエリアに記載された文字列の改行コードを<BR>などに変換する)。
入力受信部101により抽出され、入力記憶部102に記録された入力データは、例えば図4のようになる。
なお、図4の表の1行目は説明のために便宜上つけており実際には必要ない。
【0028】
次に、入力受信部101は、受信したHTTPリクエストをそのままWebアプリケーション103に渡す(S103)。
HTTPリクエストをWebアプリケーション103に渡した後には、Webアプリケーション実行装置100は、Webアプリケーション103から応答が出力されるのを待つ(S104)。
【0029】
Webアプリケーション103は、受け取ったHTTPリクエストの処理を行い、その結果をHTTPレスポンスとして出力する。
出力したHTTPレスポンスは、出力検査部104に渡る。
出力検査部104は、Webアプリケーション103から受け取ったHTTPレスポンスのボディがHTML文書であるかを調べる(S105)。
レスポンスのContent−Typeヘッダが「text/html」または指定なしの場合には、HTTPレスポンスのボディにHTML文書が含まれていると判定する。
HTML文書が含まれていると判定した場合には、ステップS106に進む。
含まれていないと判定した場合には、ステップS111に進む。
【0030】
HTTPレスポンスのボディがHTML文書であると判定した場合には、出力検査部104は、HTTPレスポンスのHTML文書に入力記憶部102に記憶されている各入力データと同じ文字列のデータが含まれるかを、文字列比較によって検査する。
検査の結果、HTML文書中に入力データと同じ文字列のデータが含まれていた場合には、入力データ一致情報記憶部107に一致情報として、入力データと一致したデータ、一致が開始するのがHTML文書の何文字目か(以後、開始位置とよぶ)、および一致が終了するのがHTML文書の何文字目か(以後、終了位置とよぶ)を記憶する(S106)。
例えば、図4に示したデータが入力記憶部102に記録され、図5のようなHTML文書がHTTPレスポンスとして出力された場合には、入力データ一致情報記憶部107の記録は図6のようになる。
なお、図6の表の1列目と1行目は説明のため便宜上つけており実際には必要ない。
すべての入力データに対する比較が完了した時点で、入力データ一致情報記憶部107に情報を記憶した場合には、ステップS108に進む。
入力データ一致情報記憶部107に情報を記録していない場合、すなわち、入力データと同じ文字列のデータを抽出しなかった場合は、ステップS111に進む(S107)。
入力データ一致情報記憶部107に情報を記録した場合、すなわち、入力データと同じ文字列のデータを抽出した場合は、出力検査部104は、入力データ一致情報記憶部107に記憶した文字列が連続している箇所を検索し、その情報を入力データ一致情報記憶部107に追加する(S108)。
【0031】
S108の処理詳細を図7で説明する。
【0032】
まず、出力検査部104は、入力データ一致情報記憶部107に記憶した一致情報を読込み、一致情報(無効化候補データ)の個数をNとする(S201)。
一致情報(無効化候補データ)の個数が2つ以上の場合にはS203に進み、それ以外の場合には処理を終了する(S202)。
次に、一致情報(無効化候補データ)の個数が2つ以上の場合には、本処理の初期化処理として、ループ用の変数をn=1、m=2とする(S203)。
そして、n≦Nの場合にはS205に進み処理を継続し、それ以外の場合には処理を終了する(S204)。
m≦Nの場合にはS206に進み、それ以外の場合にはS213に進む(S205)。
そして、n番目とm番目の一致情報がHTML文書中でn、mの順で、連続しているかを判定するために、n番目の一致情報の終了位置(n)+1とm番目の一致情報の終了位置s(m)が等しいことを調べ(S206〜207)、等しい場合にはn番目の一致情報の入力データとm番目の一致情報の入力データをn、mの順で連結し、入力データ一致情報記憶部107に追加する。
なお、追加した一致情報の開始位置は、n番目の一致情報の開始位置、終了位置はm番目の一致情報の終了位置となり、nは1つ増加する(S208)。
同様にn番目とm番目の一致情報がm、nの順で連続しているかを調べ、連続している場合には、n番目の一致情報の入力データとm番目の一致情報の入力データをm、nの順で連結し、同様に入力データ一致情報記憶部107に連続している情報を追加する(S209〜S211)。
この場合は、追加した一致情報の開始位置は、m番目の一致情報の開始位置、終了位置はn番目の一致情報の終了位置となり、nは1つ増加する。
以上の一致情報のn番目とm番目の一致情報に関する処理が完了したら、mを1増分しS205に戻る(S212)。
また、S213では、mがNより大きい場合には、nを増分しmをn+1にする。
以上の処理を繰返すことで、入力データが連続している箇所を見つけることができる。
【0033】
なお、S206〜S208でn番目とm番目の入力データがn、mの順で連続しているかを調べ、n番目の入力データとm番目の入力データをn、mの順で連結することで、スクリプトコードが分割されている(n番目の入力データとm番目の入力データが離間している場合も含む)HTTPリクエストが送信された場合にも、有効にスクリプトコードを抽出することができる。
【0034】
また、S209〜S211でn番目とm番目の入力データがm、nの順で連続しているかを調べ、n番目の入力データとm番目の入力データをm、nの順で連結することで、HTTPリクエストではn番目の入力データが前の位置に配置されm番目の入力データが後の位置に配置されていた(n番目の入力データとm番目の入力データが離間している場合も含む)ものが、Webアプリケーション103によってHTTPリクエストでの順序とは逆に入力データが配置され、HTTPレスポンスではm番目の入力データに続いてn番目の入力データが配置されるような場合にも、有効にスクリプトコードを抽出することができる。
【0035】
再び図3に戻りS109から説明する。
出力検査部104は、入力データ一致情報記憶部107に記憶した一致情報のうち2つの条件に合致するものを削除する(S109)。
1つ目の条件とは、他の一致情報に包含される一致情報である。
この条件は、各一致情報の開始位置と終了位置を比較することで判定できる。
例えば、n番目の一致情報の開始位置をs(n)、終了位置をe(n)とする。
この場合に、n番目の一致情報とm番目の一致情報を比較し、s(n)≦s(m)かつe(n)≧e(m)が成立する時には、m番目の一致情報はn番目の一致情報に含まれる。
この条件が成立する場合に、出力検査部104は、入力データ一致情報記憶部107からm番目の一致情報を削除する。
そして、2つ目の条件は、対策設定ファイル108で記載に記載された入力データと判定する最低文字数よりも短い一致情報である。
これは、入力データとみなせる文字列が短いため、攻撃データとしては成立しない入力データを削除するために行う。
これらを行った後に、出力検査部104は、出力構文解析部105にWebアプリケーションから受け取ったHTTPレスポンスを渡す。
例えば、図4に示したデータが入力記憶部102に記録され、図5のようなHTML文書が出力された場合には、入力データ一致情報記憶部107の記録は最終的には図8のようになる。
図8では、図6の3行目の入力データと4行目の入力データが連結されて、図8の4行目の連結データになっている。
なお、図6の3行目の入力データと4行目の入力データは、図8の4行目の連結データに包含されるので、削除されている。
また、図8の表の1列目と1行目は説明のため便宜上つけており実際には必要ない。
【0036】
次に、出力構文解析部105は、出力検査部104から受け取ったHTTPレスポンスのHTML文書の構文を解析し、入力データがHTML構文中の何処に位置するのを特定し、その特定結果によりXSS対策を行う(S110)。
なお、HTMLの構文の定義は非特許文献1で開示されており、この定義に従ってHTML文書の先頭から調べることで、構文解析を行っていく。
詳細は割愛するが、HTML文書は、プレーンテキストを要素で括って文書をマークアップすることで、文書に構造や意味などを与えるものであり、要素内に要素を入れることが可能であり、構造的に文書を表すことができる。
要素は開始タグ、コンテンツ、終了タグの3つで構成される。
開始タグは、要素名を「<」と「>」で囲んだ形式であり、終了タグは要素名を「</」と[>]で囲んだものになる。
また、必要に応じて、要素に属性と呼ばれる特性を付加してもよく、開始タグの内部に、要素名に続けて属性名=属性値という形で記述する。
なお、内容を含まない要素については、終了タグをもたないものもある(例えば、改行を表す<BR>や入力フォームを表す<INPUT>など)。
なお、要素名と属性名については大文字と小文字を区別せず、属性値については、属性によって大文字と小文字を区別するかどうかが個別に定められる。
【0037】
S110での出力構文解析部105の処理内容について、図9を使って説明する。
【0038】
出力構文解析部105は、HTML文書を読み出し、開始タグおよび終了タグとなる文字列パターンを、HTML文書の先頭から抽出しながら(S301)、タグの文字列・開始位置・終了位置からなる一覧を作成する。
なお、タグの抽出は、正規表現「<[a−zA−Z/!][^>]*」などを使ってHTML文書を文字列検索すれば可能である。
なお、<BR>などの終了タグがなく属性もない要素については、抽出結果から除外する。
【0039】
次に出力構文解析部105は、一覧抽出したタグを上から順に解析し、タグの要素名に基づき開始タグと終了タグの関係を解析して、HTML文書の階層構造を調べる(S302)。
また、各要素が位置するタグ階層上の深さ(以後、レベルと呼ぶ)を算出する。
例えば、図10のようなHTML文書の場合には、HTML要素のレベルは0とし、BODY要素はレベル1、DIV要素とFORM要素はレベル2、INPUT要素はレベル3とする。
なお、前述したとおりHTMLに終了タグがない要素や省略できる要素があり、前述した非特許文献1で規定される定義に基づいて調査する。
【0040】
次に、出力構文解析部105は、抽出した開始タグと終了タグの情報をまとめて、レベル、要素名、開始タグの内容、開始タグの開始位置、開始タグの終了位置、終了タグの開始位置、終了タグの終了位置を含む情報を作成する(S303)。
【0041】
次に、出力構文解析部105は、開始タグの内容を要素名、属性名、属性値に分解する。
そして、要素名、属性名、属性値の開始位置、終了位置をそれぞれ算出する(S304)。
なお、属性値は「”」「’」などのクォートも含めたものとする。
そして、これらのHTMLの構造に関する情報をまとめたHTML構造情報をメモリ上に保持する。
このHTML構造情報は、各エントリが、要素か属性を示す種別(以後、種別とする)、要素または属性の名称、レベル(属性の場合には、その属性が含まれる要素のレベルと同じになる)を含み、さらに要素のエントリの場合には、開始タグの開始位置・終了位置、終了タグの開始位置・終了位置を含む。
属性のエントリの場合には、属性名の開始位置・終了位置、属性値の開始位置、属性値の終了位置を含む。
例えば、HTML構文情報のイメージは図11のようになる。
種別の欄の「E」は要素、「A」は属性、「V」は属性値であることを示している。
なお、図11の表の一行目は説明の便宜上のために記載したものであり、実際には必要がない。
また、要素名、属性名についてレベルに応じてインデントしているが、実際には必要がない。
ここまで解析した段階で、入力データ一致情報記憶部107の情報および、出力構文解析部105で解析したHTML文書の構文情報を使って、HTML文書に含まれる入力データが、HTML構文中の何処の領域に含まれるかを特定していく。
【0042】
出力構文解析部105は、入力データ一致情報記憶部107に記憶する各データの開始位置、終了位置の情報と、HTML構文情報の開始位置/終了位置を比較して、各入力データが、開始タグ、終了タグ、要素内、属性値内、属性値内、それら以外(コンテンツ内と呼ぶ)のいずれかの領域に含まれるか、複数の領域に跨るかを判別する(S305)。
【0043】
以上の手順で特定した入力データが位置する領域に基づき、出力構文解析部105は、出力送信部106に渡す前に、HTTPレスポンスに含まれるHTML文書に対して、XSS対策を行う(S306)。
各領域でのXSS対策は、対策設定ファイル108で指定されている。
例えば、入力データが属性値やコンテンツに出力されている場合には以下のように対策を行う。
【0044】
入力データが属性値の場合
hrefとsrc:入力データがhttp://、https://で始まる場合にのみURLのみに限定し、出力する場合も、クエリストリングにあたる箇所はURLエンコーディングする。
style:英数字以外は¥xHH;形式でエンコードする。
イベントハンドラ:styleの場合と同様
上記以外:入力データをエンティティ表現へ変換する。
【0045】
入力データがコンテンツ内の場合
HTML構文情報を確認して、上のレベルにSCRIPT要素がないかを調べる。
SCRIPT要素が上のレベルに存在する場合には、該当する入力データをすべて半角スペースに置換する。
また、上のレベルにSCRIPT要素が存在しない場合には、該当する入力データをすべてエンティティ表現でエスケープする。
【0046】
最後に、出力送信部106が、出力構文解析部105または出力検査部104から受け取ったHTTPレスポンスをクライアント装置200に送信し、入力記憶部102に記憶した入力データをすべてクリアする(ステップS111)。
【0047】
以上のように、クライアント装置からWebアプリケーションへのHTTPリクエストに含まれる入力データをすべて一旦記憶しておくことで、Webアプリケーションから出力されたHTML文書に入力データが含まれているかを調べることができる。
さらに、出力するHTTPレスポンスを構文解析してスクリプトコードを抽出し、スクリプトコードの1ステートメント以上に入力データが含まれるかを調べることで、Webアプリケーション内部で出力した文字列が入力データと一致した場合においても、誤って脆弱性対策を施すことを省くことができる。
さらに、入力データが連続する箇所を1つの入力データとして扱うことで、攻撃データが別の入力データとして分割されて、出力時に連結して攻撃データとなる場合についても、攻撃データであることを検知することができる。
【0048】
本実施の形態では、レスポンスデータにHTML文書が含まれるか否かをレスポンスのContent−Typeヘッダを確認することで行っている。
ただし、ブラウザによってはContent−Typeにimage/gifなどの画像データが指定された場合にでも、データ自体がHTMLであるとブラウザが判定すると、HTML文書として表示するブラウザもある。
このため、Content−Typeヘッダで判定を行わずに、その後のHTML構文解析処理の段階で、HTMLか否かを判定しても良い。
【0049】
本実施の形態では、事前に定められたXSSの対策処理を施したが、XSSの対策処理の方法をファイルなどで設定し、その設定情報を読込むことで、脆弱性対策の方法を変更することも可能である。
【0050】
以上、本実施の形態では、
Webアプリケーションで利用するデータについて外部から入力されたデータを記憶し、Webアプリケーションから外部にデータを出力する際に、出力データ中に外部から入力されたデータが含まれている場所を特定し、その場所のデータ構造に応じて、攻撃に対策方法を変更するWebアプリケーション実行装置を説明した。
【0051】
また、本実施の形態では、
HTMLを構文解析し、HTML文中に上記パターンが出力される場所を特定し、出力場所に応じて取り除くべき文字を特定するWebアプリケーション実行装置を説明した。
【0052】
実施の形態2.
以上の実施の形態1では、HTTPリクエストに攻撃データが含まれていた場合に、そのレスポンスに攻撃データが含まれていることを検知するものであるが、次に、HTTPリクエストからの攻撃データが一旦データベースなどに保存され、別のリクエストに対するレスポンスに攻撃データが現れる場合(蓄積型XSS)に脆弱性対策を行うための実施の形態を示す。
【0053】
図12は、この実施の形態に係るWebアプリケーション実行装置100の構成図である。
図2において、Webアプリケーション実行装置100は、実施の形態1の構成要素に加えて、データベース109、DB監視部110、DB監視設定ファイル111、外部データ識別ファイル112が加わっている。
【0054】
データベース109は、Webアプリケーション103が利用するデータベースである。
【0055】
DB監視部110は、Webアプリケーション103がデータベース109へアクセスする際のSQL文を監視し、データベース109への書込みと読込みを判定する。
Webアプリケーション103が、入力記憶部102に記録されている入力データ(埋め込み先候補データ)をデータベース109に書き込んだ場合には、DB監視部110は、Webアプリケーション103が入力データを書き込んだテーブル名/カラム名を外部データ識別ファイル112に記録する。
また、Webアプリケーション103が、外部データ識別ファイル112に記載されているテーブル名/カラム名のデータをデータベース109から読込んだ場合には、DB監視部110は、Webアプリケーション103がデータベース109から読込んだデータを入力記憶部102に追加する。
DB監視部110は、書き込みアクセス監視部及び読み出しアクセス監視部の例である。
なお、書込み/読込みを判別するための設定情報は、DB監視設定ファイル111に記述されている。
【0056】
DB監視設定ファイル111は、DB監視部110がSQL文を監視することで、データベース109への書込みや読込みを判定するための設定情報が記載されたファイルである。
例えば、UPDATE文が発行された場合には、書込みと判断し、SELECT文などが発行された場合には読込みと判定するための設定が含まれている。
【0057】
外部データ識別ファイル112は、Webアプリケーション103がデータベース109へ外部データ(入力記憶部102に記録されている入力データ)を書き込んだとDB監視部110が判定した場合に、外部データを書込んだテーブル名とカラム名を記録するためのファイルである。
外部データ識別ファイル112に記録される、外部データを書込んだテーブル名とカラム名の情報は、書き込み情報の例である。
【0058】
次に図13を使ってデータベース109に外部データが書き込まれる場合の動作を説明する。
【0059】
クライアント装置200からのHTTPリクエストがWebアプリケーション実行装置100に到達すると、実施の形態1のS101〜S104と同様に、入力受信部101でHTTPリクエストを受信し、HTTPリクエストの入力データを抽出して、入力記憶部102に記憶する。
そして、Webアプリケーション103にHTTPリクエストを渡す。
その後、Webアプリケーション実行装置100は、Webアプリケーション103からの応答を待機する(S401〜S404)。
【0060】
その後、Webアプリケーション103がデータベース109にアクセスする(S405)。
DB監視部110は、Webアプリケーション103からデータベース109に送信されるSQL文を分析し、DB監視設定ファイル111の設定内容に従って、データベース109への書込み処理か、読込み処理かを判別する(S406)。
例えば、UPDATE文が発行された場合は書込み、SELECT文が発行された場合は読込みと判定する。
書込み処理と判定した場合にはS407に進み、読込み処理と判定した場合にはS409に進む。
【0061】
書込み処理と判定した場合には、DB監視部110は、文字列比較によりデータベース109へのSQL文に、入力記憶部102に記憶されている入力データと同じものがあるか否か、すなわち、入力データのデータベース109への書き込みが行われているか否かを判断し(S407)、入力データの書き込みが行われている場合には、S408に進み、入力データ以外のデータの書き込みが行われている場合はS412に進む。
【0062】
入力記憶部102に記憶されている入力データがデータベース109に書込まれているとDB監視部110が判定したら、DB監視部110はSQL文から入力データを書込むテーブル名、カラム名及び値を抽出し、抽出したテーブル名、カラム名及び値を書き込み情報として外部データ識別ファイル112に書込む(S408)。
例えば、以下のSQL文の場合、userTableをテーブル名、name1をカラム名と、Tanakaを値と判断する。
UPDATAE usertTable SET name1 = “Tanaka”;
なお、既に同じテーブル名とカラム名が書込み済みである場合には、テーブル名/カラム名は外部データ識別ファイル112に書込む必要がなく、同じテーブル名/カラム名のエントリに値のみを追加する。
また、既に同じテーブル名、カラム名、値が書込み済みである場合には、外部データ識別ファイル112に書込む必要がない。
また、データベースアクセスがエラーとなった場合にも、テーブル名/カラム名の情報を書き込む必要はない。
この処理が完了したらS412に進む。
【0063】
一方、S406において、Webアプリケーション103がデータベース109からデータを読込んでいるとDB監視部110が判定したら、SQL文からデータを読込むテーブル名とカラム名を抽出し、外部データ識別ファイル112にそれらテーブル名/カラム名の記載がないかを調べる(S409)。
例えば、以下のSQL文の場合、テーブル名userTableからカラム名name1を読込んでいる。
SELECT name1 FROM usertTable;
外部データ識別ファイル112に記載があるテーブル名/カラム名からデータを読込んだと判定した場合には、S410に進み、異なるテーブル名/カラム名からデータを読込んだと判定した場合にはS412に進む。
【0064】
Webアプリケーション103が外部データ識別ファイル112に記載があるテーブル名/カラム名からデータを読込んだ場合には、DB監視部110は、外部データ識別ファイル112のテーブル名/カラム名のエントリに記載された値と同じデータが読込みのSQL文のレスポンスに含まれていないかを調べる(S410)。
つまり、Webアプリケーション103により読み出されたデータが外部データ識別ファイル112に記述されている入力データと一致するか否かを判断する。
データがSQL文のレスポンスに含まれている場合にはS411に進み、含まれていない場合にはS412に進む。
【0065】
SQL文のレスポンスに外部データ識別ファイル112に記載の値と同じデータが含まれている場合には、DB監視部110は、Webアプリケーション103が読込んだデータを入力記憶部102に追加する(S411)。
なお、DB監視部110が入力記憶部102に追加したデータの情報は、読み出し情報に相当する。
【0066】
S412では、実施の形態1の図3記載のS105〜S111と同じ処理を行う。
つまり、出力検査部104は、HTTPレスポンス内のHTML文書に対して、入力受信部101がHTTPリクエストから抽出し入力記憶部102に記録した入力データと一致するデータを検索するとともに、DB監視部110が入力記憶部102に記録したデータ(Webアプリケーション103がデータベース109から読み込んだデータ)と一致するデータも検索する。
【0067】
以上のように、本実施の形態では、Webアプリケーションによるデータベースへの書き込みを監視して、データベースへの外部入力データの書き込みを監視することで、攻撃データをHTTPリクエストで送信し、一旦データベース等に蓄積された後に、別のHTTPリクエストでその蓄積された攻撃データを読込んでHTMLに出力することで発生する蓄積型XSSを防ぐことができる。
【0068】
以上、本実施の形態では、
Webアプリケーションで利用するデータが、外部入力のデータであることを記憶し、入力データを利用する各処理の実行時に、処理内容に応じて、適切なサニタイズ処理を動的に選択するWebアプリケーション実行装置を説明した。
【0069】
また、本実施の形態では、
Webアプリケーションに外部入力がDBへの書込まれるDBのテーブル名とカラム名と値を記憶しておき、当該テーブル/カラムから読込まれたデータから書込んだ値と同じ値が含まれている場合には、外部入力データとみなして脆弱性の検査対象に加えるWebアプリケーション実行装置を説明した。
【0070】
なお、実施の形態1及び2に係るWebアプリケーション実行装置100は、Webアプリケーション103を実行するサーバ機能と、HTTPリクエストから入力データを抽出し、HTTPレスポンスに入力データと一致するデータが含まれているかを検査するフィルタ機能の双方を有することになっている。
実施の形態1及び2に示した構成の他に、Webアプリケーション103を実行する装置をサーバ装置とし、フィルタ処理を実行する装置をデータ処理装置として分離し、データ処理装置をクライアント装置200とサーバ装置の間に介在させる構成としてもよい。
この場合は、データ処理装置は、実施の形態1の構成では、例えば、入力受信部101、入力記憶部102、出力検査部104、出力構文解析部105、出力送信部106で構成される。
また、実施の形態2の構成では、例えば、入力受信部101、入力記憶部102、出力検査部104、出力構文解析部105、出力送信部106、DB監視部110、DB監視設定ファイル111、外部データ識別ファイル112で構成される。
【0071】
最後に、実施の形態1及び2に示したWebアプリケーション実行装置100のハードウェア構成例について説明する。
図14は、実施の形態1及び2に示すWebアプリケーション実行装置100のハードウェア資源の一例を示す図である。
なお、図14の構成は、あくまでもWebアプリケーション実行装置100のハードウェア構成の一例を示すものであり、Webアプリケーション実行装置100のハードウェア構成は図14に記載の構成に限らず、他の構成であってもよい。
【0072】
図14において、Webアプリケーション実行装置100は、プログラムを実行するCPU911(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。
CPU911は、バス912を介して、例えば、ROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。
更に、CPU911は、FDD904(Flexible Disk Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSD(Solid State Drive)、光ディスク装置、メモリカード(登録商標)読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
実施の形態1及び2で説明した「入力記憶部102」、「入力データ一致情報記憶部107」は、RAM914、磁気ディスク装置920等により実現される。
また、実施の形態2で説明した「データベース109」は、例えば、磁気ディスク装置920により実現される。
通信ボード915、キーボード902、マウス903、スキャナ装置907、FDD904などは、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
【0073】
通信ボード915は、図1に示すように、ネットワークに接続されている。
通信ボード915は、インターネットの他、例えば、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、SAN(ストレージエリアネットワーク)などに接続されている。
【0074】
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。
プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。
【0075】
また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、RAM914には、CPU911による処理に必要な各種データが格納される。
【0076】
また、ROM913には、BIOS(Basic Input Output System)プログラムが格納され、磁気ディスク装置920にはブートプログラムが格納されている。
Webアプリケーション実行装置100の起動時には、ROM913のBIOSプログラム及び磁気ディスク装置920のブートプログラムが実行され、BIOSプログラム及びブートプログラムによりオペレーティングシステム921が起動される。
【0077】
上記プログラム群923には、実施の形態1及び2の説明において「〜部」(「入力記憶部102」、「入力データ一致情報記憶部107」以外、以下同様)として説明している機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
【0078】
ファイル群924には、実施の形態1及び2の説明において、「〜の判断」、「〜の判定」、「〜の解析」、「〜の比較」、「〜の検索」、「〜の抽出」、「〜の追加」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の監視」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのCPUの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態1及び2で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD等の記録媒体に記録される。
また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0079】
また、実施の形態1及び2の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態1及び2で説明したフローチャートに示すステップ、手順、処理により、本発明に係る「データ処理方法」を実現することができる。
また、「〜部」として説明しているものは、ROM913に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。
プログラムはCPU911により読み出され、CPU911により実行される。
すなわち、プログラムは、実施の形態1及び2の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態1及び2の「〜部」の手順や方法をコンピュータに実行させるものである。
【0080】
このように、実施の形態1及び2に示すWebアプリケーション実行装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【0081】
100 Webアプリケーション実行装置、101 入力受信部、102 入力記憶部、103 Webアプリケーション、104 出力検査部、105 出力構文解析部、106 出力送信部、107 入力データ一致情報記憶部、108 対策設定ファイル、109 データベース、110 DB監視部、111 DB監視設定ファイル、112 外部データ識別ファイル、200 クライアント装置、300 ネットワーク。
【技術分野】
【0001】
本発明は、クライアント装置からサーバ装置へのリクエストと、サーバ装置からクライアント装置へのレスポンスとを解析して、レスポンスに含まれている特定種類のコードを抽出し、抽出した特定種類のコードを無効化する技術に関する。
【背景技術】
【0002】
クロスサイト・スクリプティング(以下、XSSとも表記する)は、HTML(HyperText Markup Language)中に外部から入力されたデータを出力する動的生成ページにおいて、悪意のあるスクリプトコードを利用者のクライアント装置で実行させる攻撃である。
悪意のあるスクリプトコードは、撃攻者によって、クライアント装置からサーバ装置へ送信されるHTTP(HyperText Transfer Protocol)リクエスト(以下、単にリクエストとも表記する)に混入させられる。
XSSを防ぐには、リクエストに混入しているスクリプトコードが動作しないようにする必要がある。
これは、サーバ装置のWebアプリケーション内部でリクエストに含まれる特定の文字を取り除くことで実現できる。
しかし、出力するHTML構文中のどの箇所にスクリプトコードが書き込まれるかより、取り除く文字が異なるため、悪意のあるスクリプトコードが動作しないようにするためには、HTML構文中の位置ごとに取り除くべき文字を判別する必要がある。
このような対策は開発者が実装しなければならず、開発者の知識不足や不注意などで対策抜けが発生する可能性がある。
XSSを自動で対策する従来技術としては、リクエストに現れた不正コードがHTTPレスポンス(以下、単にレスポンスとも表記する)にも現れたときに攻撃に使われる特定の文字を取り除く方法が知られている(例えば、特許文献1)。
なお、HTML構文の定義は、例えば、非特許文献1に示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2005−92564号公報
【非特許文献】
【0004】
【非特許文献1】HTML 4.01 Specification http://www.w3.org/TR/html401/
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1の技術では、Webアプリケーションへのリクエストに含まれる攻撃データのHTML構造に応じて、不正コードを一旦記憶し、記憶した不正コードがレスポンスにそのまま現れた場合に攻撃に使われる特定の文字を取り除く。
このため、当該不正コードの配置がWebアプリケーション内部で変更された場合や、リクエストにおいて分割されて送信された場合にはXSSを防ぐことができないという課題がある。
【0006】
また、特許文献1の技術では、リクエストに含まれる攻撃データのHTML構造に応じて取り除く文字を選択していた。
このため、出力するHTML構文中のどの箇所にスクリプトが書き込まれているかにより、取り除く文字を変更する必要があるXSSを正しく防ぐことができないという課題がある。
【0007】
さらに、特許文献1の技術では、HTTPリクエストのみを対象としている。
このため、データベースやファイルなどに一端保存された後に、別のリクエストで、保存されたデータを読み出す攻撃には対処できない。
例えば、不正コードを一旦データベースに保存し、別のページで再度これを読出す蓄積型XSSについては対処できないという課題がある。
【0008】
この発明は、上記の課題を解決することを主な目的としており、クロスサイト・スクリプティングを有効に防止する構成を実現することを主な目的とする。
【課題を解決するための手段】
【0009】
本発明に係るデータ処理装置は、
クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力部と、
前記リクエスト入力部により入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出部と、
前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力部と、
前記レスポンス入力部により入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出部と、
前記無効化候補データ抽出部により複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結部と、
前記データ連結部により連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化部とを有することを特徴とする。
【発明の効果】
【0010】
本発明によれば、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとしてリクエストから抽出し、レスポンスにおいて埋め込み先候補データと値が一致するデータを無効化候補データとして抽出し、レスポンス内で連続した位置に配置されている2以上の無効化候補データを連結し、連結された連結無効化候補データに含まれている特定種類のコードを無効化する。
このため、特定種類のコードの配置がWebアプリケーション内部で変更された場合や、特定種類のコードがリクエストにおいて分割されて送信された場合にも、特定種類のコードを無効化することができ、特定種類のコードをクロスサイト・スクリプティングに用いられる不正なコードとすることにより、クロスサイト・スクリプティングを有効に防止することができる。
【図面の簡単な説明】
【0011】
【図1】実施の形態1に係るシステム構成例を示す図。
【図2】実施の形態1に係るWebアプリケーション実行装置の構成例を示す図。
【図3】実施の形態1に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図4】実施の形態1に係る入力データの例を示す図。
【図5】実施の形態1に係るWebアプリケーションからの応答の例を示す図。
【図6】実施の形態1に係るWebアプリケーションからの応答に対する解析の中間結果を示す図。
【図7】実施の形態1に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図8】実施の形態1に係るWebアプリケーションからの応答に対する解析の最終結果を示す図。
【図9】実施の形態1に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図10】実施の形態1に係るHTML要素のレベルを説明する図。
【図11】実施の形態1に係るHTML構文情報の例を示す図。
【図12】実施の形態2に係るWebアプリケーション実行装置の構成例を示す図。
【図13】実施の形態2に係るWebアプリケーション実行装置の動作例を示すフローチャート図。
【図14】実施の形態1及び2に係るWebアプリケーション実行装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【0012】
実施の形態1.
本実施の形態では、Webアプリケーションに脆弱性が存在した場合でも脆弱性への攻撃を防ぐために、HTTPリクエストなどの外部からの入力データをすべて記憶して、入力データを使って出力データを解析し、その解析結果に応じて、入力データの混入によって発生するWebアプリケーションの脆弱性への対策処理を行う構成を説明する。
【0013】
図1は、実施の形態1に係るWebアプリケーション実行装置を含むシステムの概略図である。
【0014】
図1において、本実施の形態に係るシステムは、Webアプリケーション実行装置100、クライアント装置200、ネットワーク300(インターネット等のネットワーク)から構成される。
Webアプリケーション実行装置100と複数のクライアント装置200は、ネットワーク300を介して接続される。
なお、Webアプリケーション実行装置100は、データ処理装置及びサーバ装置の例である。
【0015】
図2は、実施の形態1に係るWebアプリケーション実行装置100の構成例を示す図である。
図2において、Webアプリケーション実行装置100は、入力受信部101、入力記憶部102、Webアプリケーション103、出力検査部104、出力構文解析部105、出力送信部106、入力データ一致情報記憶部107、対策設定ファイル108で構成されている。
【0016】
入力受信部101は、クライアント装置200から送信されたHTTPリクエストを受信する。
また、入力受信部101は、受信したHTTPリクエストを解析し、HTTPリクエスト内の複数のデータのうち、スクリプトコード(特定種類のコードの例)が埋め込まれている可能性のあるデータを入力データ(埋め込み先候補データに相当)として抽出する。
入力受信部101は、リクエスト入力部及び埋め込み先候補データ抽出部の例である。
また、入力受信部101により実行される処理が、リクエスト入力ステップ及び埋め込み先候補データ抽出ステップに相当する。
【0017】
ここで、入力データとは、GETメソッド等で与えられるURL(Uniform Resource Locator)ストリング内のパラメータの値(以後、GETパラメータ値とよぶ)、POSTメソッドで与えられるパラメータの値(以後、POSTパラメータ値とよぶ)、Cookie以外の各HTTPヘッダの値(以後、ヘッダ値とよぶ)、Cookieの値(以後、Cookie値とよぶ)である。
なお、GETメソッドで与えられるパラメータは、HTTPリクエストのリクエストラインに含まれるURI(Uniform Resource Identifier)中のクエリストリングと呼ばれる部分で指定される。
クエリストリングは、URI内に含めた「?」後の文字列で指定され、パラメータの名前と値とを「=」で区切った形式で指定する。また複数のパラメータを指定する場合には「&」で区切る。
POSTメソッドで与えられるパラメータは、POSTメソッドで送信されたHTTPリクエストのボディ部に格納され、パラメータの名前と値とを「=」で区切った形式で指定される。複数のパラメータを指定する場合には「&」や「;」で区切られる。
ヘッダのパラメータは、HTTPリクエストのヘッダで指定され、ヘッダの名前と値とを「:」で区切った形式で指定される。各ヘッダは改行で区切られる。
Cookieは、HTTPリクエストのヘッダで指定され、ヘッダの名前が「Cookie」となる。
Cookieの名前と値とを「=」で区切った形式で指定される。
複数のパラメータを指定する場合には、複数のCookieヘッダで指定するか、1つのヘッダ中で、Cookieの指定を「;」、「,」で区切る。
【0018】
入力記憶部102は、入力受信部101で抽出された入力データを記憶し、Webアプリケーション実行装置100がHTTPレスポンスをクライアント装置200に返すまで保持する。
【0019】
Webアプリケーション103は、受信したHTTPリクエストに応じた処理を行い、処理結果としてHTTPレスポンスを出力する。
【0020】
出力検査部104は、Webアプリケーション103からHTTPレスポンスを入力する。
また、出力検査部104は、入力したHTTPレスポンスを解析し、HTTPレスポンスに含まれるHTML文書に入力データが含まれるかを文字列比較により検査する。
つまり、出力検査部104は、HTTPレスポンス内のデータのうち、入力データ(埋め込み先候補データ)と値が一致するデータを抽出する。
出力検査部104により抽出されたデータは、スクリプトコードが含まれている可能性があり、スクリプトコードを無効にする無効化処理(サニタイジング)の対象になる可能性があり、無効化候補データに相当する。
また、出力検査部104は、複数のデータを抽出した場合に、HTTPレスポンス内での位置が連続している2以上のデータを検索し、検索の結果抽出した2以上のデータを連結する。
出力検査部104により連結されたデータは、連結無効化候補データに相当する。
出力検査部104は、レスポンス入力部、無効化候補データ抽出部、データ連結部の例である。
また、出力検査部104が実行する処理が、レスポンス入力ステップ、無効化候補データ抽出ステップ、データ連結ステップに相当する。
【0021】
出力構文解析部105は、出力検査部104により抽出されたデータにスクリプトコードが含まれているか否かを判断し、また、HTTPレスポンスに含まれるHTML文書を構文解析し、出力検査部104により抽出されたデータが含まれる場所がHTML構造中のどの位置になるかを特定し、その特定した位置に応じてXSS対策(スクリプトコードの無効化)を行う。
出力構文解析部105は、コード無効化部の例である。
また、出力構文解析部105により実行される処理が、コード無効化ステップに相当する。
【0022】
出力送信部106は、HTTPレスポンスをクライアント装置200に対して送信する。
Webアプリケーション103からのHTTPレスポンスにスクリプトコードが含まれていたとしても、出力構文解析部105によりスクリプトコードが無効化されているので、出力送信部106からは無害なHTTPレスポンスが送信される。
【0023】
入力データ一致情報記憶部107は、出力するHTML文書に含まれている入力データに関する情報を一時的に記録する。
つまり、入力データ一致情報記憶部107は、出力検査部104により抽出されたデータの情報を一時的に記録する。
なお、記録した情報は、HTTPレスポンスのクライアント装置200への送信とともにクリアされる。
【0024】
対策設定ファイル108は、Webアプリケーション103内部で変換される可能性があるデータの変換パターンに関する設定と、出力検査部104での検査時に入力データと判定する最低文字数と、出力構文解析部105で実施するXSSの脆弱性に対処するための処理内容とが記載されている。
スクリプトコードが含まれているHTML文書内での位置、つまり、スクリプトコードが含まれているデータがどのカテゴリー(開始タグ、終了タグ、要素内、属性値内、コンテンツ内など)に分類されるかにより無効化方式が変化するが、対策設定ファイル108における「出力構文解析部105で実施するXSSの脆弱性に対処するための処理内容」とは、具体的には、カテゴリーごとのスクリプトコードの無効化方式が記述されている。
このように、対策設定ファイル108は、無効化方式情報の例に相当する。
【0025】
次に、図3を用いて本実施の形態に係るWebアプリケーション実行装置100の動作例を説明する。
【0026】
クライアント装置200からのHTTPリクエストがWebアプリケーション実行装置100に到達すると、入力受信部101がHTTPリクエストを受信する(S101)。
【0027】
HTTPリクエストを受信した入力受信部101は、HTTPリクエストに含まれるGETパラメータ値やPOSTパラメータ値、ヘッダ値、Cookie値を入力データとして抽出し、入力記憶部102に記憶する(S102)。
この際に、入力データについて、まったく同じ文字列となるものは1つの入力データとして記憶する。
また、GETパラメータについては、各パラメータ値のURLエンコーディングをデコードしたものを入力データとして記憶する。
入力データの記憶時には、対策設定ファイル108の内容に基づいて、特定のデータが変換された場合の文字列も入力データとして追加する(例えば、テキストエリアに記載された文字列の改行コードを<BR>などに変換する)。
入力受信部101により抽出され、入力記憶部102に記録された入力データは、例えば図4のようになる。
なお、図4の表の1行目は説明のために便宜上つけており実際には必要ない。
【0028】
次に、入力受信部101は、受信したHTTPリクエストをそのままWebアプリケーション103に渡す(S103)。
HTTPリクエストをWebアプリケーション103に渡した後には、Webアプリケーション実行装置100は、Webアプリケーション103から応答が出力されるのを待つ(S104)。
【0029】
Webアプリケーション103は、受け取ったHTTPリクエストの処理を行い、その結果をHTTPレスポンスとして出力する。
出力したHTTPレスポンスは、出力検査部104に渡る。
出力検査部104は、Webアプリケーション103から受け取ったHTTPレスポンスのボディがHTML文書であるかを調べる(S105)。
レスポンスのContent−Typeヘッダが「text/html」または指定なしの場合には、HTTPレスポンスのボディにHTML文書が含まれていると判定する。
HTML文書が含まれていると判定した場合には、ステップS106に進む。
含まれていないと判定した場合には、ステップS111に進む。
【0030】
HTTPレスポンスのボディがHTML文書であると判定した場合には、出力検査部104は、HTTPレスポンスのHTML文書に入力記憶部102に記憶されている各入力データと同じ文字列のデータが含まれるかを、文字列比較によって検査する。
検査の結果、HTML文書中に入力データと同じ文字列のデータが含まれていた場合には、入力データ一致情報記憶部107に一致情報として、入力データと一致したデータ、一致が開始するのがHTML文書の何文字目か(以後、開始位置とよぶ)、および一致が終了するのがHTML文書の何文字目か(以後、終了位置とよぶ)を記憶する(S106)。
例えば、図4に示したデータが入力記憶部102に記録され、図5のようなHTML文書がHTTPレスポンスとして出力された場合には、入力データ一致情報記憶部107の記録は図6のようになる。
なお、図6の表の1列目と1行目は説明のため便宜上つけており実際には必要ない。
すべての入力データに対する比較が完了した時点で、入力データ一致情報記憶部107に情報を記憶した場合には、ステップS108に進む。
入力データ一致情報記憶部107に情報を記録していない場合、すなわち、入力データと同じ文字列のデータを抽出しなかった場合は、ステップS111に進む(S107)。
入力データ一致情報記憶部107に情報を記録した場合、すなわち、入力データと同じ文字列のデータを抽出した場合は、出力検査部104は、入力データ一致情報記憶部107に記憶した文字列が連続している箇所を検索し、その情報を入力データ一致情報記憶部107に追加する(S108)。
【0031】
S108の処理詳細を図7で説明する。
【0032】
まず、出力検査部104は、入力データ一致情報記憶部107に記憶した一致情報を読込み、一致情報(無効化候補データ)の個数をNとする(S201)。
一致情報(無効化候補データ)の個数が2つ以上の場合にはS203に進み、それ以外の場合には処理を終了する(S202)。
次に、一致情報(無効化候補データ)の個数が2つ以上の場合には、本処理の初期化処理として、ループ用の変数をn=1、m=2とする(S203)。
そして、n≦Nの場合にはS205に進み処理を継続し、それ以外の場合には処理を終了する(S204)。
m≦Nの場合にはS206に進み、それ以外の場合にはS213に進む(S205)。
そして、n番目とm番目の一致情報がHTML文書中でn、mの順で、連続しているかを判定するために、n番目の一致情報の終了位置(n)+1とm番目の一致情報の終了位置s(m)が等しいことを調べ(S206〜207)、等しい場合にはn番目の一致情報の入力データとm番目の一致情報の入力データをn、mの順で連結し、入力データ一致情報記憶部107に追加する。
なお、追加した一致情報の開始位置は、n番目の一致情報の開始位置、終了位置はm番目の一致情報の終了位置となり、nは1つ増加する(S208)。
同様にn番目とm番目の一致情報がm、nの順で連続しているかを調べ、連続している場合には、n番目の一致情報の入力データとm番目の一致情報の入力データをm、nの順で連結し、同様に入力データ一致情報記憶部107に連続している情報を追加する(S209〜S211)。
この場合は、追加した一致情報の開始位置は、m番目の一致情報の開始位置、終了位置はn番目の一致情報の終了位置となり、nは1つ増加する。
以上の一致情報のn番目とm番目の一致情報に関する処理が完了したら、mを1増分しS205に戻る(S212)。
また、S213では、mがNより大きい場合には、nを増分しmをn+1にする。
以上の処理を繰返すことで、入力データが連続している箇所を見つけることができる。
【0033】
なお、S206〜S208でn番目とm番目の入力データがn、mの順で連続しているかを調べ、n番目の入力データとm番目の入力データをn、mの順で連結することで、スクリプトコードが分割されている(n番目の入力データとm番目の入力データが離間している場合も含む)HTTPリクエストが送信された場合にも、有効にスクリプトコードを抽出することができる。
【0034】
また、S209〜S211でn番目とm番目の入力データがm、nの順で連続しているかを調べ、n番目の入力データとm番目の入力データをm、nの順で連結することで、HTTPリクエストではn番目の入力データが前の位置に配置されm番目の入力データが後の位置に配置されていた(n番目の入力データとm番目の入力データが離間している場合も含む)ものが、Webアプリケーション103によってHTTPリクエストでの順序とは逆に入力データが配置され、HTTPレスポンスではm番目の入力データに続いてn番目の入力データが配置されるような場合にも、有効にスクリプトコードを抽出することができる。
【0035】
再び図3に戻りS109から説明する。
出力検査部104は、入力データ一致情報記憶部107に記憶した一致情報のうち2つの条件に合致するものを削除する(S109)。
1つ目の条件とは、他の一致情報に包含される一致情報である。
この条件は、各一致情報の開始位置と終了位置を比較することで判定できる。
例えば、n番目の一致情報の開始位置をs(n)、終了位置をe(n)とする。
この場合に、n番目の一致情報とm番目の一致情報を比較し、s(n)≦s(m)かつe(n)≧e(m)が成立する時には、m番目の一致情報はn番目の一致情報に含まれる。
この条件が成立する場合に、出力検査部104は、入力データ一致情報記憶部107からm番目の一致情報を削除する。
そして、2つ目の条件は、対策設定ファイル108で記載に記載された入力データと判定する最低文字数よりも短い一致情報である。
これは、入力データとみなせる文字列が短いため、攻撃データとしては成立しない入力データを削除するために行う。
これらを行った後に、出力検査部104は、出力構文解析部105にWebアプリケーションから受け取ったHTTPレスポンスを渡す。
例えば、図4に示したデータが入力記憶部102に記録され、図5のようなHTML文書が出力された場合には、入力データ一致情報記憶部107の記録は最終的には図8のようになる。
図8では、図6の3行目の入力データと4行目の入力データが連結されて、図8の4行目の連結データになっている。
なお、図6の3行目の入力データと4行目の入力データは、図8の4行目の連結データに包含されるので、削除されている。
また、図8の表の1列目と1行目は説明のため便宜上つけており実際には必要ない。
【0036】
次に、出力構文解析部105は、出力検査部104から受け取ったHTTPレスポンスのHTML文書の構文を解析し、入力データがHTML構文中の何処に位置するのを特定し、その特定結果によりXSS対策を行う(S110)。
なお、HTMLの構文の定義は非特許文献1で開示されており、この定義に従ってHTML文書の先頭から調べることで、構文解析を行っていく。
詳細は割愛するが、HTML文書は、プレーンテキストを要素で括って文書をマークアップすることで、文書に構造や意味などを与えるものであり、要素内に要素を入れることが可能であり、構造的に文書を表すことができる。
要素は開始タグ、コンテンツ、終了タグの3つで構成される。
開始タグは、要素名を「<」と「>」で囲んだ形式であり、終了タグは要素名を「</」と[>]で囲んだものになる。
また、必要に応じて、要素に属性と呼ばれる特性を付加してもよく、開始タグの内部に、要素名に続けて属性名=属性値という形で記述する。
なお、内容を含まない要素については、終了タグをもたないものもある(例えば、改行を表す<BR>や入力フォームを表す<INPUT>など)。
なお、要素名と属性名については大文字と小文字を区別せず、属性値については、属性によって大文字と小文字を区別するかどうかが個別に定められる。
【0037】
S110での出力構文解析部105の処理内容について、図9を使って説明する。
【0038】
出力構文解析部105は、HTML文書を読み出し、開始タグおよび終了タグとなる文字列パターンを、HTML文書の先頭から抽出しながら(S301)、タグの文字列・開始位置・終了位置からなる一覧を作成する。
なお、タグの抽出は、正規表現「<[a−zA−Z/!][^>]*」などを使ってHTML文書を文字列検索すれば可能である。
なお、<BR>などの終了タグがなく属性もない要素については、抽出結果から除外する。
【0039】
次に出力構文解析部105は、一覧抽出したタグを上から順に解析し、タグの要素名に基づき開始タグと終了タグの関係を解析して、HTML文書の階層構造を調べる(S302)。
また、各要素が位置するタグ階層上の深さ(以後、レベルと呼ぶ)を算出する。
例えば、図10のようなHTML文書の場合には、HTML要素のレベルは0とし、BODY要素はレベル1、DIV要素とFORM要素はレベル2、INPUT要素はレベル3とする。
なお、前述したとおりHTMLに終了タグがない要素や省略できる要素があり、前述した非特許文献1で規定される定義に基づいて調査する。
【0040】
次に、出力構文解析部105は、抽出した開始タグと終了タグの情報をまとめて、レベル、要素名、開始タグの内容、開始タグの開始位置、開始タグの終了位置、終了タグの開始位置、終了タグの終了位置を含む情報を作成する(S303)。
【0041】
次に、出力構文解析部105は、開始タグの内容を要素名、属性名、属性値に分解する。
そして、要素名、属性名、属性値の開始位置、終了位置をそれぞれ算出する(S304)。
なお、属性値は「”」「’」などのクォートも含めたものとする。
そして、これらのHTMLの構造に関する情報をまとめたHTML構造情報をメモリ上に保持する。
このHTML構造情報は、各エントリが、要素か属性を示す種別(以後、種別とする)、要素または属性の名称、レベル(属性の場合には、その属性が含まれる要素のレベルと同じになる)を含み、さらに要素のエントリの場合には、開始タグの開始位置・終了位置、終了タグの開始位置・終了位置を含む。
属性のエントリの場合には、属性名の開始位置・終了位置、属性値の開始位置、属性値の終了位置を含む。
例えば、HTML構文情報のイメージは図11のようになる。
種別の欄の「E」は要素、「A」は属性、「V」は属性値であることを示している。
なお、図11の表の一行目は説明の便宜上のために記載したものであり、実際には必要がない。
また、要素名、属性名についてレベルに応じてインデントしているが、実際には必要がない。
ここまで解析した段階で、入力データ一致情報記憶部107の情報および、出力構文解析部105で解析したHTML文書の構文情報を使って、HTML文書に含まれる入力データが、HTML構文中の何処の領域に含まれるかを特定していく。
【0042】
出力構文解析部105は、入力データ一致情報記憶部107に記憶する各データの開始位置、終了位置の情報と、HTML構文情報の開始位置/終了位置を比較して、各入力データが、開始タグ、終了タグ、要素内、属性値内、属性値内、それら以外(コンテンツ内と呼ぶ)のいずれかの領域に含まれるか、複数の領域に跨るかを判別する(S305)。
【0043】
以上の手順で特定した入力データが位置する領域に基づき、出力構文解析部105は、出力送信部106に渡す前に、HTTPレスポンスに含まれるHTML文書に対して、XSS対策を行う(S306)。
各領域でのXSS対策は、対策設定ファイル108で指定されている。
例えば、入力データが属性値やコンテンツに出力されている場合には以下のように対策を行う。
【0044】
入力データが属性値の場合
hrefとsrc:入力データがhttp://、https://で始まる場合にのみURLのみに限定し、出力する場合も、クエリストリングにあたる箇所はURLエンコーディングする。
style:英数字以外は¥xHH;形式でエンコードする。
イベントハンドラ:styleの場合と同様
上記以外:入力データをエンティティ表現へ変換する。
【0045】
入力データがコンテンツ内の場合
HTML構文情報を確認して、上のレベルにSCRIPT要素がないかを調べる。
SCRIPT要素が上のレベルに存在する場合には、該当する入力データをすべて半角スペースに置換する。
また、上のレベルにSCRIPT要素が存在しない場合には、該当する入力データをすべてエンティティ表現でエスケープする。
【0046】
最後に、出力送信部106が、出力構文解析部105または出力検査部104から受け取ったHTTPレスポンスをクライアント装置200に送信し、入力記憶部102に記憶した入力データをすべてクリアする(ステップS111)。
【0047】
以上のように、クライアント装置からWebアプリケーションへのHTTPリクエストに含まれる入力データをすべて一旦記憶しておくことで、Webアプリケーションから出力されたHTML文書に入力データが含まれているかを調べることができる。
さらに、出力するHTTPレスポンスを構文解析してスクリプトコードを抽出し、スクリプトコードの1ステートメント以上に入力データが含まれるかを調べることで、Webアプリケーション内部で出力した文字列が入力データと一致した場合においても、誤って脆弱性対策を施すことを省くことができる。
さらに、入力データが連続する箇所を1つの入力データとして扱うことで、攻撃データが別の入力データとして分割されて、出力時に連結して攻撃データとなる場合についても、攻撃データであることを検知することができる。
【0048】
本実施の形態では、レスポンスデータにHTML文書が含まれるか否かをレスポンスのContent−Typeヘッダを確認することで行っている。
ただし、ブラウザによってはContent−Typeにimage/gifなどの画像データが指定された場合にでも、データ自体がHTMLであるとブラウザが判定すると、HTML文書として表示するブラウザもある。
このため、Content−Typeヘッダで判定を行わずに、その後のHTML構文解析処理の段階で、HTMLか否かを判定しても良い。
【0049】
本実施の形態では、事前に定められたXSSの対策処理を施したが、XSSの対策処理の方法をファイルなどで設定し、その設定情報を読込むことで、脆弱性対策の方法を変更することも可能である。
【0050】
以上、本実施の形態では、
Webアプリケーションで利用するデータについて外部から入力されたデータを記憶し、Webアプリケーションから外部にデータを出力する際に、出力データ中に外部から入力されたデータが含まれている場所を特定し、その場所のデータ構造に応じて、攻撃に対策方法を変更するWebアプリケーション実行装置を説明した。
【0051】
また、本実施の形態では、
HTMLを構文解析し、HTML文中に上記パターンが出力される場所を特定し、出力場所に応じて取り除くべき文字を特定するWebアプリケーション実行装置を説明した。
【0052】
実施の形態2.
以上の実施の形態1では、HTTPリクエストに攻撃データが含まれていた場合に、そのレスポンスに攻撃データが含まれていることを検知するものであるが、次に、HTTPリクエストからの攻撃データが一旦データベースなどに保存され、別のリクエストに対するレスポンスに攻撃データが現れる場合(蓄積型XSS)に脆弱性対策を行うための実施の形態を示す。
【0053】
図12は、この実施の形態に係るWebアプリケーション実行装置100の構成図である。
図2において、Webアプリケーション実行装置100は、実施の形態1の構成要素に加えて、データベース109、DB監視部110、DB監視設定ファイル111、外部データ識別ファイル112が加わっている。
【0054】
データベース109は、Webアプリケーション103が利用するデータベースである。
【0055】
DB監視部110は、Webアプリケーション103がデータベース109へアクセスする際のSQL文を監視し、データベース109への書込みと読込みを判定する。
Webアプリケーション103が、入力記憶部102に記録されている入力データ(埋め込み先候補データ)をデータベース109に書き込んだ場合には、DB監視部110は、Webアプリケーション103が入力データを書き込んだテーブル名/カラム名を外部データ識別ファイル112に記録する。
また、Webアプリケーション103が、外部データ識別ファイル112に記載されているテーブル名/カラム名のデータをデータベース109から読込んだ場合には、DB監視部110は、Webアプリケーション103がデータベース109から読込んだデータを入力記憶部102に追加する。
DB監視部110は、書き込みアクセス監視部及び読み出しアクセス監視部の例である。
なお、書込み/読込みを判別するための設定情報は、DB監視設定ファイル111に記述されている。
【0056】
DB監視設定ファイル111は、DB監視部110がSQL文を監視することで、データベース109への書込みや読込みを判定するための設定情報が記載されたファイルである。
例えば、UPDATE文が発行された場合には、書込みと判断し、SELECT文などが発行された場合には読込みと判定するための設定が含まれている。
【0057】
外部データ識別ファイル112は、Webアプリケーション103がデータベース109へ外部データ(入力記憶部102に記録されている入力データ)を書き込んだとDB監視部110が判定した場合に、外部データを書込んだテーブル名とカラム名を記録するためのファイルである。
外部データ識別ファイル112に記録される、外部データを書込んだテーブル名とカラム名の情報は、書き込み情報の例である。
【0058】
次に図13を使ってデータベース109に外部データが書き込まれる場合の動作を説明する。
【0059】
クライアント装置200からのHTTPリクエストがWebアプリケーション実行装置100に到達すると、実施の形態1のS101〜S104と同様に、入力受信部101でHTTPリクエストを受信し、HTTPリクエストの入力データを抽出して、入力記憶部102に記憶する。
そして、Webアプリケーション103にHTTPリクエストを渡す。
その後、Webアプリケーション実行装置100は、Webアプリケーション103からの応答を待機する(S401〜S404)。
【0060】
その後、Webアプリケーション103がデータベース109にアクセスする(S405)。
DB監視部110は、Webアプリケーション103からデータベース109に送信されるSQL文を分析し、DB監視設定ファイル111の設定内容に従って、データベース109への書込み処理か、読込み処理かを判別する(S406)。
例えば、UPDATE文が発行された場合は書込み、SELECT文が発行された場合は読込みと判定する。
書込み処理と判定した場合にはS407に進み、読込み処理と判定した場合にはS409に進む。
【0061】
書込み処理と判定した場合には、DB監視部110は、文字列比較によりデータベース109へのSQL文に、入力記憶部102に記憶されている入力データと同じものがあるか否か、すなわち、入力データのデータベース109への書き込みが行われているか否かを判断し(S407)、入力データの書き込みが行われている場合には、S408に進み、入力データ以外のデータの書き込みが行われている場合はS412に進む。
【0062】
入力記憶部102に記憶されている入力データがデータベース109に書込まれているとDB監視部110が判定したら、DB監視部110はSQL文から入力データを書込むテーブル名、カラム名及び値を抽出し、抽出したテーブル名、カラム名及び値を書き込み情報として外部データ識別ファイル112に書込む(S408)。
例えば、以下のSQL文の場合、userTableをテーブル名、name1をカラム名と、Tanakaを値と判断する。
UPDATAE usertTable SET name1 = “Tanaka”;
なお、既に同じテーブル名とカラム名が書込み済みである場合には、テーブル名/カラム名は外部データ識別ファイル112に書込む必要がなく、同じテーブル名/カラム名のエントリに値のみを追加する。
また、既に同じテーブル名、カラム名、値が書込み済みである場合には、外部データ識別ファイル112に書込む必要がない。
また、データベースアクセスがエラーとなった場合にも、テーブル名/カラム名の情報を書き込む必要はない。
この処理が完了したらS412に進む。
【0063】
一方、S406において、Webアプリケーション103がデータベース109からデータを読込んでいるとDB監視部110が判定したら、SQL文からデータを読込むテーブル名とカラム名を抽出し、外部データ識別ファイル112にそれらテーブル名/カラム名の記載がないかを調べる(S409)。
例えば、以下のSQL文の場合、テーブル名userTableからカラム名name1を読込んでいる。
SELECT name1 FROM usertTable;
外部データ識別ファイル112に記載があるテーブル名/カラム名からデータを読込んだと判定した場合には、S410に進み、異なるテーブル名/カラム名からデータを読込んだと判定した場合にはS412に進む。
【0064】
Webアプリケーション103が外部データ識別ファイル112に記載があるテーブル名/カラム名からデータを読込んだ場合には、DB監視部110は、外部データ識別ファイル112のテーブル名/カラム名のエントリに記載された値と同じデータが読込みのSQL文のレスポンスに含まれていないかを調べる(S410)。
つまり、Webアプリケーション103により読み出されたデータが外部データ識別ファイル112に記述されている入力データと一致するか否かを判断する。
データがSQL文のレスポンスに含まれている場合にはS411に進み、含まれていない場合にはS412に進む。
【0065】
SQL文のレスポンスに外部データ識別ファイル112に記載の値と同じデータが含まれている場合には、DB監視部110は、Webアプリケーション103が読込んだデータを入力記憶部102に追加する(S411)。
なお、DB監視部110が入力記憶部102に追加したデータの情報は、読み出し情報に相当する。
【0066】
S412では、実施の形態1の図3記載のS105〜S111と同じ処理を行う。
つまり、出力検査部104は、HTTPレスポンス内のHTML文書に対して、入力受信部101がHTTPリクエストから抽出し入力記憶部102に記録した入力データと一致するデータを検索するとともに、DB監視部110が入力記憶部102に記録したデータ(Webアプリケーション103がデータベース109から読み込んだデータ)と一致するデータも検索する。
【0067】
以上のように、本実施の形態では、Webアプリケーションによるデータベースへの書き込みを監視して、データベースへの外部入力データの書き込みを監視することで、攻撃データをHTTPリクエストで送信し、一旦データベース等に蓄積された後に、別のHTTPリクエストでその蓄積された攻撃データを読込んでHTMLに出力することで発生する蓄積型XSSを防ぐことができる。
【0068】
以上、本実施の形態では、
Webアプリケーションで利用するデータが、外部入力のデータであることを記憶し、入力データを利用する各処理の実行時に、処理内容に応じて、適切なサニタイズ処理を動的に選択するWebアプリケーション実行装置を説明した。
【0069】
また、本実施の形態では、
Webアプリケーションに外部入力がDBへの書込まれるDBのテーブル名とカラム名と値を記憶しておき、当該テーブル/カラムから読込まれたデータから書込んだ値と同じ値が含まれている場合には、外部入力データとみなして脆弱性の検査対象に加えるWebアプリケーション実行装置を説明した。
【0070】
なお、実施の形態1及び2に係るWebアプリケーション実行装置100は、Webアプリケーション103を実行するサーバ機能と、HTTPリクエストから入力データを抽出し、HTTPレスポンスに入力データと一致するデータが含まれているかを検査するフィルタ機能の双方を有することになっている。
実施の形態1及び2に示した構成の他に、Webアプリケーション103を実行する装置をサーバ装置とし、フィルタ処理を実行する装置をデータ処理装置として分離し、データ処理装置をクライアント装置200とサーバ装置の間に介在させる構成としてもよい。
この場合は、データ処理装置は、実施の形態1の構成では、例えば、入力受信部101、入力記憶部102、出力検査部104、出力構文解析部105、出力送信部106で構成される。
また、実施の形態2の構成では、例えば、入力受信部101、入力記憶部102、出力検査部104、出力構文解析部105、出力送信部106、DB監視部110、DB監視設定ファイル111、外部データ識別ファイル112で構成される。
【0071】
最後に、実施の形態1及び2に示したWebアプリケーション実行装置100のハードウェア構成例について説明する。
図14は、実施の形態1及び2に示すWebアプリケーション実行装置100のハードウェア資源の一例を示す図である。
なお、図14の構成は、あくまでもWebアプリケーション実行装置100のハードウェア構成の一例を示すものであり、Webアプリケーション実行装置100のハードウェア構成は図14に記載の構成に限らず、他の構成であってもよい。
【0072】
図14において、Webアプリケーション実行装置100は、プログラムを実行するCPU911(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。
CPU911は、バス912を介して、例えば、ROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。
更に、CPU911は、FDD904(Flexible Disk Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSD(Solid State Drive)、光ディスク装置、メモリカード(登録商標)読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
実施の形態1及び2で説明した「入力記憶部102」、「入力データ一致情報記憶部107」は、RAM914、磁気ディスク装置920等により実現される。
また、実施の形態2で説明した「データベース109」は、例えば、磁気ディスク装置920により実現される。
通信ボード915、キーボード902、マウス903、スキャナ装置907、FDD904などは、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
【0073】
通信ボード915は、図1に示すように、ネットワークに接続されている。
通信ボード915は、インターネットの他、例えば、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、SAN(ストレージエリアネットワーク)などに接続されている。
【0074】
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。
プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。
【0075】
また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、RAM914には、CPU911による処理に必要な各種データが格納される。
【0076】
また、ROM913には、BIOS(Basic Input Output System)プログラムが格納され、磁気ディスク装置920にはブートプログラムが格納されている。
Webアプリケーション実行装置100の起動時には、ROM913のBIOSプログラム及び磁気ディスク装置920のブートプログラムが実行され、BIOSプログラム及びブートプログラムによりオペレーティングシステム921が起動される。
【0077】
上記プログラム群923には、実施の形態1及び2の説明において「〜部」(「入力記憶部102」、「入力データ一致情報記憶部107」以外、以下同様)として説明している機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
【0078】
ファイル群924には、実施の形態1及び2の説明において、「〜の判断」、「〜の判定」、「〜の解析」、「〜の比較」、「〜の検索」、「〜の抽出」、「〜の追加」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の監視」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのCPUの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態1及び2で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD等の記録媒体に記録される。
また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0079】
また、実施の形態1及び2の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態1及び2で説明したフローチャートに示すステップ、手順、処理により、本発明に係る「データ処理方法」を実現することができる。
また、「〜部」として説明しているものは、ROM913に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。
プログラムはCPU911により読み出され、CPU911により実行される。
すなわち、プログラムは、実施の形態1及び2の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態1及び2の「〜部」の手順や方法をコンピュータに実行させるものである。
【0080】
このように、実施の形態1及び2に示すWebアプリケーション実行装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【0081】
100 Webアプリケーション実行装置、101 入力受信部、102 入力記憶部、103 Webアプリケーション、104 出力検査部、105 出力構文解析部、106 出力送信部、107 入力データ一致情報記憶部、108 対策設定ファイル、109 データベース、110 DB監視部、111 DB監視設定ファイル、112 外部データ識別ファイル、200 クライアント装置、300 ネットワーク。
【特許請求の範囲】
【請求項1】
クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力部と、
前記リクエスト入力部により入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出部と、
前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力部と、
前記レスポンス入力部により入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出部と、
前記無効化候補データ抽出部により複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結部と、
前記データ連結部により連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化部とを有することを特徴とするデータ処理装置。
【請求項2】
前記データ連結部は、
無効化候補データの間の前後関係が、前記リクエスト内での埋め込み先候補データの配置の順序と一致している2以上の無効化候補データを前記レスポンス内で検索するとともに、
無効化候補データの間の前後関係が、前記リクエスト内での埋め込み先候補データの配置の順序と逆になっている2以上の無効化候補データを前記レスポンス内で検索することを特徴とするデータ処理装置。
【請求項3】
前記レスポンス入力部は、
包含されている複数のデータが複数種類のカテゴリーのうちのいずれかに分類されるレスポンスを入力し、
前記コード無効化部は、
カテゴリーごとに特定種類のコードの無効化方式が定義されている無効化方式情報を管理しており、
前記データ連結部により連結された連結無効化候補データのカテゴリーを判断し、前記無効化方式情報に基づき、前記連結無効化候補データのカテゴリーに対応する無効化方式にて前記連結無効化候補データに含まれている特定種類のコードを無効化することを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記コード無効化部は、
前記連結無効化候補データに特定種類のコードが含まれているか否かを判断するとともに、連結されなかった無効化候補データに特定種類のコードが含まれているか否かを判断し、連結されなかった無効化候補データに特定種類のコードが含まれている場合に、連結されなかった無効化候補データに含まれている特定種類のコードを無効化することを特徴とする請求項1〜3のいずれかに記載のデータ処理装置。
【請求項5】
前記データ処理装置は、更に、
前記サーバ装置による所定のデータベースへのデータ書き込みアクセスを監視し、データ書き込みアクセスを検知した場合に、埋め込み先候補データの書き込みが行われているか否かを判断し、埋め込み先候補データの書き込みが行われている場合に、書き込み対象の埋め込み先候補データ及び埋め込み先候補データの書き込み先を特定する情報を書き込み情報として生成する書き込みアクセス監視部と、
前記サーバ装置による前記データベースへのデータ読み出しアクセスを監視し、データ読み込みアクセスを検知した場合に、読み出されたデータの読み出し元が前記書き込み情報に記述されている書き込み先と一致し、読み出されたデータが前記書き込み情報に記述されている埋め込み先候補データと一致するか否かを判断し、読み出されたデータの読み出し元が前記書き込み情報に記述されている書き込み先と一致し、読み出されたデータが前記書き込み情報に記述されている埋め込み先候補データと一致する場合に、当該埋め込み先候補データが示される情報を読み出し情報として生成する読み出しアクセス監視部とを有し、
前記無効化候補データ抽出部は、
前記リクエスト入力部によりリクエストが入力され、前記埋め込み先候補データ抽出部により埋め込み先候補データが抽出され、前記レスポンス入力部により前記リクエストに対するレスポンスが入力された後に、
前記レスポンス入力部により入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、前記埋め込み先候補データ抽出部により抽出された埋め込み先候補データと値が一致するデータと、前記読み出し情報に示されている埋め込み先候補データと値が一致するデータを無効化候補データとして抽出することを特徴とする請求項1〜4のいずれかに記載のデータ処理装置。
【請求項6】
前記埋め込み先候補データ抽出部は、
前記リクエスト内の複数のデータのうち、スクリプトコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出し、
前記コード無効化部は、
前記データ連結部により連結された連結無効化候補データにスクリプトコードが含まれているか否かを判断し、前記連結無効化候補データにスクリプトコードが含まれている場合に、前記連結無効化候補データに含まれているスクリプトコードを無効化することを特徴とする請求項1〜5のいずれかに記載のデータ処理装置。
【請求項7】
コンピュータが、クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力ステップと、
前記コンピュータが、前記リクエスト入力ステップにより入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出ステップと、
前記コンピュータが、前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力ステップと、
前記コンピュータが、前記レスポンス入力ステップにより入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出ステップと、
前記コンピュータが、前記無効化候補データ抽出ステップにより複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結ステップと、
前記コンピュータが、前記データ連結ステップにより連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化ステップとを有することを特徴とするデータ処理方法。
【請求項8】
クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力ステップと、
前記リクエスト入力ステップにより入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出ステップと、
前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力ステップと、
前記レスポンス入力ステップにより入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出ステップと、
前記無効化候補データ抽出ステップにより複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結ステップと、
前記データ連結ステップにより連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化ステップとをコンピュータに実行させることを特徴とするプログラム。
【請求項1】
クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力部と、
前記リクエスト入力部により入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出部と、
前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力部と、
前記レスポンス入力部により入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出部と、
前記無効化候補データ抽出部により複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結部と、
前記データ連結部により連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化部とを有することを特徴とするデータ処理装置。
【請求項2】
前記データ連結部は、
無効化候補データの間の前後関係が、前記リクエスト内での埋め込み先候補データの配置の順序と一致している2以上の無効化候補データを前記レスポンス内で検索するとともに、
無効化候補データの間の前後関係が、前記リクエスト内での埋め込み先候補データの配置の順序と逆になっている2以上の無効化候補データを前記レスポンス内で検索することを特徴とするデータ処理装置。
【請求項3】
前記レスポンス入力部は、
包含されている複数のデータが複数種類のカテゴリーのうちのいずれかに分類されるレスポンスを入力し、
前記コード無効化部は、
カテゴリーごとに特定種類のコードの無効化方式が定義されている無効化方式情報を管理しており、
前記データ連結部により連結された連結無効化候補データのカテゴリーを判断し、前記無効化方式情報に基づき、前記連結無効化候補データのカテゴリーに対応する無効化方式にて前記連結無効化候補データに含まれている特定種類のコードを無効化することを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記コード無効化部は、
前記連結無効化候補データに特定種類のコードが含まれているか否かを判断するとともに、連結されなかった無効化候補データに特定種類のコードが含まれているか否かを判断し、連結されなかった無効化候補データに特定種類のコードが含まれている場合に、連結されなかった無効化候補データに含まれている特定種類のコードを無効化することを特徴とする請求項1〜3のいずれかに記載のデータ処理装置。
【請求項5】
前記データ処理装置は、更に、
前記サーバ装置による所定のデータベースへのデータ書き込みアクセスを監視し、データ書き込みアクセスを検知した場合に、埋め込み先候補データの書き込みが行われているか否かを判断し、埋め込み先候補データの書き込みが行われている場合に、書き込み対象の埋め込み先候補データ及び埋め込み先候補データの書き込み先を特定する情報を書き込み情報として生成する書き込みアクセス監視部と、
前記サーバ装置による前記データベースへのデータ読み出しアクセスを監視し、データ読み込みアクセスを検知した場合に、読み出されたデータの読み出し元が前記書き込み情報に記述されている書き込み先と一致し、読み出されたデータが前記書き込み情報に記述されている埋め込み先候補データと一致するか否かを判断し、読み出されたデータの読み出し元が前記書き込み情報に記述されている書き込み先と一致し、読み出されたデータが前記書き込み情報に記述されている埋め込み先候補データと一致する場合に、当該埋め込み先候補データが示される情報を読み出し情報として生成する読み出しアクセス監視部とを有し、
前記無効化候補データ抽出部は、
前記リクエスト入力部によりリクエストが入力され、前記埋め込み先候補データ抽出部により埋め込み先候補データが抽出され、前記レスポンス入力部により前記リクエストに対するレスポンスが入力された後に、
前記レスポンス入力部により入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、前記埋め込み先候補データ抽出部により抽出された埋め込み先候補データと値が一致するデータと、前記読み出し情報に示されている埋め込み先候補データと値が一致するデータを無効化候補データとして抽出することを特徴とする請求項1〜4のいずれかに記載のデータ処理装置。
【請求項6】
前記埋め込み先候補データ抽出部は、
前記リクエスト内の複数のデータのうち、スクリプトコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出し、
前記コード無効化部は、
前記データ連結部により連結された連結無効化候補データにスクリプトコードが含まれているか否かを判断し、前記連結無効化候補データにスクリプトコードが含まれている場合に、前記連結無効化候補データに含まれているスクリプトコードを無効化することを特徴とする請求項1〜5のいずれかに記載のデータ処理装置。
【請求項7】
コンピュータが、クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力ステップと、
前記コンピュータが、前記リクエスト入力ステップにより入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出ステップと、
前記コンピュータが、前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力ステップと、
前記コンピュータが、前記レスポンス入力ステップにより入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出ステップと、
前記コンピュータが、前記無効化候補データ抽出ステップにより複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結ステップと、
前記コンピュータが、前記データ連結ステップにより連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化ステップとを有することを特徴とするデータ処理方法。
【請求項8】
クライアント装置からサーバ装置に対して送信された、複数のデータが包含されているリクエストを入力するリクエスト入力ステップと、
前記リクエスト入力ステップにより入力されたリクエストを解析し、前記リクエスト内の複数のデータのうち、特定種類のコードが埋め込まれている可能性のあるデータを埋め込み先候補データとして抽出する埋め込み先候補データ抽出ステップと、
前記リクエストに対する応答として生成された、複数のデータが包含されているレスポンスを入力するレスポンス入力ステップと、
前記レスポンス入力ステップにより入力されたレスポンスを解析し、前記レスポンス内の複数のデータのうち、埋め込み先候補データと値が一致するデータを無効化候補データとして抽出する無効化候補データ抽出ステップと、
前記無効化候補データ抽出ステップにより複数の無効化候補データが抽出された場合に、前記レスポンス内で連続した位置に配置されている2以上の無効化候補データを検索し、検索の結果抽出された2以上の無効化候補データを連結するデータ連結ステップと、
前記データ連結ステップにより連結された連結無効化候補データに前記特定種類のコードが含まれているか否かを判断し、前記連結無効化候補データに前記特定種類のコードが含まれている場合に、前記連結無効化候補データに含まれている前記特定種類のコードを無効化するコード無効化ステップとをコンピュータに実行させることを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2012−174138(P2012−174138A)
【公開日】平成24年9月10日(2012.9.10)
【国際特許分類】
【出願番号】特願2011−37531(P2011−37531)
【出願日】平成23年2月23日(2011.2.23)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
【公開日】平成24年9月10日(2012.9.10)
【国際特許分類】
【出願日】平成23年2月23日(2011.2.23)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
[ Back to top ]