XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
Advertisements

区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
JavaScript プログラミング入門 2006/11/10 神津.
ラベル付き区間グラフを列挙するBDDとその応用
シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法
プログラミング言語としてのR 情報知能学科 白井 英俊.
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラムの動作を理解するための技術として
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
静的情報と動的情報を用いた プログラムスライス計算法
プログラム依存グラフを利用した 情報漏洩解析手法の提案と実現
第4回JavaScriptゼミ セクション2-8 発表者 直江 宗紀.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
FlexとBison+アルファ -実習編-
暗黙的に型付けされる構造体の Java言語への導入
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
セキュリティ解析アルゴリズムの実現と オブジェクト指向言語への適用に関する一考察
コンパイラ 2011年10月20日
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
統計ソフトウエアRの基礎.
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
ソースコードの木構造を考慮した 差分計算を用いる 版管理システムの提案
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
統合開発環境のための プログラミング言語拡張 フレームワーク
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム 早瀬康裕†, 鷲尾 和則‡, 松下 誠†, 井上 克郎† † 大阪大学大学院情報科学研究科 ‡ 大阪大学大学院基礎工学研究科

背景 HTML文書へのスクリプト埋め込み 既存のHTML構文検証ツールはスクリプトの内容を無視 HTML文書の普及 DTD(文書型定義)にタグ付け規則が定義されている HTML文書へのスクリプト埋め込み スクリプトは任意の HTML 文書の断片を出力することが可能 既存のHTML構文検証ツールはスクリプトの内容を無視

スクリプトによる HTML 生成の例 変数が取りうる値を知る必要 既存のシステムでは script 要素を無視するため、 違反を検出できない <span> <script type="JavaScript"> <![CDATA[ var day = new Date(); var message; if(day.getHour() < 12){ message = "good morning"; } else { "<div>good afternoon</div>"; } document.write(message); ]]> </script> </span> 午前のとき <span> good morning </span> 午後のとき <span> <div>good afternoon</div> </span> DTD違反 変数が取りうる値を知る必要 既存のシステムでは script 要素を無視するため、 違反を検出できない

DTD 検証ツール ECMAX スクリプトの出力を考慮した DTD 検証ツールECMAX † 手順 XHTML 1.0 ECMAScript (ECMA-262) にいくつかの制限を加えたもの (関数やオブジェクトに非対応) 手順 XHTML を解析し、スクリプトを抽出 出力文を探し、出力文の引数が取りうる値を計算 2. の結果と、出力文の属する制御構造 (条件文や繰り返し文) から、出力されうる文字列を計算 3. の結果を、静的な部分と合わせて DTD 検証 引数に変数が含まれていた場合には、 変数が取り得る値を知る必要がある † 鷲尾和則, 松下誠, 井上克郎, “JavaScriptを含んだHTML文書に対するデータフロー解析を 用いた構文検証手法の提案”, 信学技報, SS2002-22, pp. 13-18, 2002

フローグラフ ECMAScript プログラムから、フローグラフを作成 頂点: 文または式 有向辺: 制御が移り得ることを示す 1 m=“abc” m=“abc”; if (x) { m=x; } document.writeln(m); 2 x 3 m=x 4 document.writeln(m)

候補集合 変数が特定の文の実行直後に取り得る値を候補、候補全体の集合を候補集合と呼ぶ 候補とは以下のいずれか 定数 “abc”, 123, true, undefined, null 等 不定値 型の分かっているもの String, Numeric, Boolean 型の分からないもの 未計算の式 式には、候補集合を含む場合がある 候補集合は、変数名と頂点番号の組で識別する  例:頂点 5 を実行した直後の x の値 ⇒ x5

候補集合の計算 対象頂点を起点として、フローグラフの辺を逆向きにたどり、対象変数への代入文を含む頂点を探す 見つかった頂点それぞれに対して 値を調べたい頂点・変数を、対象頂点・対象変数と呼ぶ 対象頂点を起点として、フローグラフの辺を逆向きにたどり、対象変数への代入文を含む頂点を探す 見つかった頂点それぞれに対して 代入文の右辺に変数を含まないなら、右辺の値を候補集合に追加する 代入文の右辺に変数が含まれる場合 その変数の候補集合を計算中でないなら、候補集合を再帰的に計算し、代入した結果を候補集合に追加 変数の候補集合を計算中の場合は、変数を候補集合の記号で置き換えた、未計算の式を候補集合に追加 m=“abc” m=x x document.writeln(m) 1 2 3 4 m=“abc” m=x

候補集合の計算 対象頂点を起点として、フローグラフの辺を逆向きにたどり、対象変数への代入文を含む頂点を探す 見つかった頂点それぞれに対して a=“abc” a=x x document.writeln(m) 1 2 3 4 m=“abc” m=x m=“abc” 値を調べたい頂点・変数を、対象頂点・対象変数と呼ぶ 対象頂点を起点として、フローグラフの辺を逆向きにたどり、対象変数への代入文を含む頂点を探す 見つかった頂点それぞれに対して 代入文の右辺に変数を含まないなら、右辺の値を候補集合に追加する 代入文の右辺に変数が含まれる場合 その変数の候補集合を計算中でないなら、候補集合を再帰的に計算し、代入した結果を候補集合に追加 変数の候補集合を計算中の場合は、変数を候補集合の記号で置き換えた、未計算の式を候補集合に追加 m=x

候補集合を計算中の場合の処理 変数の計算中の場合は、変数を候補集合の記号で置き換えた未計算の式を候補集合に追加 未計算の式を除去 i1 i3 候補集合自身を含まない候補を代入 新たな候補が得られたら、不定値とする i=0 i=i+1 document.writeln(i) 1 2 3 i1 i3 1, 不定数値 i1 i3 1, i3 + 1 i1 i1 i3 1, … i3+1 の i3 に、 1 を代入 ↓ 2

システムの実装と実験 変数値候補計算アルゴリズムを、XHTML 検証システム ECMAX に実装し、 既存のシステムと比較実験を行った 開発および実行環境 J2SDK 1.3.1, JavaCC 2.1 OS: FreeBSD 4.7 CPU: Pentium4 2GHz RAM: 2GB システムの規模 9,000 行 (うち、値候補計算部は 3,000 行) 比較対象 Another HTML-lint ver2.49 データ JavaScript を含むHTML 文書: 232 個 出展: THE JAVASCRIPT SOURCE http://javascript.internet.com

実験結果 ツール ECMAX htmllint DTD XHTML1- Strict Transitional XHTML構文違反 10 スクリプト構文違反 48 -- スクリプト内XHTML構文違反 43 (14) スクリプト内タグを含めた タグ付け違反 18 (14) DTD違反 113 (35) 65 (12) 153 8 違反なし 0 (0) 48 (23) 69 214 合計 232 (63) 232 ()内は、スクリプトの出力に不定値が含まれていた数

実験結果 htmllint は、スクリプトの中身を考慮しないため、違反なしが多くなっている ツール ECMAX htmllint DTD XHTML1- Strict Transitional XHTML構文違反 10 スクリプト構文違反 48 -- スクリプト内XHTML構文違反 43 (14) スクリプト内タグを含めた タグ付け違反 18 (14) DTD違反 113 (35) 65 (12) 153 8 違反なし 0 (0) 48 (23) 69 214 合計 232 (63) 232 htmllint は、スクリプトの中身を考慮しないため、違反なしが多くなっている ECMAX では、スクリプト内での違反も発見できた ()内は、スクリプトの出力に不定値が含まれていた数

実験結果 出力に不定値が含まれた場合、その中にはタグは無いと仮定している ⇒ 検証結果は確実ではない htmllint ECMAX ツール 48 (23) 65 (12) XHTML1- Transitional 232 (63) 0 (0) 113 (35) 18 (14) 43 (14) 48 10 Strict DTD 232 合計 214 69 違反なし -- スクリプト内タグを含めた タグ付け違反 スクリプト構文違反 8 153 DTD違反 スクリプト内XHTML構文違反 XHTML構文違反 ()内は、スクリプトの出力に不定値が含まれていた数 出力に不定値が含まれた場合、その中にはタグは無いと仮定している   ⇒ 検証結果は確実ではない

実験結果の考察 スクリプトを考慮することで、既存のシステムが見逃していた違反を発見できた 約1/3のデータで、出力に不定値が含まれていた 正しい XHTML 文書作成を補助できる 約1/3のデータで、出力に不定値が含まれていた 不定値を含む検証は、確実ではない 不定値を減らすため、計算精度の向上が必要

まとめと今後の課題 まとめ 今後の課題 ECMAScript プログラムで、変数が取りうる値を計算する手法について説明 XHTML 構文検証ツール ECMAX に実装 既存のツールと比較実験 今後の課題 計算精度の向上 条件式の値を考慮 値の範囲を特定 ECMAScript に加えた制限を緩和 関数への対応 オブジェクトへの対応

不定値を含む演算 不定値を含む演算は、不定値を返す 型の情報はできる限り残す 例: 不定数値 + 1 ⇒ 不定数値 不定値 == 不定値 ⇒ 不定真偽値 不定文字列 + 1 ⇒ 連結文字列(不定文字列, 1)