【发布时间】:2015-09-22 08:31:46
【问题描述】:
给定消息属性文件中的消息:
message = Change relation <strong>{0}</strong> -> <strong>{1}</strong> to <strong>{2}</strong> -> <strong>{3}</strong>?
如果任何占位符的内容是受用户影响的字符串,我需要对消息进行 html 转义以防止潜在的 XSS(我猜我是通过在我的 JSP 模板中使用 c:out 标记来做到这一点的我也可以使用spring:message 标签的htmlEscape-attribute,但我认为没有区别)。
但是这样做,我破坏了消息中的标记,<strong> 等导致输出:
Change relation <strong>Peter</strong> -> <strong>Car</strong> to <strong>Carl</strong> -> <strong>Bus</strong>?
我已经阅读了这里的帖子on stackoverflow,但它没有解决 XSS。
我正在考虑这些选项:
1) 只需将消息属性文件中的所有<strong> 标记替换为单引号即可。那么 html 转义整个消息就没有问题了,缺点是对消息的特定部分的突出显示较少。
2) 将消息拆分为允许在 (JSP) 模板中单独标记的部分。这感觉就像是为了让标记正确而做很多工作。
我在这里遗漏了什么吗?哪个是更好的选择,还是有其他选择?
编辑:如果没有 html 转义,消息就像我想要的那样:
将关系 Peter -> Car 更改为 Carl -> Bus?
因此,messages.properties 文件中的 html 标记在模板中显示时会被渲染。
转义时,消息如上所示,显示<strong>标签而不是渲染它们。
【问题讨论】:
-
你是说它导致输出:
&lt;strong&gt;Peter&lt;/strong&gt;?因为据我所知,您的“损坏”示例与原始消息完全相同。 -
嗨,对不起,我已经编辑了我的问题,试图进一步澄清我的情况。
-
感谢您的澄清。如果您查看 HTML(查看源代码),您会发现您实际上是在向客户端发送
&lt;而不是<。所以,我相信我的回答仍然有效 - 如果不清楚或者我误解了您的问题,请告诉我。
标签: html spring localization xss html-escape