在HTML模板引擎中,通過默認佔位符文本進行HTML轉義以幫助防止XSS(跨站點腳本攻擊)是非常好的做法。是否有可能在StringTemplate中實現這種行爲?如何在StringTemplate中默認轉義HTML?
我試圖註冊自定義AttributeRenderer
其轉義HTML除非format
是"raw"
:
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);
}
});
但由於在這種情況下StringTemlate逃脫不僅佔位符文本,而且模板文本本身失敗。例如這個模板:
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>
任何人可以幫助?
當然,但很容易忘記添加'format =「xml-encode」',這就是爲什麼我的問題是如何啓用編碼**默認**。 – dened