- 2008-08-07 (木)
- 技術
Strutsを使ってサニタイジングをした文字列を画面に表示したい場合、
bean:writeタグのfilter属性をfalseにすれば可能だが、実際にどうゆうクラスが行っているかをちょっと確認してみた。
大体の使いかたは以下の感じだろう。
これで
「<span>hogehoge</span>」
という文字が画面にそのまま出力されるようになる。
これはXSS(クロスサイトスクリプティング)を防ぐ最も重要なことですが、とは言っても
Java側のどのクラスがそれをやっているのかは知らなかった。
今回はstruts-1.3.5を使っています。
では以下じゅんぐり追っていこう!
struts-bean.tld(941行目)
まずはtldファイルの中のwriteを定義している場所を探す。
そうするとタグクラスとしてorg.apache.struts.taglib.bean.WriteTagが指定されていた。
WriteTag.class(246行目)
ここは実際にbean:writeが呼ばれた場合に行う処理の部分。
さぁどこでサニタイジングしているのかな?
filterでif文を分けていたので、ここだ!
「TagUtils.getInstance().filter(output)」
この部分が怪しい。
TagUtils.class(563行目)
んで、TagUtilsの中に飛ぶとResponseUtilsクラスのfilterメソッドを呼んでいた。
ResponseUtils.class(80行目のメソッドの中)
ありましたw
お決まりの置換処理ですね。
一見強烈に便利なbean:writeですが、蓋を開ければ実にベーシックな処理をしているのが分かります。
普通にWebシステムなんかを作っているとこのbean:writeを多用しますが、
毎回この処理を経由しているわりには速いなと思いました。
まぁそんなもんなんですかね。
bean:write改めて便利ですね~!
■関連リンク
・The Ja-Jakarta Site - The Ja-Jakarta Project: サブプロジェクト - Struts翻訳
・WriteTag (Apache Struts API Documentation)
【関連する記事】
Comments:0
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1086
- Listed below are links to weblogs that reference
- bean:writeのfilter属性をfalseにした場合の挙動を追う from HouseTect, JavaScripter Blog

