- PR -

jsp:forwardでparamの数が可変の場合

1
投稿者投稿内容
take11
会議室デビュー日: 2006/02/16
投稿数: 18
投稿日時: 2008-08-21 19:00
お世話になります。
JSPを使用してプログラムを書いています。
jsp:forward なのですが、現在転送先に複数のユーザIDを渡そうとしています。

------転送元.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%
int id[] = new int[2];
id[0]=0;
id[1]=1;
%>

<jsp:forward page="result.jsp" >
<jsp:param name="id" value="<%=id[0]%>" />
<jsp:param name="id" value="<%=id[1]%>" />
</jsp:forward>
------

転送先のページでは、下記のように受け取り、IDを2つとも表示できることが確認できています。

------転送先.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="test.Test" %>

<jsp:useBean id="userId" scope="request" class="test.Test" />
<jsp:setProperty name="userId" property="id" />
<html>
<body>
<%
for(int i=0; i<userId.getId().length;i++){
%>
ユーザID[<%=i%>]=<%=userId.getId()[i]%><br>
<% } %>
</body>
</html>
------

------実行結果
ユーザID[0]=0
ユーザID[1]=1
------

そこで質問なのですが。

この例では転送元ではIDが2つ固定なのですが、実際には数は可変です。その場合、転送元の下記の部分はどのように記述すればよろしいでしょうか。

------
<jsp:forward page="result.jsp" >
<jsp:param name="id" value="<%=id[0]%>" />
<jsp:param name="id" value="<%=id[1]%>" />
</jsp:forward>
------

下記のように書いてみたところ、JSPエラーが出ることは確認しています。

------
<jsp:forward page="result.jsp" >
<%
for(int i=0; i<id.length;i++)
{
%>
<jsp:param name="id" value="<%=id[i]%>" />
<% } %>
</jsp:forward>
------

ご存じの型がいらっしゃいましたらご教示いただければと思います。
よろしくお願いいたします。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-08-21 20:00
残りをnullで渡して次のjspで判断してもらうとか。
全部カンマ区切りにしてひとつの変数で渡すとか。
take11
会議室デビュー日: 2006/02/16
投稿数: 18
投稿日時: 2008-08-21 21:38
ありがとうございます。
残念ながら転送先のJSPは既にインターフェイスが決まってしまっているので、
変更することができないのです。
なんとか可変数の複数のパラメタを渡す方向で考えたいと思っています。
よろしくお願いいたします。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-08-22 09:33
あ、というか

<% String url = "result.jsp?id=" + id[0] + "&id=" + id[1]; %>
<jsp:forward page="<%=url%>"/>

でいけたような。
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-08-22 11:31
いっそのこと
コード:
<%
pageContext.forward("result.jsp?par=" + param);
%>

とか。CVE-2008-2370 に注意しないといけませんけど。
take11
会議室デビュー日: 2006/02/16
投稿数: 18
投稿日時: 2008-08-22 11:33
>mioさん
あー、なるほど! そうですね、それでいけそうですね。
これは気がつきませんでした。
早速試してみます。ありがとうございました!!

>ひろさん
なるほど、そういう手もあるのですね。
CVE-2008-2370というのが私にはよくわからないのですが、それも
あわせて調べてみます。
ありがとうございました!
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-08-25 19:59
CVE-2008-2370 は最近見つかったTomcatのpageContextのバグで、forwardに渡すURL文字列の内容によっては、
・forward先を開発者の意図と違うページにすることが可能
・そのforward先については WEB-INFの下のファイルの隠蔽が利かないので
 リモートから WEB-INF/web.xml 等の内容を見ることが可能になってしまう

というものです。

UR(Lパラメータ部分含む)にユーザーの入力内容が
反映される場合はこのバグの影響を受ける可能性があります。

参考
http://www.st.ryukoku.ac.jp/~kjm/security/memo/2008/08.html#20080806_various
http://tomcat.apache.org/security-4.html
http://tomcat.apache.org/security-5.html
http://tomcat.apache.org/security-6.html
1

スキルアップ/キャリアアップ(JOB@IT)