给定消息属性文件中的消息:
message = Change relation <strong>{0}</strong> -> <strong>{1}</strong> to <strong>{2}</strong> -> <strong>{3}</strong>?
如果任何占位符的内容是受用户影响的字符串,我需要对消息进行 html 转义以防止潜在的 XSS(我通过c:out
在我的 JSP 模板中使用标签来做到这一点,我想我可以使用 htmlEscape-标签的属性spring:message
也是如此,但我认为没有区别)。
但是,这样做会破坏消息中的标记<strong>
等,从而导致输出:
Change relation <strong>Peter</strong> -> <strong>Car</strong> to <strong>Carl</strong> -> <strong>Bus</strong>?
我已经在 stackoverflow 上阅读了这里的线程,但它没有解决 XSS。
我正在考虑这些选项:
1) 只需<strong>
用单引号替换消息属性文件中的所有标签。那么 html 转义整个消息就没有问题了,缺点是对消息的特定部分的突出显示较少。
2) 将消息拆分为允许在(JSP)模板中单独标记的部分。这感觉就像是为了让标记正确而做的很多工作。
我在这里错过了什么吗?哪个是更好的选择,还是有其他选择?
编辑:如果没有 html 转义消息,就像我希望的那样,就像这样:
将关系Peter -> Car更改为Carl -> Bus?
因此,messages.properties 文件中的 html 标记在模板中显示时会被渲染。
转义时,消息就像上面一样,向我显示<strong>
标签而不是渲染它们。