javascript - 如何让 Jackson 在输出字符串中转义 </script>?

标签 javascript jsp jackson

我有一个简单的 Java 对象,我使用 Jackson 将其序列化为 JSON,然后将其放入 <script> 中。我的 JSP 页面中的标记作为初始化 JavaScript 对象的一部分。例如

<script>SomeLib.load(${someObject});</script>

这很好用除非 someObject 的字段之一是包含"</script>" 的字符串, 因为 this issue .也就是说,如果输出如下所示:

<script>SomeLib.load({"someValue":"hacked!</script>"});</script>

然后浏览器(目前已在 Chrome 和 FF 中测试)相信 </script>hacked! 之后标记正在关闭脚本标签。这会破坏 JavaScript 并留下 "});</script>对用户可见。

有没有办法让 Jackson 以某种方式摆脱这个值(value),从而解决这个问题?

最佳答案

Ravis answer是错的。在那里查看我的评论。

更好的方法是转义 </ 中的斜线带有反斜杠,例如:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<script>SomeLib.load(${fn:replace(jsonString, "</", "<\\/")});</script>

注意:需要两个反斜杠,以便第一个反斜杠在 JSP 语法中被转义。

好的部分是,它不需要特殊的解码。

PS:要在 Jackson 方面执行此操作,请参阅 this blog - 它涵盖了转义其他字符,但只需将斜杠添加到列表中即可转义(所有)斜杠字符。

关于javascript - 如何让 Jackson 在输出字符串中转义 &lt;/script&gt;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28288322/

相关文章:

java - 从 Servlet 中的 java 类获取属性(在 JSP 中看不到转发的请求)

java - 我们可以在jsp中实现一个接口(interface)吗?

spring - Javascript文件上传机制

java - Maven 构建错误 "Found duplicate and different classes in [jackson-annotations, jackson-core, jackson-databind]"均位于 2.10.0

javascript - 我们如何找到滚动条的宽度?

javascript - 没有 Flash 或 Silverlight 的 HTML5 网络摄像头

javascript - jquery NiceScroll : mouse wheel issue

javascript - 使用宽度和高度将表格对齐到中心

java - 使用 xpath 操作 json 文件的有效方法?

java - 如何将 ToXmlGenerator.Feature 添加到 Jackson2ObjectMapperBuilderCustomizer?