1

我在 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 = "<script>alert('something')</script>" 并渲染视图时,我得到了警告框。

如果我将其更改为使用 ${model.something} ,它似乎可以正确转义。但为了安全起见,我想确保 scriptlet 输出也被编码。我是否需要配置中的其他内容才能做到这一点?

4

1 回答 1

0

<%=%>表单并不意味着任何转义。只需使用${}.

${..} 块中的变量默认情况下不会转义,因此变量字符串中的任何 HTML 都会直接呈现到页面。为了降低跨站点脚本 (XSS) 攻击的风险,您可以使用 grails.views.default.codec 设置启用自动 HTML 转义。

请注意,没有任何关于<%=%>. 根据我自己的实践,我确认设置不会影响 JSP 标记(您可能需要渲染一些未转义的内容)。

于 2015-09-03T09:48:41.090 回答