[英]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.