Slim3でリクエストのParameterがAttributeにコピーされる件
Requestパラメータは RequestHandler によってRequestのAttributeにコピーされます。これは、JSPのようなビューから便利にアクセスできるようにするためです。
https://sites.google.com/site/slim3documentja/documents/slim3-controller/request-response-servletcontext
問答無用で全てコピーってのはちょっと抵抗あるなー。
自分はAttributeって本来ユーザの直接触れない領域だという認識*1で開発していたけれど、パラメータが全てコピーされるとなると、ユーザがURLのクエリ文字列とかで好きな値を設定出来ちゃうってことだよね。
一般的にforwardするときの値の受け渡しにはRequest Attributeを使うと思うけど、それらも全て悪意のあるユーザによって改竄されている可能性があるものとしてプログラムつくらないとダメかな。それともリクエストを制限する方が楽かしら。
「JSPのようなビューから便利にアクセスできるようにするため」てのは、ELで${f:h(param.hoge)}って書けるからそれで十分じゃなかろうか。
追記:
ひがさんからコメント頂いた。ありがとうございますm(_ _)m
初期値を設定したい、postの後、入力された値をそのまま表示したいって時に、attributeじゃないと困りますよね。
ちょっとよく分からなかったのですが、ParameterをAttributeにコピーしないと、
<input type="text" ${f:text("aaa")}/>
などが正しく動作しなくなるよ、という意味でしょうか?
これは出来ればf:textがParameterも見てくれると嬉しかったです。Attributeに同名の値があったらそちらが優先とか。。
あ、あとSlim3ドキュメントに誤記らしきものを見つけました。
The above sample equivalents to the following sample:
https://sites.google.com/site/slim3appengine/slim3-jsp/text
〜snip〜
<input type="text" name="aaa" value="${f:h("aaa")}"/>
この記述だとtextには常に「aaa」が表示されてしまいますね。
value属性中のaaaにはダブルクォーテーション不要かと。
<input type="text" name="aaa" value="${f:h(aaa)}"/>
Discussion Groupとかで報告した方がいいかな。。
*1:この認識がそもそも間違い?