gpt4 book ai didi

php - 我有时看到人们将 json_encode() 包装在 htmlspecialchars() 中。为什么?

转载 作者:可可西里 更新时间:2023-11-01 13:06:36 27 4
gpt4 key购买 nike

我通常这样做:

echo json_encode($result);

但我看到人们有时会这样做:

echo htmlspecialchars( json_encode($result), ENT_NOQUOTES );

为什么要在 JSON 上使用 htmlspecialchars?

最佳答案

我不懂 php,所以我假设 htmlspecialchars 转义任何 html 特殊字符。

鉴于该假设,那么用例是直接在 html 内容中植入 json 数据,a la

echo "<script>"
echo json_encode($result)
echo "</script>"

鉴于 json 编码仅对内容进行编码以避免从 JS 解析器中转义,这种情况将允许某人插入 html 解析器解释为结束脚本标记的 JSON 数据。

有点像

{"foo": "</script><script>doSomethingEvil()</script>"}

然后将到达浏览器

<script>{"foo": "</script><script>doSomethingEvil()</script>"}<script>

这显然会导致 doSomethingEvil() 被执行。通过转义任何 html 标记,您最终会发送类似

的内容
<script>{"foo": "&lt;/script&gt;&lt;script&gt;doSomethingEvil()&lt;/script&gt;"}<script>

相反,它避免了 XSS 漏洞。

这个问题的一个更好的解决方案是不直接在 HTML 源中发送 JSON 数据(JSON 编码只是让内容安全地嵌入 JS,而不是 HTML)

关于php - 我有时看到人们将 json_encode() 包装在 htmlspecialchars() 中。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892559/

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