gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:41:28 30 4
gpt4 key购买 nike

我有一个简单的 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com