この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
【参考連載記事】
Webシステムのセキュリティ要件(情報マネジメント)
Strutsを使うWebアプリケーション構築術(Java Solutionフォーラム)
「<」「>」「&」「"」「'」
などである。動的なパラメータをHTMLに出力する場合には、これらを特殊な意味を持たない文字列に変換するHTMLエンコード処理が必須となる。
Strutsを使用して動的なパラメータを扱う場合には、ViewコンポーネントであるStrutsカスタムタグライブラリを使用することが多いだろう。Strutsカスタムタグライブラリを使用する際にHTMLエンコード処理を適切に行うには、どのような注意が必要となるだろうか。代表的なカスタムタグであるbean:writeタグを使用した際の動作を見ながら確認していこう。
まず、入力されたコメントを表示するだけの単純なWebアプリケーションを作成してみる。
<%@page contentType="text/html; charset=Shift-JIS" pageEncoding="Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html:html> <head> </head> <body> <html:form action="BeanWrite.do"> コメントを入力してください。 <html:text property="comment" /><br> <br> 入力されたコメント: <bean:write name="TestForm" property="comment" /><br> <html:submit value="送信"/> </html:form> </body> </html:html> |
beanWrite.jsp |
作成したWebアプリケーションに対し、スクリプトとして動作する値を入力して送信ボタンを押したところ、以下のような画面が表示された。
スクリプトは動作せず、「<script>alert('XSS')</script>」という値がそのまま出力されている。beanWrite.jsp上でHTMLエンコードに関する特別な記載はしていないが、画面1のHTMLソースは以下のようになっており、内部的に何らかの処理が行われていることは間違いないだろう。
<html> <head> </head> <body> <form name="TestForm" method="post" action="/WebAppSec/BeanWrite.do"> コメントを入力してください。 <input type="text" name="comment" size="50" value="<script>alert('XSS')</script>"><br> <br> 入力されたコメント: <script>alert('XSS')</script> <br> <input type="submit" value="送信"> </form> </body> </html> |
画面1のHTMLソース |
Copyright © ITmedia, Inc. All Rights Reserved.