grails损坏的lang参数

时间:2012-05-08 13:47:52

标签: grails locale

我们知道在URL中传递lang参数会改变grails应用程序的语言环境

/url?lang=de

在代码中,我可以通过RequestContextUtils.getLocale(request)获取语言环境,它使用lang参数返回ParamsAwareLocaleChangeInterceptor(grails源的一部分)中设置的语言环境。

如果将脚本或损坏的字符串作为值传递给lang参数,则将相同的crap设置为locale。

/url?lang=>"'><script>alert(167) </script>&=>"'><script>alert(167)</script>

使用此请求,http标头中的Content-language设置为lang参数的script =值。在这个RCU.getLocale()之后返回这个恶意脚本,它会弄乱我的网站内容,因为很多内容是根据区域设置决定的。是解决这个问题的方法(在设置语言环境之前清理lang)还是这是一个grails bug?

另外,我可以限制在lang中传递的内容吗?例如:如果网站上仅支持'en'和'de',则传递/ url?lang = es会混淆内容。有没有办法我可以将lang参数的值限制为只有'en'和'de',可能在过滤器或其他东西,在grails拦截器中发生更改语言环境之前?

1 个答案:

答案 0 :(得分:0)

我可以想到3种可能的选择。

1)要限制lang,您可以在每次请求时在过滤器中设置区域设置。但是每次重新加载时都会重置。

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来设置默认语言环境。