(57)【特許請求の範囲】
【請求項１】
ウェブアプリケーションのユーザによるデータ入力のための少なくとも１つのフィールドを含むインターラクティブフォームを有する前記ウェブアプリケーションの特定のページをアクセスする工程であって、前記ウェブアプリケーションにより描画された前記インターラクティブフォームは、前記インターラクティブフォームのためのコードに基づいている、工程と；
前記コードから、入力検証コードを抽出する工程であって、前記入力検証コードは、前記少なくとも１つのフィールドに入力されたデータに対する少なくとも１つの制約を含む、工程と；
前記入力検証コードの分析に基づいて、前記少なくとも１つの制約を抽出する工程と；
前記少なくとも１つのフィールドに対する前記少なくとも１つの制約に少なくとも基づいて、前記少なくとも１つのフィールドのために、文字列の値を見いだす工程であって、前記文字列の値は、前記少なくとも１つの制約を満たすか又は満たさない、工程と；
前記少なくとも１つのフィールドに、前記文字列の値を、自動的に入力する工程と；
前記少なくとも１つのフィールドに入力された前記文字列の値を含む前記インターラクティブフォームを、自動的に送信する工程と；
を有する方法。
【請求項２】
前記入力検証コードは、クライアント側の検証コードを含む、
請求項１記載の方法。
【請求項３】
前記インターラクティブフォームのための前記コードは、ＪａｖａＳｃｒｉｐｔコードを含む、
請求項１記載の方法。
【請求項４】
前記少なくとも１つの制約を抽出する工程は：
前記インターラクティブフォームのための前記コードを、フォームデータの送信に関連するステートメントを求めてサーチする工程と；
前記少なくとも１つの制約を収集するために、前記ステートメントから逆方向に前記コードを移動する工程と；
を有する請求項１記載の方法。
【請求項５】
前記少なくとも１つの制約を抽出する工程は、最も弱い前提条件を適用する前記入力検証コードの記号解析に基づいている、請求項１記載の方法。
【請求項６】
前記見いだす工程は、シンボリックストリングソルバを用いて、前記文字列の値を見いだす工程を含む、
請求項１記載の方法。
【請求項７】
前記少なくとも１つの制約は、前記シンボリックストリングソルバのオートマトンとして利用される、請求項６記載の方法。
【請求項８】
前記少なくとも１つの制約に対する第１のオートマトンを構成する工程と；
前記少なくとも１つの制約の意図に基づいて、第２のオートマトンを構成する工程と；
前記少なくとも１つの制約が前記意図をインプリメントしているか否かを確認するために、前記第１のオートマトンと、前記第２のオートマトンとを比較する工程と；
を更に有する、請求項１記載の方法。
【請求項９】
前記文字列の値を見いだす工程は、１つ以上の制約の少なくとも１つの制約に不適合となるように、前記文字列の値を生成する工程を含み、
当該方法は、サーバが前記１つ以上の制約をインプリメントしているか否かを確認するために、前記文字列の値を前記サーバに通信する工程、を更に有する、請求項１記載の方法。
【請求項１０】
パラメータ化されたアタックベクトルを提供する工程であって、前記パラメータ化されたアタックベクトルは、アタックをシミュレートするパラメータ化された文字列を含み、かつ、前記文字列の値を見いだす工程は、文字列の値が１つ以上の制約を満足し、かつ、前記パラメータ化された文字列の条件を満足するよう、文字列の値を生成する工程を含む、パラメータ化されたアタックベクトルを提供する工程と；
前記文字列の値の送信が前記ウェブアプリケーションによって許されているか否かを確認する工程と；
を更に有する、請求項１記載の方法。
【請求項１１】
ウェブアプリケーションのユーザによるデータ入力のための少なくとも１つのフィールドを含むインターラクティブフォームを有する前記ウェブアプリケーションの特定のページをアクセスする工程であって、前記ウェブアプリケーションにより描画された前記インターラクティブフォームは、前記インターラクティブフォームのためのコードに基づいている、工程と；
前記コードから、入力検証コードを抽出する工程であって、前記入力検証コードは、前記少なくとも１つのフィールドに入力されたデータに対する少なくとも１つの制約を含む、工程と；
前記入力検証コードの分析に基づいて、前記少なくとも１つの制約を抽出する工程と；
前記少なくとも１つのフィールドに対する前記少なくとも１つの制約に少なくとも基づいて、前記少なくとも１つのフィールドのために、文字列の値を見いだす工程であって、前記文字列の値は、前記少なくとも１つの制約を満たすか又は満たさない、工程と；
前記少なくとも１つのフィールドに、前記文字列の値を、自動的に入力する工程と；
前記少なくとも１つのフィールドに入力された前記文字列の値を含む前記インターラクティブフォームを、自動的に送信する工程と；
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ウェブアプリケーションを検証することに関する。
【背景技術】
【０００２】
高度な要求を伴うコンピュータベースのアプリケーション、そして特に、ワールドワイドウェブに関連する利用のために設計されたウェブアプリケーションにおいては、品質を担保する手続の重要性がますます高まってきている。アプリケーション、及び特にウェブアプリケーションは、テストを行うのに困難を伴う。なぜなら、アプリケーションのインターフェースによって許される、可能な全てのユーザ入力が、非常に膨大だからである。以前から知られているウェブアプリケーションの検証方法は、例えば、スクリーン、ボタン、リンク、及びフォームフィールドなどのアーティファクト（ａｒｔｉｆａｃｔ）の基となるアプリケーションを直接的に参照することにより、ウェブアプリケーションのアーティファクトのチェックを指示する。これは、一般に、そのウェブアプリケーションの背景のインプリメンテーションについてのある程度の知識を必要とする。これに対して、システムレベル（エンド・ツー・エンド）のウェブアプリケーションテストエンジニアであって、ウェブアプリケーションの基となるインプリメンテーションの知識のないエンジニアは、典型的には、マニュアル操作で、ウェブアプリケーションのユースケーステストシナリオを行うこととなる。一つ一つ、導入されたウェブアプリケーションに表示されたアーティファクトを目で見ながら、そして、このアーティファクトを用いてイベントを実行させる。例としては、アーティファクトによるイベントの実行は、クリックが含まれ得る。例えば、マウス又は他のデバイスを用いて、ボタン及びリンクをオンすること、あるいは、ユーザインターフェースに表示されたフォームにデータを入力することである。このようなウェブブラウザは、ウェブアプリケーションに描画されたインスタンスを表示する。最近の進歩は、マニュアル操作での（ボタン、リンク、及びフォームを含む）テストの必要性を克服するものである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、ウェブアプリケーションのフォームに関するアプリケーションの自動的なテストの課題は、複雑さが増加しているということである。これは、ウェブアプリケーションには、複雑な入力検証コードが存在し、入力されたデータをチェックし、それが特定の制約に適合しているかを確認するという事実があるからである。従来の自動的なテストは、このような制約を考慮しておらず、そのため、テストの範囲は限られたものとなる。ユーザーネームの制約の例を挙げれば、ユーザーネームは、６から１５文字の長さであり、英数字以外の文字を含んではならず、少なくとも１つの大文字、及び少なくとも１つの数字がなければならないというものである。
【課題を解決するための手段】
【０００４】
本方法の一観点によれば、ウェブアプリケーションのユーザによるデータ入力のための少なくとも１つのフィールドを含むインターラクティブフォームを有する前記ウェブアプリケーションの特定のページをアクセスする工程であって、前記ウェブアプリケーションにより描画された前記インターラクティブフォームは、前記インターラクティブフォームのためのコードに基づいている、工程と；前記コードから、入力検証コードを抽出する工程であって、前記入力検証コードは、前記少なくとも１つのフィールドに入力されたデータに対する少なくとも１つの制約を含む、工程と；前記入力検証コードの分析に基づいて、前記少なくとも１つの制約を抽出する工程と；前記少なくとも１つのフィールドに対する前記少なくとも１つの制約に少なくとも基づいて、前記少なくとも１つのフィールドのために、文字列の値を見いだす工程と；前記少なくとも１つのフィールドに、前記文字列の値を、自動的に入力する工程と；前記少なくとも１つのフィールドに入力された前記文字列の値を含む前記インターラクティブフォームを、自動的に送信する工程と；を有する方法が提供される。
【図面の簡単な説明】
【０００５】
【図１】本開示に従った、ウェブアプリケーションを検証するための実施形態のシステムの例示的環境を例示した図である。
【図２】本開示に従った、インターラクティブなフォームの例を含むウェブブラウザ表示を例示した図である。
【図３】本開示に従った、フィールド入力を検証するためのコードセグメントを例示した図である。
【図４】本開示に従った、ウェブアプリケーションを検証するためのシステムを例示した図である。
【図５】本開示に従った、ウェブアプリケーションを検証するための方法のフローチャートを例示した図である。
【図６】図３に示した入力検証コードから抽出されたユーザーネームのための制約を例示する図である。
【図７】本開示に従った、コンピュータシステムを例示した図である。
【発明を実施するための形態】
【０００６】
特定の実施形態は、ウェブアプリケーション、特にＷｅｂ２．０アプリケーションの検証に関連している。Ｗｅｂ２．０アプリケーションは、一般的に動的又はインターラクティブウェブアプリケーションと呼ばれている。このウェブアプリケーションは、サーバとの間で非同期コミュニケーションメカニズムを使用している。これによって、全てのページ及び情報は、リロードしたり毎回通信したりする必要はない。これは、ワールドワイドウェブ又は他の適切なネットワーク環境を介した、インターラクティブな情報共有、インターオペラビリティ、ユーザ中心のデザイン、あるいはコラボレーションを容易にする。ウェブアプリケーション、及び特にウェブ２．０アプリケーションは、しばしば、ブラウザのウィンドウ内に、複数のウィジェット（ｗｉｄｇｅｔｓ）を形成し、利用しており、すなわち、これを特徴としている。ウィジェットは、一般的には、スタンドアロンのアプリケーション又はコードのポータブルチャンクである。これは、例えばハイパーテキストマークアップランゲージ（ＨＴＭＬ）ベースのウェブページのような、構造化された独立に描画され得るドキュメント内にインストールされ、かつ実行され得る。あるいは、これは、サードパーティのサイトにユーザによって埋め込まれ、このユーザが著作権を有する（例えば、ウェブページ、ブログ、又はソーシャルメディアサイトのプロフィールが挙げられる）。ウェブ２．０アプリケーションの例は、ウェブベースのコミュニティ、ホステッドサービス、ソーシャルネットワークサイト、ビデオシェアリングサイト、又はＷｉｋｉ等と協働して動作してもよい。
【０００７】
特定の実施形態は、ウェブアプリケーションのフォームフィールドのための入力検証コードの自動的な抽出、静的解析技術を利用した入力検証コードの解析、フィールド変数が満足すべき制約の抽出、制約を満足する各フィールドの値を見いだすシンボリックストリングソルバ（ｓｙｍｂｏｌｉｃ  ｓｔｒｉｎｇ  ｓｏｌｖｅｒ）の利用、及び、入力制約を満足する文字列をフィールドに入力することに関連する。
【実施例】
【０００８】
図１は、検証システム１０２の実施形態の環境１００の例を示している。検証システム１０２は、１つ以上のハードウエアコンポーネント、１つ以上のソフトウエアコンポーネント、又はハードウエア及びソフトウエアコンポーネントの組合せを含んでいる。検証システム１０２は、１つ以上のコンピュータシステム内で実行される。コンピュータシステムについては、図７を用いて詳述する。検証システム１０２は、ウェブアプリケーション１０４にアクセするよう構成されている。特定の実施形態においては、ウェブアプリケーション１０４は、少なくともその一部が、検証システム１０２のコンピュータシステムに配置されている。別の実施形態においては、ウェブアプリケーション１０４は、１つ以上の異なるコンピュータシステムに配置されてもよい。これらのコンピュータシステムは、検証システム１０２をホスティングするコンピュータシステムに直接、又は、間接的に接続されている。ウェブアプリケーション１０４は、その少なくとも一部が、１つ以上のサードパーティのサーバ又はコンピュータシステムによってホスティングされてもよい。
【０００９】
一般的に、ウェブアプリケーションは、ウェブブラウザ（例えば、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ(登録商標)  ＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ，ＭＯＺＩＬＬＡ  ＦＩＲＥＦＯＸ，ＡＰＰＬＥ  ＳＡＦＡＲＩ，ＧＯＯＧＬＥ  ＣＨＲＯＭＥ，又はＯＰＥＲＡ）、あるいは、その他のクライアントアプリケーションを介して、ネットワーク上でアクセスされ得る。あるいは、ウェブブラウザをサポートする言語によってコーディングされたコンピュータソフトウエアアプリケーション（場合によっては、このアプリケーションを実行させるためにウェブブラウザの助けを借りる）によってアクセスされ得る。ウェブアプリケーションは、広く普及している。この理由は、ウェブブラウザに偏在性（ｕｂｉｑｕｉｔｙ）があること、リモートのコンピューティングディバイスにクライアント（シンクライアント：ｔｈｉｎ  ｃｌｉｅｎｔとしばしば呼ばれる）として導入（ランチ：ｌａｕｎｃｈ）されたウェブブラウザの利便性があること、そして、ウェブアプリケーションをアップデート及び維持するためにリモートクライアントにソフトウエアを配布しインストールする必要がないという付随した能力があることの結果である。ウェブアプリケーションをインプリメントするためには、ウェブアプリケーションは、しばしば、関連するウエッブサイトのバックエンドサーバに提供されている１つ以上のリソースにアクセスすることを必要とする。加えて、ウェブアプリケーションは、しばしば、他のアプリケーションに関連する追加的なリソースにアクセスすることを必要とする。
【００１０】
エンドユーザのマシン（クライアントデバイス）上に配置されたウェブアプリケーションは、エンドユーザのマシンのディスプレイにウェブページを描画させる。ウェブブラウザと共に、あるいはこれと関連して実行されるウェブアプリケーションは、ウェブブラウザに対して、ディスプレイにウェブページを描画させる。ウェブアプリケーションのウェブページは、典型的に、ウェブアプリケーションの他のウェブページへの埋め込まれたリンクを含む。リンクは、これに加えて、このウェブアプリケーション以外の、あるいはこれと関連しないウェブページ及びウェブサイトへのリンクを含む。動的ウェブアプリケーションは、特に、しばしば、複数の埋め込まれたリンクを含む。このリンクは、現在表示しているウェブページに、ハイパーリンク、アイコン、又はその他のクリッカブルな特徴として描画され得る。典型的な動的ウェブアプリケーションは、このウェブアプリケーションをホスティングしているサーバに存在する複数のリソース、あるいは外部のサードパーティのサーバから取り出される複数のリソースを含む。ウェブページ又はウェブページを描画するリソースは、それ自身、複数の埋め込まれたリソースを含んでおり、データレコードを含んでもよい。データレコードとしては、例えば、テキスト情報コンテンツ、又は更に複雑なデジタルエンコードされたマルチメディアコンテンツ、例えばソフトエアプログラム、又は他のオブジェクト、グラフィックス、イメージ、オーディオ信号、ビデオ等が挙げられる。ウェブページを作成する１つの主要なマークアップランゲージとしては、ハイパーテキストマークアップランゲージ（ＨＴＭＬ）が挙げられる。その他、ウェブブラウザをサポートする言語及び技術としては、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、ＸＨＴＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、Ｊａｖａ(登録商標)Ｓｃｒｉｐｔ、ＣＳＳ（Ｃａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔ）、ＪＡＶＡ(登録商標)等がある。例えば、ＨＴＭＬによって、アプリケーション又はウェブページデベロッパは、構造的ドキュメントを作ることができる。これは、テキスト及びリンク、並びにページ内に埋め込まれ得るイメージ、ウェブアプリケーション及び他のオブジェクト（例えば、フォームフィールド）のための構造的セマンティックスを記述することによってなされる。一般的に、ウェブページは、静的構造ドキュメントとしてクライアントに届けられる。しかしながら、ページに埋め込まれたウェブエレメント（例えば、実行可能なＪａｖａＳｃｒｉｐｔコードセグメント）を使用することによって、ページ又は一連のページによってインターラクティブな体験が得られる。クライアントデバイスにおけるユーザセッションにおいて、ウェブブラウザは、ウェブアプリケーション又はウェブページをホスティングするウェブサイトから受信され、又は検索されたページ及び関連するリソース、並びに他のウェブサイトからの潜在的なリソースを解釈し表示する。例えば、ウェブブラウザによって構造化されたドキュメントＨＴＭＬが受信されると、このウェブブラウザは、ＪａｖａＳｃｒｉｐｔコードセグメントを含む、埋め込まれたコールを実行する、その後、サードパーティホスト又はウェブサイトからリソースをコールし、又はリクエストする。
【００１１】
特定の実施形態においては、検証システム１０２は、ウェブアプリケーション１０４を、ネットワークを介してアクセスする。ネットワークとしては、インターネット、エクストラネット、バーチャルプライベートネットワーク（ＶＰＮ）、ローカルエリアネットワーク（ＬＡＮ）、ワイヤレスＬＡＮ（ＷＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、ワールドワイドウェブの一部（インターネット）、又はその他のネットワーク又はこれらの複数のネットワークの組合せが挙げられる。本開示は、いかなる適切なネットワークをも利用できる。これを介して、ウェブアプリケーション１０４は、検証システム１０２と協働して動作する。特定の実施形態においては、検証システム１０２は、ウェブアプリケーション１０４をホスティングしている１つ以上のサーバとセッションを開始する。これは、検証システムが、ウェブアプリケーション１０４のために、これらのホスティングサーバに対して、例えばＨＴＴＰリクエストの形態で、リクエストを送信することによって行われる。特定の実施形態においては、このリクエストを受信すると、ウェブアプリケーション１０４をホスティングしているサーバは、ＨＴＭＬ又は構造的ドキュメントの形で、ウェブアプリケーション１０４の描画可能なインプリメンテーションを生成する。この構造的ドキュメントには、検証システム１０２によってウェブページを描画するための、構造的ドキュメントコード、及び表示されるべきコンテンツばかりでなくあらゆる埋め込まれたリソース又は埋め込まれたコール及びリソースの識別子が含まれる。
【００１２】
しばしば、ウェブブラウザは、インターラクティブなフォームの表示に関連するＪａｖａＳｃｒｉｐｔコードセグメント（又は他の適切なコード）を読み込み、かつ、このコードセグメントに基づき、インターラクティブなフォームフィールドを描画し表示し得る。ウェブブラウザのウィンドウに表示されたこのインターラクティブフォームが、図２に示されている。図２に示すように、ウェブブラウザウィンドウ２００は、静的な文字列２０２、フィールド２０４、及び送信ボタン２０６を含むフォームを表示してもよい。静的な文字列２０２は、ウェブブラウザのユーザに対して、ユーザが、隣接するフィールド２０４に入力すべきデータのタイプを示す。各フィールド２０４は、ユーザインターフェース要素であり、ウェブブラウザのユーザが、（例えば、キーボードを利用して）そのフィールドにデータを入力することを可能とする。データフィールドにデータを入力した後、ユーザは、送信ボタン２０６をクリックし（又は、ユーザによるデータの送信の要求を示す他のアクションを実行し）、そして、ウェブブラウザは、その後、サーバ（例えば、ウェブアプリケーションをホスティングしているサーバ）に対してこのデータを送信する。ある例では、インターラクティブなフォームコードは、クライアント側の検証コードを含んでもよい。このコードはフィールド２０４に入力されたデータの制約を規定する。例えば、制約は、ユーザーネームに関連するフィールドの最小の長さ及び最大の長さの制限、及び／又はこのフィールドに入力できる文字のタイプの制限を規定してもよい。他の例においては、郵便番号に関連するフィールドは、５桁の数字の値に制限してもよい。ユーザネームフィールドに対するクライアント側の検証コードが、図３に示されている。図３のコードの例では、ユーザーネームの長さの制約が、５から１５文字の間、そして、ユーザーネームの文字の制約として、アルファベット（ｌｅｔｔｅｒ）、数字、及びアンダースコア以外を排除する。
【００１３】
特定の実施形態において、検証システム１０２は、ウェブアプリケーション１０４を検証するために使用するユーザレベル検証条件１０６にアクセスする。特定の実施形態においては、ユーザレベル検証条件１０６は、これらのウェブアーティファクトのインプリメンテーションのレベルにおける詳細な制約ではなく、ウェブアプリケーションの様々なウェブアーティファクトに対する自然な言語基準を含む。特定の実施形態では、検証条件１０６は、ウェブアプリケーション１０４のベストケースであってもよい。テストケースは、ウェブアプリケーションの実行の特定のシナリオを含んでもよい。例えば、ユーザによって実行される特定のシーケンスのステップ、あるいは、何が、このシナリオにおいて、ウェブアプリケーションの正しい、又は、正当な動作（ｂｅｈａｖｉｏｒ）であるかの明示的な又は暗黙の規定を含んでもよい。単純に、テストケースは、正しさのチェックと組み合わされたユースケースと捉えてもよい。他の実施形態において、検証条件１０６は、ウェブアプリケーション１０４の予想される動作の、より明確な（ｅｘｐｒｅｓｓｉｖｅ）表現であってもよい。そして、数学的表現形式（ｆｏｒｍａｌｉｓｍ）、例えば時間的論理（ｔｅｍｐｏｒａｌ  ｌｏｇｉｃ）で記述されてもよい。検証結果１０８は、ウェブアプリケーション１０４の１つ以上の検証条件１０６又は他のテスト又はユースケースの検証の結果としての検証システム１０２の出力である。
【００１４】
図４に更に詳細に示すように、検証システム１０２は、ガイダンスエンジン２１０、ウェブアプリケーションクローラ（ｃｒａｗｌｅｒ）２１２、条件ジェネレータ２１６、及び検証ツールキット２２０を含んでもよい。特定の実施形態においては、ガイダンスエンジン２１０の助けを借りて、クローラ２１２は、ウェブアプリケーション１０４をアクセスし、かつクロールし、ナビゲーションモデル２１４を出力する。特定の実施形態においては、条件ジェネレータ２１６は、ユーザレベル検証条件１０６の少なくとも一部に基づいて、インプリメンテーションレベル検証条件２１８を生成する。すなわち、条件ジェネレータ２１６は、入力特性又はテストケースとして、本明細書で説明したように自然言語表記で表された表現を取り入れ、そして、コンピュータすなわち機械読み取り可能な命令（インプリメンテーションレベル検証条件２１８）を生成する。これは、検証ツールキット２２０に入力される。検証ツールキット２２０は、コンピュータ読み取り可能な検証条件２１８を読み取るよう構成されている。特定の実施形態において、検証ツールキット２２０は、インプリメンテーションレベル検証条件２１８と共にナビゲーションモデル２１４を使用して、ウェブアプリケーション１０４を検証し、その後、検証結果１０８を出力するよう構成されている。より詳細には、検証ツールキット２２０は、入力として、ナビゲーションモデル２１４及びインプリメンテーションレベル検証条件２１８を受け入れ、ウェブアプリケーション１０４を検証するために、ナビゲーションモデル２１４に対して検証条件２１８をチェックするよう構成されてもよい。例えば、検証結果１０８は、一つ以上の結果、テーブル、又はグラフを含んでもよい。これは、検証システム１０２のメモリ又はその他の場所に記憶される。そして、これは、各検証条件２１８が満足されているか否か、又は、更に一般的には、１つ以上のナビゲーション又はビジネスロジックの特徴又は条件が満足されているか否かを含む、ウェブアプリケーション１０４の客観的な評価を提供する。加えて、ある実施形態においては、条件ジェネレータ２１６は、本明細書に記載されているようにウェブアーティファクトの自然言語マッピングを入力として受け入れ、本明細書に記載されているように、ウェブアーティファクトのマッピングを用いて、自然言語表現のユースケース又はテストケースを生成し、その後、この生成された表現に基づいて、インプリメンテーションレベル検証条件２１８を生成する。
【００１５】
図５は、検証システム１０２により、自動的に、ウェブアプリケーション１０４のインターラクティブフォームに値を入力する実施形態のモデル５００のフローチャートを示している。方法５００は、一般的に、ウェブアプリケーションクローラ２１２がウェブアプリケーション１０４にアクセスする５０２から開始する。ウェブアプリケーションクローラ２１２は、コード（ＪａｖａＳｃｒｉｐｔ，ＨＴＭＬ等）を読み込むことにより、ウェブアプリケーション１０４にアクセスする。ステップ５０４で、クローラ２１２が、インターラクティブフォームを表示するウェブアプリケーション１０４の特定のページをアクセスすると、クローラ２１２は、そのウェブアプリケーション１０４から入力検証コード（例えば、図３に示したクライアント側の検証コード）を抽出する。
【００１６】
ステップ５０４と並行して又はその後に、方法５００は、ステップ５０６に進む。このステップでは、クローラ２１２は、抽出した入力検証コードを分析し、様々なフォームフィールドの制約を抽出する。クローラ２１２は、逆方向静的分析（“ｂａｃｋｗａｒｄｓ”  ｓｔａｔｉｃ  ａｎａｌｙｓｉｓ）を実行することによって、制約を抽出する。この分析によって、フォームデータの送信（ｓｕｂｍｉｓｓｉｏｎ）（例えば、「ｆｏｒｍ  ｓｕｂｍｉｔ」ステートメント、「ｏｎ−ｃｌｉｃｋ」ステートメント等）に関連するコードのステートメントから分析を開始する。そして、逆方向にコードを移動し、フォームデータを成功裏に転送するために満足すべき、各々の変数のための制約を収集する。入力検証コードは、入力検証コードの制御フローグラフの構成に基づいてもよい。あるいは、または、これに加えて、抽出は、制約を満足する最大のセットの動作（ｂｅｈａｖｉｏｒ）を提供するために、最も弱い前提条件を持つコードの記号解析（ｓｙｍｂｏｌｉｃ  ａｎａｌｙｓｉｓ）に基づいてもよい。図６は、図３に示す入力検証コードから抽出されたユーザーネームのための制約の例を示している。
【００１７】
ステップ５０４及び５０６と並行して又はその後に、方法５００は、ステップ５０８に移る。ここで、クローラ２１２は、抽出された制約を満足する文字列の値を生成する。ある実施形態において、クローラ２１２は、抽出された制約を満足する文字列（ストリング）の値を生成するために、シンボリックストリングソルバを含んでもよい。このような実施形態において、このストリングソルバは、抽出された制約をそのソルバのオートマタ（ａｕｔｏｍａｔａ）として使用する。
【００１８】
ステップ５０４、５０６及び５０８と並行して又はその後に、方法５００は、ステップ５１０に移行する。ここで、クローラ２１２は、自動的にこの生成された文字列の値をウェブアプリケーション１０４のインターラクティブフォームの適切なフィールドに入力し、そして、フォームを送る。
【００１９】
都合よく、上述の方法及びシステムは、ウェブアプリケーションの検証システムに対して自動的にフォームデータを入力できるようにする。従って、適合したフォームデータの入力のための人間の介在の必要性を排除する。加えて、上述の方法及びシステムは、後述するユースケースを含む様々なアプリケーションを含んでいる。なお、これに限定されるものではない。
【００２０】
例えば、フォームデータが送信されるサーバが、クライアント側の検証コードと同じチェックをインプリメントすることを確保するために、上述の方法及びシステムが利用される。このような一貫性の検証は、クライアント側の検証をディスエーブルすることにより（例えば、Ｊａｖａｓｃｒｉｐｔ  又はＪａｖａｓｃｒｉｐｔベースのフォームをディスエーブルすることにより、ハイパーテキスト転送プロトコルリクエストを直接サーバに送るよう構成されたプログラムを利用することなどによって）実行される。そして、入力検証条件をパスするかあるいは入力条件を満たさない（violate）データをサーバに送る。クローラ２１２のこのストリングソルバは、１つ以上の制約を無視することにより検証制約を満たさないデータを提供してもよい（例えば、制約が文字の長さを５から１５文字であると要求する場合、このストリングソルバは、この制約を破る（制約に不適合の）データを提供するために、５文字よりも少ない文字列、及び／又は、１５文字を超える文字列を生成してもよい）。
【００２１】
他の実施形態として、上述の方法及びシステムは、サーバに対するアタックのシミュレートに利用されてもよい。例を示すと、アタックベクトルがストリングソルバの制約として指定され、これによって、ストリングソルバは、アタックをシミュレートするフォームフィールドに自動的に入力される文字列を生成する。このようなアタックベクトルは、静的文字列（例えば、“ｓｃｒｉｐｔ＞ａｌｅｒｔ（）＜／ｓｃｒｉｐｔ＞”）又はパラメータ化された、以下の文字列である。例えば：
“<script>”+“alert(”+*+“)”+“</script>”
このような、パラメータ化されたアタックは、可変長のアタックベクトルであり、他の点では、フィールドの他の制約を満たす（例えば、文字列長、許された文字、等）。したがって、アタックベクトルは、他のフィールド入力制約によって却下されるようなアタックをランダムに試みるのではなく、アタックがクライアント側のウェブアプリケーションによって受け入れられ得るフィールドにターゲットを当てたものであり、例えば、ユーザネームフィールドの制約は、いずれのアタックも許すことはないであろう。したがって、このようなフィールドは、ランダムにアタックを試みる意味はないであろう。他の利点としては、アタックが構成されるべきサーチスペースが狭まることである。
【００２２】
更に他の実施形態としては、上述の方法及びシステムは、入力検証コードの意図（ｉｎｔｅｎｔ）がインプリメントされているか否かをチェックするために用いられてもよい。実例を示すと、入力検証コードのための意図の指定がある場合、検証システム１０２は、入力検証コードが実際に意図した目的（ｏｂｊｅｃｔ）を達成したかが確認されてもよい。特定の例として、入力検証コードが、ＵＲＬ（ｕｎｉｆｏｒｍ  ｒｅｓｏｕｒｃｅ  ｌｏｃａｔｏｒ）内に「ｃｈａｔ．ｃｏｍ」のみを許容すると仮定する。更に、インプリメントされている場合、この入力検証コードが、ＵＲＬ内の「ｃｈａｔ」の文字をチェックするのみである場合を仮定する。すなわち、「ｅｖｉｌｃｈａｔ」は制約をパスし、かつサーバと通信することを許されると仮定する。このような、入力検証コードから抽出された変数のための制約オートマトンを構成し、意図した特徴（ｐｒｏｐｅｒｔｙ）のためのオートマトンを構成し、かつ、これらのオートマタが同じであるかを比較することによって、インプリメンテーションと意図との間の不整合が検知され得る。このオートマタが同じであれば、その検証コードは意図した目的を達成しているということになる。
【００２３】
図７は、コンピュータシステム６００の例を示している。特定の実施例において、１つ以上のコンピュータシステム６００が、本明細書に記載され又は示された１つ以上の方法の１つ以上のステップを実行する。特定の実施形態において、１つ以上のコンピュータシステム６００が、本明細書に記載され又は示された機能を提供する。特定の実施形態において、１つ以上のコンピュータシステム６００上で動作するソフトウエアは、本明細書に記載され又は示された１つ以上の方法の１つ以上のステップを実行し、あるいは、本明細書に記載され又は示された機能を提供する。特定の実施形態は、１つ以上のコンピュータシステム６００の１つ以上の部分を含む。
【００２４】
本明細書の開示は、いかなる適切な数のコンピュータシステム６００をも含み得るよう意図されている。この開示は、いかなる適切な物理的形態をとるコンピュータシステム６００をも意図している。限定ではなく、例示として、コンピュータシステム６００は、組み込み型コンピュータシステム、システム・オン・チップ（ＳＯＣ）、シングルボードコンピュータシステム（ＳＢＣ）（例えば、コンピュータ・オン・モジュール（ＣＯＭ）又はシステム・オン・モジュール（ＳＯＭ））、デスクトップコンピュータシステム、ラップトップ又はノートブックコンピュータシステム、インターラクティブキオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、ＰＤＡ（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）、サーバ、又は、これらの複数のあらゆる組合せであってもよい。適切な場合には、コンピュータシステム６００は、１つ以上のコンピュータシステム６００を含んでもよい。たとえば、一体型の又は分散型のもの、複数のロケーションに分散しているもの、複数のマシンに分散しているもの、又は、１つ以上のネットワーク上の１つ以上のクラウドコンポーネントを含むククライウドに存在しているものが挙げられる。適切な場合には、１つ以上のコンピュータシステム６００は、空間上又は時間上の実質的制限なしに、本明細書に記載され又は示されている１つ以上の方法の１つ以上のステップを実行してもよい。限定ではなく、例示として、１つ以上のコンピュータシステム６００は、リアルタイム又はバッチモードで、本明細書に記載され又は示されている１つ以上の方法の１つ以上のステップを実行してもよい。１つ以上のコンピュータシステム６００は、異なる時刻に又は異なる場所で、適切な場合には、本明細書に記載され又は示されている１つ以上の方法の１つ以上のステップを実行してもよい。
【００２５】
特定の実施形態において、コンピュータシステム６００は、プロセッサ６０２、メモリ６０４、ストレージ６０６、入出力（Ｉ／Ｏ）インターフェース６０８、通信インターフェース６１０、及びバス６１２を含む。本開示は、特定の配置で特定の数のコンポーネントを有する特定のコンピュータシステムを記載しているが、この開示は、適切ないかなる配置でも、適切ないかなる数の適切ないかなるコンポーネントを有する、適切ないかなるコンピュータシステムをも意図している。
【００２６】
特定の実施形態において、プロセッサ６０２は、コンピュータシステムを作り上げるための、命令を実行するハードウエアを含む。限定ではなく、例示として、プロセッサ６０２は、命令を実行するために、内部レジスタ、内部キャッシュ、メモリ６０４、又はストレージ６０６から命令を取り出し（フェッチし）、これらをデコードし実行する。そして、その後、内部レジスタ、内部キャッシュ、メモリ６０４、又はストレージ６０６に１つ以上の結果を書き込む。特定の実施形態において、プロセッサ６０２は、データ、命令、又はアドレスのための、１つ以上の内部キャッシュを含んでもよい。本開示では、プロセッサ６０２は、適切な場合には、適切な数の適切な内部キャッシュを含むことを意図している。限定ではなく、例示として、プロセッサ６０２は、１つ以上の命令キャッシュ、１つ以上のデータキャッシュ、及び１つ以上のＴＬＢ（ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒｓ）を含んでもよい。命令キャッシュ内の命令は、メモリ６０４又はストレージ６０６内の命令のコピーであってもよい。そして、この命令キャッシュは、プロセッサ６０２によるこれらの命令の取り出しをスピードアップし得る。データキャッシュ内のデータは、プロセッサ６０２がこれによって命令を実行するためのメモリ６０４又はストレージ６０６内のデータのコピー、プロセッサ６０２で実行された以前の命令の結果でありプロセッサ６０２で後の命令によりアクセスされるか又はメモリ６０４又はストレージ６０６に書き込むためのもの、又は他の適切なデータであってもよい。このデータキャッシュは、プロセッサ６０２による読み書きのスピードをアップさせ得る。ＴＬＢは、プロセッサ６０２のための仮想アドレス変換をスピードアップさせる。特定の実施形態において、プロセッサ６０２は、データ用、命令用、アドレス用の、１つ以上の内部レジスタを含んでもよい。本開示は、適切な場合において、プロセッサ６０２は、適切ないかなる数の、適切ないかなる内部レジスタを含んでもよい。適切な場合には、プロセッサ６０２は、１つ以上の論理演算ユニット（ＡＬＵ）を含んでもよく、マルチコアプロセッサであってもよく、又は、１つ以上のプロセッサ６０２を含んでもよい。この開示は、特定のプロセッサを記載し、示しているが、この開示は、適切ないかなるプロセッサをも意図している。
【００２７】
特定の実施例において、メモリ６０４は、プロセッサ６０２が実行する命令、又は、プロセッサ６０２が動作を行うデータを記憶するためのメインメモリを含む。限定ではなく、例示として、コンピュータシステム６００は、ストレージ６０６又は他のソース（例えば、他のコンピュータシステム６００）からメモリ６０４に、命令をロードしてもよい。プロセッサ６０２は、その後、メモリ６０４から内部レジスタ又は内部キャッシュに、命令をロードしてもよい。この命令を実行するために、プロセッサ６０２は、命令を、内部レジスタ又は内部キャッシュから取り出し、そしてそれらをデコードしてもよい。命令を実行中又は実行後において、プロセッサ６０２は、１つ以上の結果（これは、中間又は最終結果である）を内部レジスタ又は内部キャッシュに書き込んでもよい。プロセッサ６０２は、これらの結果の１つ以上を、メモリ６０４に記憶する。特定の実施形態において、プロセッサ６０２は、（ストレージ６０６又はその他の場所ではなく）１つ以上の内部レジスタ又は内部キャッシュ内の命令のみ実行し、かつ、（ストレージ６０６又はその他の場所ではなく）１つ以上の内部レジスタ又は内部キャッシュ内のデータのみに作用する。１つ以上のメモリバス（これらの各々は、アドレスバス及びデータバスを含む）は、プロセッサ６０２とメモリ６０４とを接続する。バス６１２は、上述のように１つ以上のメモリバスを含んでもよい。特定の実施形態において、１つ以上のメモリマネジメントユニット（ＭＭＵ）が、プロセッサ６０２とメモリ６０４との間に存在し、そしてプロセッサ６０２によりリクエストされたメモリ６０４へのアクセスを容易にさせる。特定の実施形態において、メモリ６０４は、ランダムアクセスメモリ（ＲＡＭ）を含む。このＲＡＭは、適切な場合には、揮発性メモリであってもよい。また、適切な場合には、このＲＡＭは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）又はスタティックＲＡＭ（ＳＲＡＭ）であってもよい。更に、適切な場合には、このＲＡＭはシングルポート又はマルチポートＲＡＭであってもよい。本開示は、適切ないかなるＲＡＭであってもよい。メモリ６０４は、適切な場合には、１つ以上のメモリ６０４を含んでもよい。本開示は、特定のメモリを記載し、かつ示しているが、本開示はいかなる適切なメモリをも利用することを意図している。
【００２８】
特定の実施形態において、ストレージ６０６は、データ又は命令のためのマスストレージを含む。限定ではなく、例示として、ストレージ６０６は、ＨＤＤ、フロッピー(登録商標)ディスクドライブ、フラッシュメモリ、光ディスク、磁気光ディスク、磁気テープ、又はＵＳＢドライブ、又は、これら複数の組合せを含んでもよい。ストレージ６０６は、適切な場合には、リムーバブル又は、リムーバブルでない（固定）媒体を含んでもよい。ストレージ６０６は、適切な状況に応じて、コンピュータシステム６００の内部又は外部にあってもよい。特定の実施形態において、ストレージ６０６は、不揮発性、ソリッドステートメモリであってもよい。特定の実施形態において、ストレージ６０６は、リードオンリメモリ（ＲＯＭ）を含む。適切な場合には、このＲＯＭは、マスクプログラムされたＲＯＭ、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能型ＰＲＯＭ（ＥＰＲＯＭ）、又はフラッシュメモリ、又はこれら複数の組合せであってもよい。この開示は、マスストレージ６０６が、適切ないかなる物理的形態をとっていてもよい。ストレージ６０６は、プロセッサ６０２とストレージ６０６との間の通信を容易化するために、適切な１つ以上のストレージコントロールユニットを含んでもよい。適切な場合には、ストレージ６０６は、１つ以上のストレージ６０６を含んでもよい。本開示は、特定のストレージを記載し、示したが、この開示は、適切ないかなるストレージを用いることも意図している。
【００２９】
特定の実施形態において、Ｉ／Ｏインターフェース６０８は、ハードウエア、ソフトウエア、又はその両方であり、コンピュータシステム６００と１つ以上のＩ／Ｏデバイスとの間の通信のための１つ以上のインターフェースを提供する。コンピュータシステム６００は、適切な場合には、１つ以上のＩ／Ｏデバイスを含む。１つ以上のこれらのＩ／Ｏデバイスは、人間とコンピュータシステム６００とのコミュニケーションを可能とさせ得る。限定ではなく、例示として、Ｉ／Ｏは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スチルカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、他の適切なＩ／Ｏデバイス、又は、これら複数の組合せを含み得る。Ｉ／Ｏデバイスは、１つ以上のセンサを含んでもよい。この開示は、適切ないかなるＩ／Ｏデバイス、及び、これらに対する適切ないかなるＩ／Ｏインターフェース６０８を用いることをも意図している。適切な場合には、Ｉ／Ｏインターフェース６０８は、１つ以上のデバイス、又は、プロセッサ６０２が１つ以上のこれらのＩ／Ｏデバイスをドライブすることを可能とするソフトウエアドライバを含んでもよい。Ｉ／Ｏインターフェース６０８は、適切な場合には、１つ以上のＩ／Ｏインターフェース６０８を含んでもよい。本開示は、特定のＩ／Ｏインターフェースを記載し、示しているが、本開示は、適切ないかなるＩ／Ｏインターフェースを利用することをも意図している。
【００３０】
特定の実施形態において、通信インターフェース６１０は、ハードウエア、ソフトウエア、又はこれらの両方を含み、コンピュータシステム６００と、１つ以上の他のコンピュータシステム６００又は１つ以上のネットワークとの間の通信（例えば、パケットベースの通信）のための１つ以上のインターフェースを提供する。限定ではなく、例示として、通信インターフェース６１０は、イーサーネット又は他の有線ネットワークによる通信のための、ネットワークインターフェースコントロールユニット（ＮＩＣ）又はネットワークアダプタ、又は、ＷＩ−ＦＩネトワークなどのワイヤレスネットワークによる通信のための、ワイヤレスＮＩＣ（ＷＮＩＣ）又はワイヤレスアダプタを含んでもよい。本開示は、適切ないかなるネットワーク、及びこのための適切ないかなる通信インターフェースをも用いることを意図している。限定ではなく、例示として、コンピュータシステム６００は、アドホックネットワーク、パーソナルエリアネットワーク（ＰＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、又はインターネットの１つ以上の部分、または、これらの複数の組合せと通信する。１つ以上のこれらのネットワークの１つ以上の部分は、有線又は無線であってもよい。例示として、コンピュータシステム６００は、ワイヤレスＰＡＮ（ＷＰＡＮ）（例えば、ブルートゥースＷＰＡＮ）、ＷＩ−ＦＩネットワーク、ＷＩ−ＭＡＸネットワーク、セルラーフォンネットワーク（例えばＧＳＭ（Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）ネットワーク、又は他の適切なワイヤレスネットワーク、又は複数のこれらの組合せと通信する。適切な場合には、コンピュータシステム６００は、いかなるこれらのネットワークに対しても適切な、いかなる通信インターフェース６１０を含んでもよい。通信インターフェース６１０は、適切な場合には、１つ以上の通信インターフェース６１０を含んでもよい。本開示は、特定の通信インターフェースを記載し、示しているが、本開示は、適切ないかなる通信インターフェースをも利用することを意図している。
【００３１】
特定の実施形態において、バス６１２はハードウエア、ソフトウエア、又はこれらの両方を含み、コンピュータシステム６００のコンポーネント相互間を接続する。限定ではなく、例示として、バス６１２は、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）バス、又はその他のグラフィックバス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＦＳＢ（ｆｒｏｎｔ−ｓｉｄｅ  ｂｕｓ）、ハイパートランスポート（ＨＴ）インターコネクト、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、インフィニバンド・インターコネクト、ＬＰＣ（ｌｏｗ−ｐｉｎ−ｃｏｕｎｔ）バス、メモリバス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、ＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｘ）バス、ＳＡＴＡ（ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）バス、ＶＬＢ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ  ｌｏｃａｌ）バス、その他適切なバス、又は複数のこれらの組合せを含んでもよい。バス６１２は、適切な場合には、１つ以上のバス６１２を含んでもよい。本開示は、特定のバスを記載し、示しているが、本開示は、適切ないかなるバス又は内部接続をも利用することを意図している。
【００３２】
本明細書において、コンピュータ可読の記憶媒体は、１つ以上の実体のあるコンピュータ可読の構造を有する記憶媒体を包含する。限定ではなく、例示として、コンピュータ可読の記憶媒体は、半導体ベース又は他の集積回路（ＩＣ）（例えば、ＦＰＧＡ（ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）又はＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ＩＣ））、ハードディスク、ＨＤＤ、ハイブリッドハードドライブ（ＨＨＤ）、光ディスク、光ディスクドライブ（ＯＤＤ）、磁気光ディスク、光磁気ドライブ、フロッピディスク、フロッピーディスクドライブ（ＦＤＤ）、磁気テープ、ホログラフィック記憶媒体、ＳＳＤ（ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ）、ＲＡＭドライブ、セキュアディジタルカード、セキュアディジタルドライブ、又は適切なコンピュータ可読記憶媒体、又は、適切な場合には複数のこれらの組合せを含んでもよい。本明細書において、コンピュータ可読記憶媒体とは、米国特許法第１０１条に基づき特許保護適格性のないあらゆる媒体を除外する。本明細書において、コンピュータ可読記憶媒体は、同１０１条の基での特許保護の適格性がない限りにおいて、過渡的な形態の信号伝送（電気的な伝搬又は電磁気信号そのもの）を除外する。
【００３３】
本開示は、適切ないかなるストレージをもインプリメントする１つ以上のコンピュータ可読記憶媒体を用いることを意図している。特定の実施形態において、コンピュータ可読記憶媒体は、プロセッサ６０２の１つ以上の部分（例えば、１つ以上のレジスタ又はキャッシュ）、メモリ６０４の１つ以上の部分、ストレージ６０６の１つ以上の部分、又は、適切な場合にはこれらの組合せをインプリメントする。特定の実施形態において、コンピュータ可読記憶媒体は、ＲＡＭ又はＲＯＭをインプリメントする。特定の実施形態において、コンピュータ可読記憶媒体は、揮発性又は不揮発性（ｐｅｒｓｉｓｔｅｎｔ）メモリをインプリメントする。特定の実施形態において、１つ以上のコンピュータ可読記憶媒体は、ソフトウエアを包含する。本明細書において、ソフトウエアとは、１つ以上のアプリケーション、バイトコード、１つ以上のコンピュータプログラム、１つ以上の実行可能ファイル、１つ以上の命令、ロジック、マシンコード、１つ以上のスクリプト、又はソースコード、及びこれらの組合せを包含し得る。特定の実施形態において、ソフトウエアは、１つ以上のアプリケーション・プログラミング・インターフェース（ＡＰＩ）を含む。本開示は、適切ないかなる記述されたソフトウエア、又は、適切ないかなるプログラミング言語又はプログラミング言語の組合せによって表現されたソフトウエアをも用いることを意図している。特定の実施形態において、ソフトウエアは、ソースコード又はオブジェクトコードとして表現される。特定の実施形態において、ソフトウエアは、例えば、Ｃ、Ｐｅｒｌ、又はこれらの適切な表現としての、ハイレベルプログラミング言語によって記述される。特定の実施形態においては、アセンブラ言語（又はマシンコード）などのローレベルプログラミング言語によって記述される。特定の実施形態において、ソフトウエアは、ＪＡＶＡによって表現される。特定の実施形態において、ソフトウエアは、ＨＴＭＬ、ＸＭＬ、又は他の適切なマークアップ言語によって、表現される。
【００３４】
本開示は、当業者が理解できる本明細書の実施形態の例に対する、全ての変更、置換、バリエーション、変更、及び修正を包含する。同様に、適切な場合には、添付の請求の範囲は、当業者が理解できる本明細書の実施形態の例に対する、全ての変更、置換、バリエーション、変更、及び修正を包含する。
【００３５】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
ウェブアプリケーションのユーザによるデータ入力のための少なくとも１つのフィールドを含むインターラクティブフォームを有する前記ウェブアプリケーションの特定のページをアクセスする工程であって、前記ウェブアプリケーションにより描画された前記インターラクティブフォームは、前記インターラクティブフォームのためのコードに基づいている、工程と；
前記コードから、入力検証コードを抽出する工程であって、前記入力検証コードは、前記少なくとも１つのフィールドに入力されたデータに対する少なくとも１つの制約を含む、工程と；
前記入力検証コードの分析に基づいて、前記少なくとも１つの制約を抽出する工程と；
前記少なくとも１つのフィールドに対する前記少なくとも１つの制約に少なくとも基づいて、前記少なくとも１つのフィールドのために、文字列の値を見いだす工程と；
前記少なくとも１つのフィールドに、前記文字列の値を、自動的に入力する工程と；
前記少なくとも１つのフィールドに入力された前記文字列の値を含む前記インターラクティブフォームを、自動的に送信する工程と；
を有する方法。
（付記２）
前記入力検証コードは、クライアント側の検証コードを含む、
付記１記載の方法。
（付記３）
前記インターラクティブフォームのための前記コードは、ＪａｖａＳｃｒｉｐｔコードを含む、
付記１記載の方法。
（付記４）
前記少なくとも１つの制約を抽出する工程は：
前記インターラクティブフォームのための前記コードを、フォームデータの送信に関連するステートメントを求めてサーチする工程と；
前記少なくとも１つの制約を収集するために、前記ステートメントから逆方向に前記コードを移動する工程と；
を有する付記１記載の方法。
【００３６】
（付記５）
前記少なくとも１つの制約を抽出する工程は、最も弱い前提条件を適用する前記入力検証コードの記号解析に基づいている、付記１記載の方法。
（付記６）
前記見いだす工程は、シンボリックストリングソルバを用いて、前記文字列の値を見いだす工程を含む、
付記１記載の方法。
（付記７）
前記少なくとも１つの制約は、前記シンボリックストリングソルバのオートマトンとして利用される、付記６記載の方法。
（付記８）
前記少なくとも１つの制約に対する第１のオートマトンを構成する工程と；
前記少なくとも１つの制約の意図に基づいて、第２のオートマトンを構成する工程と；
前記少なくとも１つの制約が前記意図をインプリメントしているか否かを確認するために、前記第１のオートマトンと、前記第２のオートマトンとを比較する工程と；
を更に有する、付記１記載の方法。
（付記９）
前記文字列の値を見いだす工程は、１つ以上の制約の少なくとも１つの制約に不適合となるように、前記文字列の値を生成する工程を含み、
当該方法は、サーバが前記１つ以上の制約をインプリメントしているか否かを確認するために、前記文字列の値を前記サーバに通信する工程、を更に有する、付記１記載の方法。
（付記１０）
パラメータ化されたアタックベクトルを提供する工程であって、前記パラメータ化されたアタックベクトルは、アタックをシミュレートするパラメータ化された文字列を含み、かつ、前記文字列の値を見いだす工程は、文字列の値が１つ以上の制約を満足し、かつ、前記パラメータ化された文字列の条件を満足するよう、文字列の値を生成する工程を含む、パラメータ化されたアタックベクトルを提供する工程と；
前記文字列の値の送信が前記ウェブアプリケーションによって許されているか否かを確認する工程と；
を更に有する、付記１記載の方法。
（付記１１）
ウェブアプリケーションのユーザによるデータ入力のための少なくとも１つのフィールドを含むインターラクティブフォームを有する前記ウェブアプリケーションの特定のページをアクセスする工程であって、前記ウェブアプリケーションにより描画された前記インターラクティブフォームは、前記インターラクティブフォームのためのコードに基づいている、工程と；
前記コードから、入力検証コードを抽出する工程であって、前記入力検証コードは、前記少なくとも１つのフィールドに入力されたデータに対する少なくとも１つの制約を含む、工程と；
前記入力検証コードの分析に基づいて、前記少なくとも１つの制約を抽出する工程と；
前記少なくとも１つのフィールドに対する前記少なくとも１つの制約に少なくとも基づいて、前記少なくとも１つのフィールドのために、文字列の値を見いだす工程と；
前記少なくとも１つのフィールドに、前記文字列の値を、自動的に入力する工程と；
前記少なくとも１つのフィールドに入力された前記文字列の値を含む前記インターラクティブフォームを、自動的に送信する工程と；
をコンピュータに実行させるプログラム。
（付記１２）
前記入力検証コードは、クライアント側の検証コードを含む、
付記１１記載のプログラム。
（付記１３）
前記インターラクティブフォームのための前記コードは、ＪａｖａＳｃｒｉｐｔコードを含む、
付記１１記載のプログラム。
（付記１４）
前記少なくとも１つの制約を抽出する工程は：
前記インターラクティブフォームのための前記コードを、フォームデータの送信に関連するステートメントを求めてサーチする工程と；
前記少なくとも１つの制約を収集するために、前記ステートメントから逆方向に前記コードを移動する工程と；
を有する付記１１記載のプログラム。
【００３７】
（付記１５）
前記少なくとも１つの制約を抽出する工程は、最も弱い前提条件を適用する前記入力検証コードの記号解析に基づいている、付記１１記載のプログラム。
（付記１６）
前記見いだす工程は、シンボリックストリングソルバを用いて、前記文字列の値を見いだす工程を含む、
付記１１記載のプログラム。
（付記１７）
前記少なくとも１つの制約は、前記シンボリックストリングソルバのオートマトンとして利用される、付記１６記載のプログラム。
（付記１８）
前記少なくとも１つの制約に対する第１のオートマトンを構成する工程と；
前記少なくとも１つの制約の意図に基づいて、第２のオートマトンを構成する工程と；
前記少なくとも１つの制約が前記意図をインプリメントしているか否かを確認するために、前記第１のオートマトンと、前記第２のオートマトンとを比較する工程と；
を更にコンピュータに実行させる付記１１記載のプログラム。
（付記１９）
前記文字列の値を見いだす工程は、１つ以上の制約の少なくとも１つの制約に不適合となるように、前記文字列の値を生成する工程を含み、
当該プログラムは、サーバが前記１つ以上の制約をインプリメントしているか否かを確認するために、前記文字列の値を前記サーバに通信する工程、を更にコンピュータに実行させる付記１１記載のプログラム。
（付記２０）
パラメータ化されたアタックベクトルを提供する工程であって、前記パラメータ化されたアタックベクトルは、アタックをシミュレートするパラメータ化された文字列を含み、かつ、前記文字列の値を見いだす工程は、文字列の値が１つ以上の制約を満足し、かつ、前記パラメータ化された文字列の条件を満足するよう、文字列の値を生成する工程を含む、パラメータ化されたアタックベクトルを提供する工程と；
前記文字列の値の送信が前記ウェブアプリケーションによって許されているか否かを確認する工程と；
を更にコンピュータに実行させる付記１１記載のプログラム。
【符号の説明】
【００３８】
６０２  プロセッサ
６０４  メモリ
６０６  ストレージ
６０８  Ｉ／Ｏインターフェース
６１０  通信インターフェース
６１２  バス
【図１】
0005742521.tif 000002
【図２】
0005742521.tif 000003
【図３】
0005742521.tif 000004
【図４】
0005742521.tif 000005
【図５】
0005742521.tif 000006
【図６】
0005742521.tif 000007
【図７】
0005742521.tif 000008