在Grails 2.3.0中转义scriptlet输出

时间:2013-10-11 19:11:26

标签: grails gsp

我在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输出也是编码的。我是否需要在配置中使用其他内容才能实现这一目标?

1 个答案:

答案 0 :(得分:0)

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

  

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

注意,没有任何关于<%=%>的说法。通过我自己的实践,我确认设置不会影响JSP标记(您可能需要渲染一些非转义的东西)。