我正在运行grails 2.3。新的默认设置具有XSS预防功能。我有一个textarea用户可以输入包含换行符的数据。
我无法将换行符渲染为换行符。
文字区域值:
Something
is
happening
here
在网页中输出的内容:
<span class="description_text">Something<br/>is<br/><br/>happening<br/><br/>here.</span>
渲染的GSP应该是什么样的:
Something<br/>is<br/>happening<br/>here<br/>
我尝试的事情:
out << content?.replace('\n', '<br/>').encodeAsHTML()
out << content?.encodeAsHTML().replace('\n', '<br/>')
out << content?.encodeAsHTML()
我在Config.groovy中的设置:
// Legacy setting for codec used to encode data with ${}
grails.views.default.codec = "html"
// GSP settings
grails {
views {
gsp {
encoding = 'UTF-8'
htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
codecs {
expression = 'html' // escapes values inside ${}
scriptlet = 'html' // escapes output from scriptlets in GSPs
taglib = 'none' // escapes output from taglibs - NOOOO because we ouput html tags in our taglibs, as do some plugins.
staticparts = 'none' // escapes output from static template parts
}
}
// escapes all not-encoded output at final stage of outputting
filteringCodecForContentType {
//'text/html' = 'html'
}
}
}
答案 0 :(得分:0)
我能够使用JSP样式语法来避免gsp的编码安全性。你可以尝试一下吗?
答案 1 :(得分:0)
在这种特殊情况下,当您希望仅允许用户添加换行符时,您应该可以使用以下内容:
out << content?.encodeAsHTML().replace('<br/>', '<br/>')
虽然它不是最漂亮的解决方案,但我认为它应该有用。
答案 2 :(得分:0)
尝试:
out << content?.encodeAsHTML().replace('\n', '<br/>').encodeAsRaw()
当我想将DB中的一些文本粘贴到模板中时,这对我有用。现在你首先逃避任何脚本恶意,然后将换行转换为br标签。