我有一个简单的Java对象,我正在使用Jackson将其序列化为JSON,然后将其作为初始化JavaScript对象的一部分放入JSP页面中的<script>
标签中。例如:
<script>SomeLib.load(${someObject});</script>
这个方法非常好用,除非 someObject 中的某个字段是一个包含 "</script>"
的字符串,由于这个问题。也就是说,如果输出结果看起来像这样:
<script>SomeLib.load({"someValue":"hacked!</script>"});</script>
然后浏览器(已在Chrome和FF中进行了测试)认为</script>
标记位于hacked!
之后,从而关闭脚本标记。这会导致JavaScript出错,并使"});</script>
对用户可见。
是否有一种方法可以让Jackson以某种方式转义该值以解决此问题?
escapeXml="true"
也会转义引号,结果会变成{"someValue":"hacked!</script>"}
。 - jwl