Grails XSS预防功能非常方便,所以我使用它启用它:
grails.views.default.codec = "html"
Run Code Online (Sandbox Code Playgroud)
但是,这会产生html的问题textareas.如果我们完成textarea并使用Enter来断行,则新行将保存在数据库中,但在视图中会被忽略.我可以使用<%=%>和replaceAll('\n',"<br>")修复换行符,但填写的HTML代码textarea不会被转义,也不会有XSS预防!
你会如何解决这个问题?
Ant*_*ine 10
在将您的textarea渲染回GSP之前,您可以
<br/>.这可以通过将以下标记lib保存到grails-app/taglib来实现:
class LinesTagLib {
def lines = { attrs, body ->
out << attrs['string'].encodeAsHTML().replace('\n', '<br/>\n')
}
}
Run Code Online (Sandbox Code Playgroud)
由于我们已经在标记中应用了encodeAsHTML(),因此在使用标记时必须禁用HTML编解码器(使用<%=expression%>而不是${expression}):
<g:lines string="<%=savedTextarea%>" />
Run Code Online (Sandbox Code Playgroud)
另一种方法是为此编写自己的编解码器:
class HTMLLinesCodec{
static encode = { str ->
str.encodeAsHTML().replace('\n', '<br/>\n')
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过添加指令将此编解码器用于您希望此行为的GSP文件:
<%@ defaultCodec="HTMLLines" %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4153 次 |
| 最近记录: |