我正在使用grails应用程序,该应用程序对所有gsp页面使用html的默认编码:
grails {
views {
gsp {
encoding = 'UTF-8'
codecs {
expression = 'html'
scriptlet = 'html'
taglib = 'none'
staticparts = 'none'
}
}
}
}
这很棒,可以从绝大多数应用程序中删除XSS漏洞,但应用程序中的一些插件包含grails变量中的HTML,这些变量在插件中的GSP上呈现。在不修改插件的情况下,我无法在我不想编码的变量周围添加raw()方法。
我查看了grails文档,可能只是在找错了地方,但我找不到答案......
有没有办法从gsp编解码器中排除插件?甚至是特定的控制器/视图?
答案 0 :(得分:1)
所以我终于有时间重新考虑这个并做更多的研究。最终偶然发现了关于github(https://github.com/grails/grails-core/wiki/Default-Codecs)的讨论。
关于Per Plugin编码的部分内容如下:
” Grails还具有控制每个插件使用的编解码器的能力。例如,如果您安装了一个名为foo的插件,那么将以下配置放在您的应用程序的Config.groovy中将仅禁用foo插件的编码
foo.grails.views.gsp.codecs.expression = "none"
“
在极少数情况下的旁注:
我在Config文件中遇到了保留字的其他问题。我们使用了一个名为“custom-user-interface”的插件,并尝试以相同的方式引用它“
custom-user-interface.grails.views.gsp.codecs.expression = "none"
无法编译,因为grails试图将“interface”视为具有某种意义。试图将其放在一个字符串中
'custom-user-interface'.grails.views.gsp.codecs.expression = "none"
也无法编译错误“没有属性'grails'for String”
最终我能够逃脱它并使用括号表示法成功强制插件按照我想要的方式运行:
custom-'user-interface' {
grails.views.gsp.codecs.expression = 'none'
}