URL で lang パラメーターを渡すと、grails アプリケーションのロケールが変更されることがわかっています。
/url?lang=de
コードでは、RequestContextUtils.getLocale(request) によってロケールを取得できます。これは、lang パラメーターを使用して、ParamsAwareLocaleChangeInterceptor (grails ソースの一部) で設定されたロケールを返します。
スクリプトまたは破損した文字列が値として lang パラメータに渡されると、同じがらくたがロケールとして設定されます。
/url?lang=>"'><script>alert(167) </script>&=>"'><script>alert(167)</script>
このリクエストでは、http ヘッダーの Content-language が lang パラメータの script= 値に設定されます。この後、RCU.getLocale() は、多くのコンテンツがロケールに基づいて決定されるため、私のサイトのコンテンツを台無しにするこの悪意のあるスクリプトを返します。この問題を回避する方法はありますか (ロケールを設定する前に言語をサニタイズします)、それとも grails のバグですか?
また、langで渡されるものを制限できますか? 例: サイトで「en」と「de」のみがサポートされている場合、/url?lang=es を渡すとコンテンツが台無しになります。grailsインターセプターでロケールの変更が発生する前に、langパラメーターの値を「en」と「de」のみに制限する方法はありますか?