繁体   English   中英

grails损坏的lang参数

[英]grails corrupted lang parameter

我们知道在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()返回此恶意脚本之后,该恶意脚本弄乱了我的网站的内容,因为很多内容是根据语言环境决定的。 是解决此问题的一种方法(在设置语言环境之前对lang进行消毒)还是这是grails的错误?

另外,我可以限制在lang中传递的内容吗? 例如:如果网站仅支持“ en”和“ de”,则传递的/ url?lang = es会使内容混乱。 有没有一种方法可以将lang参数的值限制为仅'en'和'de',可能在过滤器之类的东西中,而不是在grails拦截器中发生语言环境更改?

我可以想到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以设置默认语言环境。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM