我在GSP中有以下内容:
<%=model.something%>
在Config.groovy,我有:
grails {
views {
gsp {
encoding = 'UTF-8'
htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
codecs {
expression = 'html' // escapes values inside null
scriptlet = 'html' // escapes output from scriptlets in GSPs
taglib = 'html' // escapes output from taglibs
staticparts = 'none' // escapes output from static template parts
}
}
// escapes all not-encoded output at final stage of outputting
filteringCodecForContentType {
//'text/html' = 'html'
}
}
}
但是当我设置model.something =“&lt; script&gt; alert('something')&lt; / script&gt;”在控制器中渲染视图,我得到警告框。
如果我改为使用$ {model.something},它似乎正确转义。但我希望安全起见并确保scriptlet输出也是编码的。我是否需要在配置中使用其他内容才能实现这一目标?
答案 0 :(得分:0)
<%=%>
表单并不意味着任何转义。只需使用${}
。
默认情况下,$ {..}块中的变量不会被转义,因此变量的字符串中的任何HTML都会直接呈现给页面。要降低跨站点脚本(XSS)攻击的风险,可以使用grails.views.default.codec设置启用自动HTML转义。
注意,没有任何关于<%=%>
的说法。通过我自己的实践,我确认设置不会影响JSP标记(您可能需要渲染一些非转义的东西)。