適切なエスケープ処理でクロスサイトスクリプティングに備えるStrutsで作るセキュアWebアプリケーション(1)(1/3 ページ)

» 2006年03月23日 00時00分 公開
[安西真人三井物産セキュアディレクション株式会社]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。


 Web

 JavaWebStrutsStruts 1.2.8StrutsWebStruts使

【参考連載記事】
Webシステムのセキュリティ要件(情報マネジメント)
Strutsを使うWebアプリケーション構築術(Java Solutionフォーラム)



 Cross Site ScriptingXSSHTTPWeb

 


Cookie

VBScript

HTML


HTMLURL

bean:write使


 HTMLHTML

「<」「>」「&」「"」「'」

などである。動的なパラメータを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アプリケーションに対し、スクリプトとして動作する値を入力して送信ボタンを押したところ、以下のような画面が表示された。

画面1 スクリプトとして動作する値を入力 画面1 スクリプトとして動作する値を入力

 スクリプトは動作せず、「<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="&lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;"><br>
   <br>
   入力されたコメント:
   &lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;
   <br>
   <input type="submit" value="送信">
  </form>
  </body>
</html>
画面1のHTMLソース

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。