grails损坏的语言参数

标签 grails locale

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

/url?lang=de

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

如果将脚本或损坏的字符串作为值传递给 lang 参数,则将相同的废话设置为语言环境。
/url?lang=>"'><script>alert(167) </script>&=>"'><script>alert(167)</script>

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

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

最佳答案

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

关于grails损坏的语言参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499925/

相关文章:

grails - save()在 Controller 中,Grails

grails - 在 logback 中注入(inject) grailsApplication

postgresql - 带有遗留数据库的 grails 2.2.5 中的复合键和映射

grails - Jasper Report 模板中的变音符号

java - 我如何获得货币的货币符号,因为它会出现在其本地语言环境之一中?

Java 应用程序因特殊字符而失败

linux - 从文件读取和写入

grails - 如何在resources.groovy中编辑现有的Spring bean

ios - OC单元 : changing the user's locale for testing

Django 的注销功能删除语言环境设置