我在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 = ""并呈现视图时,我得到了警报框。
如果我将其更改为使用 ${model.something},它似乎可以正确转义。但为了安全起见,我希望确保脚本输出也被编码。我是否需要配置中的其他东西来使其做到这一点?
<%=%>
形式并不意味着任何转义。只需使用${}
.
默认情况下,${..} 块中的变量不会转义,因此变量字符串中的任何 HTML 都将直接呈现到页面。若要降低跨站点脚本 (XSS) 攻击的风险,可以使用 grails.views.default.codec 设置启用自动 HTML 转义。
请注意,没有说<%=%>
.根据我自己的实践,我确认设置不会影响 JSP 标签(您可能需要渲染一些未转义的内容)。