1

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」のみに制限する方法はありますか?

4

1 に答える 1

0

3つの可能なオプションを考えることができます。

1)言語を制限するには、リクエストごとにフィルターでロケールを設定できます。しかし、これはリロードのたびにリセットされます。

def filters = {

    before = {
        def locale = new Locale("sv","SV")
        RCU.getLocaleResolver(request).setLocale(request, response, locale)                  
    }

 }

2) すべてのメッセージ プロパティ ファイルを削除して、messages.properties ファイルのみを残すことができます。そのため、システムは常にこのプロパティ ファイルをデフォルトに設定します。

3) config/spring/resources.groovy で LocaleResolver をセットアップして、デフォルトのロケールを設定できます。

于 2012-05-08T15:19:34.023 に答える