我们知道在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拦截器中发生更改语言环境之前?
答案 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来设置默认语言环境。