0. はじめに
 当ビューワは、MyJVNより提供されたインターフェース(9. API仕様参照)を用いて、どのようなことができるかを具体的に示した実装例である。
 この例を参考に、インターフェースを使ったプログラムを作成する際の参考にされたい。

コンテンツ
1. 要件
2. Flashファイルの構成
3. 脆弱性情報提供ベンダ一覧のFlashでの利用
4. JVN脆弱性対策概要情報のFlashでの利用( 階層構造画面 での使用 )
5. JVN脆弱性対策概要情報のFlashでの利用( チェックリスト での使用 )
6. JVN脆弱性対策 詳細 情報のFlashでの利用
7. Flash処理概要
8. Flash共有オブジェクトの構造
9. API仕様

1. 要件
1.Flashでビューワを作成するにあたり、以下の機能を提供することとした。
  なお、このドキュメントでは「セキュリティ情報提供サイト」の機能説明等は行わない。 2.データの取得には、別に提供されたAPI(CGI)を使用する。提供されるAPIは以下のとおり。

2. Flashファイルの構成
fig2-1 : JvnRssEx002.swfの上にsPortalList.swfが載る形
JvnRssEx002.swf と sPortalList.swf の2つから構成されており、JvnRssEx002.swf が sPortalList.swf を読み込む形で表示されるようになっている。
(※:sPortalList.swf についての仕様は、このドキュメントでは述べない。)

3. 脆弱性情報提供ベンダ一覧のFlashでの利用
myjvn.cgiで「脆弱性情報提供ベンダ一覧」を取得し、Flash共有オブジェクトに配列として登録する。
fig3-1 :脆弱性情報提供ベンダ一覧をFlash共有オブジェクトに取り込む。
※ Flash共有オブジェクト項目「checked」は、初めに取り込んだ時には「全て選択されていない」状態とするため、Falseを設定する。

4. JVN脆弱性対策概要情報のFlashでの利用 ( 階層構造画面 での使用 )
myjvn.cgiで「JVN脆弱性対策概要情報」を取得し、Flashに配列として登録する。
「JVN脆弱性対策概要情報」は
RSS1.0+mod_sec 形式で提供され、Flashでは <item> タグ内のデータを使用する。
fig4-1 :JVN脆弱性対策概要情報のフォーマット

Flashでは次の図(fig-23)に示すように、<item> タグ内データを編成しなおす。
fig4-2 :JVN脆弱性対策概要情報をFlashの配列として取り込む。

階層構造画面を作成する場合、上図(fig-23)で作成された配列を [vend(ベンダ)]>[prod(製品)]>[id(脆弱性情報ID)] 順に並べ替える。
fig4-3 :階層構造画面用に配列をソート(並べ替え)する。

並べ替えた配列を使い、階層構造画面を作成する。
fig4-4 :階層構造画面用配列から画面を作成する。

5. JVN脆弱性対策概要情報のFlashでの利用 ( チェックリスト での使用 )
前述の「階層構造画面での使用」で作成した、Flashの配列を利用する。
その配列を [id(脆弱性情報ID)]>[vend(ベンダ)]>[prod(製品)] 順に並べ替える。
fig5-1 :チェックリスト用に配列をソート(並べ替え)する。

並べ替えた配列を使い、チェックリスト画面を作成する。
fig5-2 :チェックリスト用配列から画面を作成する。


6. JVN脆弱性対策 詳細 情報のFlashでの利用
myjvn.cgiで「JVN脆弱性対策詳細情報」を取得する。取得データを解析しながら各表示項目を編集し「詳細情報プレート」を作成する。
fig6-1 :JVN脆弱性対策詳細情報のフォーマット

下図(fig-29)は上記フォーマットの各項目に対応する表示項目を示したものである。(上図内の番号と下図内の番号が対応する。)
fig6-2 :JVN脆弱性対策詳細情報画面、表示例


7. Flash処理概要
1.起動処理(起動 → 表示)
 JvnRssEx002.swf を起動することから始まる。
(1) Flash Playerバージョンチェック
バージョン7未満は、プレーヤのバージョンアップを促す表示をして終了。
バージョン7以上であれば以下の処理を続行する。
(2) sPortalList.swf を読込む。(※:sPortalList.swf についての仕様は、このドキュメントでは述べない。)
(3) myjvn.cgiを使用し、脆弱性情報提供ベンダ一覧を読み込む。
"myjvn.cgi?md=get_vlist"読込めなかった場合はエラーメッセージを表示して終了。
(4) 脆弱性情報提供ベンダ一覧をベンダ名昇順に並べ替える。(以降"ベンダリスト")
(5) ベンダリストとFlash共有オブジェクトに保存したベンダリスト(以降"保存ベンダリスト")と比較する。
(5-1) ベンダリストにデータが一件も無い場合は処理終了。
(5-2) ベンダリストにデータが有り、保存ベンダリストにデータが一件も無い場合、
Flash共有オブジェクトにはベンダリストのデータを始め、デフォルト値を設定する。
(5-3) ベンダリストにデータが有り、保存ベンダリストにもデータが有る場合、同じベンダが有るかを比較する。
・両方に同じベンダが有った場合は、保存ベンダの方を残す。
・保存ベンダリストに有るベンダがベンダリストにない場合、そのベンダは保存ベンダリストから削除する。
(6) Flash共有オブジェクトの各値を myjvn.cgi のパラメータに設定し、JVN脆弱性対策概要情報を取得する。
読込めなかった場合はエラーメッセージを表示して終了。
(7) JVN脆弱性対策概要情報(以降、概要データ)を解析する。
(7-1) 概要データが一件も無い場合は、サーバからエラーXMLが返ってくるので、それを解析しエラーメッセージを表示して処理終了。
(7-2) 概要データが有る場合、「脆弱性情報ID>ベンダ名>製品名」昇順に並べ替え、チェックリスト画面を作成する。(この時点では表示しない。)
(7-3) 概要データが有る場合、「ベンダ名>製品名>脆弱性情報ID」昇順に並べ替え、階層構造画面を作成する。
(8) 階層構造画面作成表示、およびチェックリスト画面を作成した段階で処理終了。

2.階層構造画面の脆弱性情報プレートのイベント処理
 脆弱性情報プレートをクリックすると、その脆弱性情報IDに該当する「JVN脆弱性対策詳細情報」が読込まれ表示される。
fig7-1 :脆弱性情報プレートをクリックすると、詳細情報プレートが下から現れる。

脆弱性情報プレートに定義されたクリックイベントにより以下の処理が行われる。
(1) 詳細情報プレートが画面下から表示されるアニメーションが完了するまで、他のクリックイベント(sPortalList.swfも含む)を無効にする。
(2) myjvn.cgi を使用し、JVN脆弱性対策概要情報を取得する。
読込めなかった場合はエラーメッセージを表示して終了。
(3) JVN脆弱性対策詳細情報(以降、詳細データ)を解析する。
(3-1) 詳細データが一件も無い場合は、サーバからエラーXMLが返ってくるので、それを解析しエラーメッセージを表示して処理終了。
(3-2) 詳細データが有る場合、それを解析し、詳細情報プレートを作成する。
(4) 詳細情報プレートを画面下からスライドする、アニメーション表示を行う。
(5) アニメーションが完了したら、当処理の始めに無効にしたクリックイベントを有効にし、処理終了。

3.詳細情報プレート内の処理
3-1.「閉じる」ボタンイベント処理
fig7-2 :詳細情報プレートの「閉じる」ボタンをクリックすると、詳細情報プレートが下に隠れる。
(1) 詳細情報プレートが画面下に隠れるアニメーションが完了するまで、他のクリックイベントを無効にする。
(2) 詳細情報プレートを画面下にスライドするアニメーション処理を行う。
(3) アニメーションが完了したら、当処理の始めに無効にしたクリックイベントを有効にし、処理終了。

4.「フィルタリング条件」のボタンイベント処理
fig7-3 :フィルタリング条件ボタン
(1) Flash共有オブジェクトからデータを取得し、フィルタリング条件プレートの各項目に設定する。
(2) フィルタリング条件プレート以外のクリックイベントを無効にする。
(3) フィルタリング条件プレート(fig-5)を表示し、処理終了。

5.フィルタリング条件プレート内の処理
fig7-4 :フィルタリング条件プレート
5-1.「設定値のクリア」のボタンイベント処理
(1) Flash共有オブジェクトと設定画面上の値をクリアし、処理終了。
5-2.「再読込」のボタンイベント処理
(1) 「発見日」「更新日」の日付チェックを行う。
脆弱性発見日(以降、発見日)も脆弱性更新日(以降、更新日)も「年月日」の From-To を設定できる。
発見日、更新日ともに以下のチェックを行い、それ以外はエラー表示をして、処理終了。
(1-1) From、To の年は西暦4桁入力とする。
(1-2) From、To 共に、「年指定」「年月指定」「年月日指定」の組み合わせを有効とする。
(1-3) 前述の組み合わせ後、日付常識チェックを行う。
(1-4) From、To の期間設定チェックを行う。From、To 共に設定は任意である。From、To 両方指定された場合、From は To より以前、あるいは同じ日付を有効とする。
(2) エラーがなかった場合、Flash共有オブジェクトに設定画面上の値を設定する。
(3) JVN脆弱性対策概要情報を読み込む処理を行う。→ 上述1.(6) からの処理へつながる。
5-3.「キャンセル」のボタンイベント処理
(1) フィルタリング条件プレートを非表示にする。
(2) フィルタリング条件プレートを表示したときに無効にしたクリックイベントを有効にし、処理終了。

6.「再読込」のボタンイベント処理
fig7-5 :再読込ボタン
(1) JVN脆弱性対策概要情報を読み込む処理を行う。→ 上述1.(6) からの処理へつながる。

7.「チェックリスト印刷」のボタンイベント処理
fig7-6 :チェックリスト印刷ボタンをクリックすると、チェックリストプレートが下から現れる。
(1) チェックリストプレートが画面下から表示されるアニメーションが完了するまで、他のクリックイベント(sPortalList.swfも含む)を無効にする。
(2) チェックリストプレートを画面下からスライドする、アニメーション表示を行う。
(3) アニメーションが完了したら、当処理の始めに無効にしたクリックイベントを有効にし、処理終了。

8.チェックリストプレート内の処理
8-1.「印刷」のボタンイベント処理
fig7-7 :「印刷ボタン」ボタンをクリックすると、印刷ダイアログが表示される。
(1) チェックリストプレートで使用した同じデータを使い、印刷用ムービークリップを非表示で作成する。
(2) 印刷用ムービークリップをFlashの PrintJobオブジェクトを使用して印刷する。

8-2.並べ替えボタンイベント処理
表示項目のうち「発行日」「ID/タイトル」「深刻度」「更新日」については、それぞれ昇順・降順に並べ替えることができる。
fig7-8 :並べ替え可能な項目のタイトルクリックすると、その項目の昇・降順に並べ替え表示される。
(1) 項目タイトルを初めにクリックすると、その項目の降順にリストが並べ替えられる。
(2) 次に同じ項目タイトルをクリックするとその項目の昇順にリストが並べ替えられる。以後、その項目タイトルをクリックするごとに降順、昇順と交互に切り換る。

8-3.「閉じる」のボタンイベント処理
fig7-9 :チェックリストプレートの「閉じる」ボタンをクリックすると、チェックリストプレートが下に隠れる。
(1) チェックリストプレートが画面下に隠れるアニメーションが完了するまで、他のクリックイベントを無効にする。
(2) チェックリストプレートを画面下にスライドするアニメーション処理を行う。
(3) アニメーションが完了したら、当処理の始めに無効にしたクリックイベントを有効にし、処理終了。

8. Flash共有オブジェクトの構造
フィルタリング条件を保存する。
ShareObject.data ↓
.aryList脆弱性情報を提供する各ベンダデータが配列で登録される。
.id : ベンダID
.name : ベンダ名
checked : このベンダの選択状態。true=選択
.rdp発見日の範囲指定パラメータが入る。
""=無指定
"w"=直近の1週間
"m"=直近の1ヶ月
.rdl更新日の範囲指定パラメータが入る。
""=無指定
"w"=直近の1週間
"m"=直近の1ヶ月
.severity深刻度の指定
"h"=高、"m"=中、"l"=低
.dpfy発見日の From 年指定
.dpfm発見日の From 月指定
.dpfd発見日の From 日指定
.dpty発見日の To 年指定
.dptm発見日の To 月指定
.dptd発見日の To 日指定
.dlfy更新日の From 年指定
.dlfm更新日の From 月指定
.dlfd更新日の From 日指定
.dlty更新日の To 年指定
.dltm更新日の To 月指定
.dltd更新日の To 日指定
9. API仕様
1.myjvn.cgi リクエストパラメータ一覧
#項目パラメータ名説明指定可能モード備考
1 リクエストモード md リクエストモードを次の4つのいずれかで指定します(必須)。
get_vlist
JVN iPediaに登録されているベンダ名、ベンダIDの一覧の取得。
get_plist
JVN iPedia に登録されている製品名、製品IDの一覧の取得。
※JvnRssEx002.swf では使用しない。
get_rss
脆弱性対策概要情報の取得。
get_vuldef
脆弱性対策情報(詳細情報)の取得。
2 キーワード kw 任意の文字列
複数指定する場合は’+’記号 (半角)で区切って指定。
get_rss
3 ベンダID vid ベンダID
複数指定する場合は’+’記号(半角)で区切って指定。
get_plist
get_rss
リクエストモードget_vlistによって取得されるベンダIDを指定。
4 CPE Name cid CPE Name(cid=“cpe:/:{ベンダ名}” ) get_rss ※JvnRssEx002.swf では使用しない。
ベンダ情報をCPE Name形式でも指定可能とする。
5 製品ID pid 製品ID
複数指定する場合は’+’記号(半角)で区切って指定。
get_rss ※JvnRssEx002.swf では使用しない。
リクエストモードget_plistによって取得される製品IDを指定。
6 CVSSによる深刻度 sev h:高、 m:中、 l:低のいずれかで指定。 get_rss
7 脆弱性情報の発見日 rdp フィルタリング対象とする脆弱性情報の発見日、更新日の範囲をフィルタリング処理を実行する日を基準にして、直近の1週間、直近の1ヶ月の範囲で指定する。
w:直近の1週間当月、 m:直近の1ヶ月
get_rss アクセスした日の月または年。
年月日での範囲指定がある場合は、年月日を優先する。
8 脆弱性情報の更新日 rdl
9 脆弱性の発見日
(範囲指定の開始年月日)
dpfy 年(yyyy)西暦 get_rss ・開始年、
・開始年月、
・開始年月日、
または、
・終日年、
・終了年月、
・終了年月日
のみの指定も可能。
10 dpfm 月(mm)
11 dpfd 日(dd)
12 脆弱性の発見日
(範囲指定の終了年月日)
dpty 年(yyyy)西暦
13 dptm 月(mm)
14 dptd 日(dd)
15 脆弱性情報の更新日
(範囲指定の開始年月日)
dlfy 年(yyyy)西暦
16 dlfm 月(mm)
17 dlfd 日(dd)
18 脆弱性情報の更新日
(範囲指定の終了年月日)
dlty 年(yyyy)西暦
19 dltm 月(mm)
20 dltd 日(dd)
21 脆弱性情報ID vuid 脆弱性情報ID(JVNDB-yyyy-nnnnnn) get_vuldef リクエストモードget_rssによって取得される<sec:identifier>タグの値を指定。