Presentation is loading. Please wait.

Presentation is loading. Please wait.

中島 震,Reda Ahroum, Daniel Balouek (NII)

Similar presentations


Presentation on theme: "中島 震,Reda Ahroum, Daniel Balouek (NII)"— Presentation transcript:

1 中島 震,Reda Ahroum, Daniel Balouek (NII)
Webアプリケーションの特性とAOP 九州工業大学大学院 外村慶二 鵜林 尚靖,成瀬 龍人,塩塚 大 (九工大) 中島 震,Reda Ahroum, Daniel Balouek (NII) 1

2 概要 Webアプリの横断的関心事 Webアプリ開発に特化したAOP機構の開発 サニタイジング,アクセス制御,アクセス解析等 AOWP
ページアクセスとユーザセッションのサポート 2

3 目次 WebアプリケーションとAOP Webアプリ開発に特化したAOP機構の開発 AOWPの適用事例 議論とまとめ AOWP
オープンソースを対象とした記述実験 AOPベースのWebアプリケーション開発 議論とまとめ 3

4 WebアプリケーションとAOP 4

5 Webアプリケーション Webアプリケーションは、サーバ/クライアント型のシステムで、
クライアントがHTTPリクエストを送信し、サーバ側のプログラムが実行され 実行結果をHTML形式で生成してクライアントにHTTPレスポンスとして返します。 5

6 Webアプリの横断的関心事 関心事 影響を与える処理,関係するコンテキスト情報 サニタイジング [Masuhara2003]
データベースアクセス,HTML出力,データフロー アクセス制御 [Lemos2006] ページアクセス,ユーザごとの認証状態 バージョニング ファイルアクセス,データベースアクセス ファイル圧縮 (変換) ファイルアクセス アクセス解析 ページアクセス,ユーザ/アプリケーションごと サービス監視 ページアクセス, ユーザごとのページ遷移履歴 [Tan2002] 構造 [Kojarski2003] Webページの構造,データベースの構造 サニタイジングは、SQLインジェクションや、クロスサイトスクリプティングを防止する為にクライアントからの送信データに対してエスケープ処理をする事です。 サービス監視について、特に[Tan2002] の中では、各ユーザのページ遷移履歴を監視し、その特徴を解析する事で、Webロボットの検出を行っている。 [Kojarski2003] では、Webアプリで取り扱うデータ構造が、データベース、クラス、画面等の構造に横断的に影響を及ぼす事を指摘している。 [Tan2002] Discovery of Web Robot Sessions Based on their Navigational Patterns, Pang Ning Tan and Vipin Kumar, Data Mining and Knowledge Discovery, 2002 [Kojarski2003] Domain driven web development with WebJinn, Sergei Kojarski and David H. Lorenz, OOPSLA, 2003 6

7 WebアプリとAOP言語 AspectJ,AOPHP等 dflow [Masuhara2003] (サニタイジング, データフローのサポート
(サニタイジング等) AspectJ,AOPHP等 (サニタイジング, ファイルアクセス,キャッシング等) 汎用的なAOP言語をWebアプリ開発に適用する場合、サーバサイドのプログラムを対象として、 特定のメソッド呼び出し等に対してアドバイスを実行するアスペクトを記述する。 7

8 本日の話 関心事 影響を与える処理,関係するコンテキスト情報 サニタイジング [Masuhara2003]
データベースアクセス,HTML出力,データフロー アクセス制御 [Lemos2006] ページアクセス,ユーザごとの認証状態 バージョニング ファイルアクセス,データベースアクセス ファイル圧縮 (変換) ファイルアクセス アクセス解析 ページアクセス,ユーザ/アプリケーションごと サービス監視 ページアクセス, ユーザごとのページ遷移履歴 [Tan2002] 構造 [Kojarski2003] Webページの構造,データベースの構造 本研究では、特にページアクセスや、ユーザセッション等の、Webアプリケーションのコンセプトに対して横断的な関心事のモジュール化を対象としている。 8

9 (アクセス制御,アクセス解析,サービス監視等)
本日の話 AOWP ページアクセス, ユーザセッションのサポート (アクセス制御,アクセス解析,サービス監視等) dflow [Masuhara2003] AspectJ,AOPHP等 本研究では、特定のプログラミング言語の実行モデルに基づいたAOP機構ではなく、 ページアクセス、ユーザセッション等の、HTTPプロトコルの実行モデルに基づいたAOP機構であるAOWPを提案する。 9

10 Webアプリ開発に特化したAOP機構の開発
10

11 ページアクセスをプログラム実行に対応付ける必要がある
研究動機 ページアクセスの取扱いの難しさ 例: Webアプリ全体に アクセス制御を追加する 研究動機を説明する為に、Webアプリケーション全体に、汎用的なAOP言語を用いて、ユーザ認証に基づくアクセス制御を追加する事を考える。 汎用的なAOP言語を利用する場合、 アクセス制御を追加する箇所を指定する場合、ページアクセスと対応するサーバサイドのプログラムの実行点をプログラマが見つけ出し、 それを選択するポイントカットを記述しなければならない。 この作業は、対象のWebアプリケーションが大規模にな場合に、容易な事ではない。 ページアクセスをプログラム実行に対応付ける必要がある 11

12 研究動機 ユーザセッションの取扱いの難しさ
例: Webアプリ全体に アクセス制御を追加する 各ユーザごとに、ユーザ認証結果を保存する為に、ユーザセッションを管理するコードをプログラミングする必要がある。 複雑な状態になったとき、この作業は大変となる。 ユーザセッションを取り扱う為のコード記述が必要 12

13 Webアプリの特性に合わせたインスタンス生成機構
AOWP Webアプリの特性に合わせたインスタンス生成機構 前述の問題を解決する為に、 AOWPでは、ページアクセスを取り扱う為のジョインポイントとポイントカット機構と、 Webアプリの特性に会わせたインスタンス生成機構を定義している。 例えば、先ほどのアクセス制御の例の場合、全てのページアクセスを選択するポイントカットを定義し、 アスペクトをユーザごとにインスタンス化し、各インスタンスのメンバ変数として認証結果を保存するようなアスペクトを 容易に記述する事ができる。 リクエスト ジョインポイントと それらを扱う為のポイントカット記述子 13

14 リクエストジョインポイント request ポイントカット AOWP ページアクセスの取扱い Webクライアント Webサーバ before
アドバイス after リクエストジョインポイント サーバサイドのプログラム ページアクセスを表すジョインポイントを、リクエストジョインポイントとして定義した。 requestポイントカット記述子は、リクエストURL等のHTTPリクエストに含まれる情報に基づいて、リクエストジョインポイントを選択する事ができる。 サーバサイドのプログラム around アドバイス request (URL_PAT, FD_PATS, COOKIE_PATS, HEADER_PATS) URL_PAT: 選択するHTTPリクエストに含まれるURLのパターン FD_PATS: フォームデータの内容を指定するパターン COOKIE_PATS: クッキーの内容を指定するパターン HEADER_PATS: HTTPリクエストヘッダの内容 (IPアドレス等) を指定するパターン request ポイントカット 14

15 AOWP アスペクトのインスタンス生成機構
実行時のコンテキストに基づいて 参照できるインスタンスを制限 AOWPでは、ユーザごと、HTTPリクエストの処理ごと、アプリケーション内で1つ、という3種類のアスペクトのインスタンス生成を行う事ができる。 あるユーザに対する処理中に、他のユーザのセッション情報にアクセスするような事があると、 セキュリティ上問題となる可能性がある為、実行時のコンテキストに基づいてアクセスできるインスタンスに制限をかけている。 リクエスト処理ごと,ユーザごと,アプリケーションで1つ, の3種類のインスタンス生成方法 15

16 AOWPの実装 PHPを対象としたプロトタイプ実装
PHPに基づくAOP機構 + Webに特化したAOP機 構 コード変換により織り込みを行う リクエスト ジョインポイントとポイントカットはPHPのプログラム実行と対応付けて織り込み Web固有のアスペクトのインスタンス生成機構を実現するファクトリクラスを作成 AOPフレームワークとして実装 アスペクトをPHPのクラスとして記述 16

17 AOWPの実装 リクエストJP & PCの実装
before around addUser.php <?php include ‘func.php’; $success = addUser( $_POST[‘name’], $_POST[‘password’] ); if (!$success) { exit(); } displayPage(); ?> func.php <?php /** omission **/ ?> after リクエストジョインポイントへの織り込みは、対応するPHPのプログラム実行点に対応付けて織り込みを行っている。 after アドバイスの種類 対応するPHPプログラムの実行点 before HTTPリクエストと対応するPHPスクリプトの呼び出し時 after HTTPリクエストと対応するPHPスクリプトの処理終了時 exit関数の呼び出し前 around HTTPリクエストと対応するPHPスクリプトの処理全体 17

18 AOWPの実装 アスペクトのインスタンス生成機構の実装
Web固有のアスペクトのインスタンス生成機構は、クッキー、インスタンスの永続化、静的クラス変数等を利用して実装している。 クッキー インスタンスの永続化 PHPの静的変数 インスタンスの永続化 インスタンスを管理するファクトリクラスを作成 18

19 アスペクトのインスタンスの取扱い方法を指定
AOWPの実装 アスペクトの記述方法 アスペクトのインスタンスの取扱い方法を指定 00: 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: ... 61: class AuthAspect extends PerSessionAspect { private $_authed = false; public function __construct() { $accChkPC = new RequestPointcut('.*'); $accChkAdv = new BeforeAdvice(); $accChkAdv->setPointcut($accChkPC); $accChkAdv->setAdviceBody('accChk'); $this->addAdvice($accChkAdv); } public function accChk(JoinPoint $jp) { if (!$this->_authed) { jumpToLoginPage(); ... ポイントカットの定義 AOWPのフレームワークでは、アスペクトをPHPのクラスとして記述する。 親クラスで、アスペクトのインスタンス生成の方法を指定する。 ポイントカットとアドバイスは、アスペクトのコンストラクタの中で、フレームワークが提供するクラスのインスタンスとして定義する。 アドバイスの定義 19

20 AOWPの適用事例 (1) オープンソースを対象とした記述実験
20

21 AOWPの適用事例 (1) PukiWikiを対象とした記述実験
ユーザ認証アスペクト (認証結果の保存) アンケートアスペクト (時間の取扱い) モニタアスペクト (Webアプリの利用状況の取扱い) AOWPのWeb固有なAOP機構を使って、現実的なアプリケーションに対して、どのような横断的関心事をモジュール化できるかを確かめる為に、 オープンソースのWikiシステムのPukiWikiを対象として記述実験を行った。 ユーザ認証アスペクトは、PukiWiki全体にユーザ認証に基づくアクセス制御を追加する。 アンケートアスペクトは、PukiWikiにアクセスして1分間経過したユーザに対して、アンケートを表示する。 モニタアスペクトは、PukiWikiのコンテンツ管理を行う為のページアクセスを監視し、一度に大量のページアクセスが発生した時に 一時的にサービスを停止する。 コード行数: 行 ファイル数: 107 個 21

22 AOWPの適用事例 (1) ユーザごとの状態に基づくアスペクト
このアスペクトは、PukiWikiの全てのページアクセスに対してアドバイスが実行される。 また、このアスペクトは、ユーザごとにインスタンス化され、インスタンスのメンバ変数の中で、各ユーザの認証結果を保持し、 その結果に基づいてアクセス制御を行う。 22

23 AOWPの適用事例 (1) ユーザの滞在時間に基づくアスペクト
このアスペクトは、PukiWikiの全てのページアクセスに対してアドバイスが実行される。 また、ユーザごとにインスタンス化され、メンバ変数の中で各ユーザの最初にPukiWikiにアクセスした時間を保持し、 滞在時間を計算する事でアドバイスを実行を制御している。 23

24 AOWPの適用事例 (1) Webサーバの利用状態に基づくアスペクト
このアスペクトは、PukiWikiのコンテンツ管理の為のページアクセスに対してアドバイスを実行する。 PukiWikiシステム全体で、1つのインスタンスが生成され、全体としてコンテンツ管理の為のページアクセスが多くなった時に アドバイスを実行する。 24

25 AOWPの適用事例 (2) AOPベースのWebアプリケーション開発
25

26 AOWPの適用事例 (2) 写真管理システムの開発
Webアプリを一から開発 する際にAOWPをどのよ うに利用できるか? RedaさんとDanielさんが 約1ヶ月間開発 写真の閲覧 / 登録 / 変更 ができるシステム Webアプリケーションを一から開発する場合に、Web固有なAOP機構をどのように利用できるかを確かめる為に、 写真を管理する為のWebアプリケーションの開発を行った。 26

27 AOWPの適用事例 (2) ベース機能とアスペクト
システム全体を、ベース機能と、非機能に分け、ベース機能を先に開発後、非機能をアスペクトとして段階的に実装するという開発方法をとった。 画面のデザインとデータの保存機能のみを ベース機能として開発 アクセス制御等の非機能要求を アスペクトとして追加開発 27

28 AOWPの適用事例 (2) Web固有の関心事 と それ以外の関心事
ページアクセスに横断的な関心事はWeb に特化したAOP機構を使用 ユーザ認証アスペクト アクセス解析アスペクト アクセス履歴アスペクト 警告アスペクト データベースアクセスやファイルアクセス 等に関係する関心事は,プログラミング言 語に基づくAOP機構を使用 ファイル圧縮アスペクト 入力値検証アスペクト メール検証アスペクト 全部で7つのアスペクトを定義し、4つのアスペクトが、AOWPが提供するWebに固有なAOP機構のみを用いて定義できた。 また、ファイルアクセスやデータベースアクセスに関係する箇所は、関数呼び出しを選択するポイントカットのような、汎用的なAOP機構を用いてアスペクト記述が行われた。 28

29 議論とまとめ 29

30 実行時の機能の付け替えができる事が望ましい 実行時の動的織り込みが有効
議論 (1) 実行時の動的織り込み 関心事 影響を与える処理,関係するコンテキスト情報 サニタイジング [Masuhara2003] データベースアクセス,HTML出力,データフロー アクセス制御 [Lemos2006] ページアクセス,ユーザごとの認証状態 バージョニング ファイルアクセス,データベースアクセス ファイル圧縮 (変換) ファイルアクセス アクセス解析 ページアクセス,ユーザ/アプリケーションごと サービス監視 ページアクセス, ユーザごとのページ遷移履歴 [Tan2002] 構造 [Kojarski2003] Webページの構造,データベースの構造 実行時の機能の付け替えができる事が望ましい 実行時の動的織り込みが有効 1つの今後の計画は、実行時に柔軟に変更できるアクセス解析やサービス監視の為の基盤を実現する為に、 動的織り込みに対応する事である。 30

31 議論 (1) 実装方法の検討 プリコンパイル型 プロキシ型 事前にサーバサイドプログラムに アドバイスの実行コードを
Webサーバ Webサーバ Weaver Weaver その実現方法として、プロキシサーバでユーザからのリクエストを横取りし、織り込みを行う手法を考えている。 取り扱うジョインポイントを、リクエストジョインポイントに限定する事で、実用的なAOP機構が開発できないかと考えいる。 [久保2008] AOJS: アスペクトを完全分離記述可能な JavaScript アスペクト指向プログラミング・フレームワーク, 久保淳人 and 水町友彦 and 鷲崎弘宜 and 深澤良彰 and 鹿糠秀行 and 小高敏裕 and 杉本信秀 and 永井洋一 and 山本里枝子 and 吉岡信和, ソフトウェア工学の基礎ワークショップ (FOSE), 2008 aspectPHP, プログラム プログラム Webクライアント Webクライアント Webクライアント プログラム Webクライアント プログラム 事前にサーバサイドプログラムに アドバイスの実行コードを 埋め込む方法 (AspectJ等) HTTPリクエストを横取りして 織り込みを行う方法 (AOJS [久保2008], aspectPHP) 実行性能の最適化が行いやすい 動的織り込みに適している 31

32 ページ遷移履歴を直接取り扱う為のサポート
議論 (2) ページ遷移履歴の取扱い 関心事 影響を与える処理,関係するコンテキスト情報 サニタイジング [Masuhara2003] データベースアクセス,HTML出力,データフロー アクセス制御 [Lemos2006] ページアクセス,ユーザごとの認証状態 バージョニング ファイルアクセス,データベースアクセス ファイル圧縮 (変換) ファイルアクセス アクセス解析 ページアクセス,ユーザ/アプリケーションごと サービス監視 ページアクセス, ユーザごとのページ遷移履歴 [Tan2002] 構造 [Kojarski2003] Webページの構造,データベースの構造 さらに、もう1つの今後の計画は、[Tan2002] で提案されたような複雑なサービス監視に対応する為に、 ページ遷移履歴を容易に取り扱う為のAOP機構の拡張を検討している。 ページ遷移履歴を直接取り扱う為のサポート 32

33 Webアプリの監視において,アクセス履歴を取り扱う事は重要
議論 (2) ページ遷移履歴に基づくPC機構 プログラムの実行履歴を取り扱う為のポイントカット機構の研究に基づいて、 ページ遷移履歴を取り扱う為のAOP機構の拡張を検討している。 [Walker2004] Implementing protocols via declarative event patterns, Walker, Robert J. and Viggers, Kevin, FSE, 2004 [Douence2004] Composition, Reuse and Interaction Analysis of Stateful Aspects, Rémi Douence and Pascal Fradet and Mario Südholt, AOSE, 2004 [Allan2005] Adding Trace Matching with Free Variables to AspectJ, Chris Allan and Pavel Avgustinov and Aske Simon Christensen and Laurie Hendren and Sascha Kuzins and Ondřej Lhoták and Oege de Moor and Damien Sereni and Ganesh Sittampalam and Julian Tibble, OOPSLA, 2005 Webアプリの監視において,アクセス履歴を取り扱う事は重要 実行履歴を取り扱うAOP [Walker2004, Douence2004, Allan2005] ユーザごとのアクセス履歴を,プログラムの実行履歴に対応付けるのは大変 リクエストジョインポイントとper-sessionのアスペクトインスタンスを利用する事 で実用的なものが作れないだろうか? 33

34 まとめ Webアプリケーションにも様々な横断的関心事がある 横断的関心事の特徴に合わせたAOP機構の開発は有効
AOWP: ページアクセスとユーザセッションのサポート 34


Download ppt "中島 震,Reda Ahroum, Daniel Balouek (NII)"

Similar presentations


Ads by Google