【发布时间】:2014-05-24 07:11:00
【问题描述】:
在 HTML 模板引擎中,默认占位符文本进行 HTML 转义以帮助防止 XSS(跨站点脚本)攻击是非常好的做法。是否可以在 StringTemplate 中实现这种行为?
我尝试注册自定义AttributeRenderer,除非format 是"raw",否则它会转义HTML:
stg.registerRenderer(String.class, new AttributeRenderer() {
@Override
public String toString(Object o, String format, Locale locale) {
String s = (String)o;
return Objects.equals(format, "raw") ? s : StringEscapeUtils.escapeHtml4(s);
}
});
但它失败了,因为在这种情况下,StringTemplate 不仅会转义占位符文本,还会转义模板文本本身。例如这个模板:
example(title, content) ::= <<
<html>
<head>
<title>$title$</title>
</head>
<body>
$content; format = "raw"$
</body>
</html>
>>
呈现为:
<html>
<head>
<title>Example Title</title>
</head>
<body>
<p>Not escaped because of <code>format = "raw"</code>.</p>
</body>
</html>
有人可以帮忙吗?
【问题讨论】:
标签: java stringtemplate stringtemplate-4