前回ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってプログラムを書く(1) - tohokuaikiのチラシの裏の続き。
もう少し細かい設定については、XWork Plugin Complex Parameters and Security - Confluence Development - Atlassian Developer Documentationの内容を参考にする。
XWorkはXWorkのActionObjectに様々な方法でパラメータを与えることができる。
たとえば、URLパラメータにformData.name=Charlesと入れると、それはXWorkのAction内では、getFormData().setName("Charles")とすることになる。
この機能は強力すぎて脆弱性のもととなったことがある。2008年のConfluence2.9での脆弱性だ。これは2.10で徹底的に対策されているが、この対策のためにプラグイン開発者はちょっと余計な手数が必要になった。それを以下に記す。
Complex Parameterっていうのが良く出てくるんだけど、まあこれはごちゃっとしたパラメータで、ある特定の方法でActionObjectの中に入り込めるパラメータくらいに考えている。たとえば、PHPで言うところのregister globals的なもの。よい日本語訳が見つからなかった。
@ParameterSafe アノテーション
Confluence2.10からはComplex Parametersの内で使えるのは、このアノテーションが付いたものだけになっている。
- getterに@ParameterSafeが付く場合
- classに@ParameterSafeが付く場合。
の2パターンがある。
前者が、
@ParameterSafe public FormData getFormData() { return formData; }
後者が
@ParameterSafe public class FormData { ... }
このアノテーションが付くということは・・・
このアノテーションがついた変数については、Developperは以下のことに注意しているということを宣言していることになる。注意しなければ、脆弱性に繋がる。・・・といっても、下記の3つはよくわからなかった。多分、@ParameterSafeアノテーションがついたメソッドがreturnするものについてなんだろうけど。
*1: Hibernate persistent objectsっていうのがよくわからなかった。 Ref: http://stackoverflow.com/questions/14025136/what-does-persistence-object-means-in-hibernate-architecture