在 Grails 2.3.0 中转义脚本输出



我在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 标签(您可能需要渲染一些未转义的内容)。

最新更新