Javascript 使用单引号避免XSS漏洞,但允许用户在输入中使用它们?

Javascript 使用单引号避免XSS漏洞,但允许用户在输入中使用它们?,javascript,json,xss,Javascript,Json,Xss,这可能是一个更基本的问题,但我正在从我的控制器访问JSON字符串,该控制器在我的JavaScript页面上访问数据库。我确实{!JSENCODE(jsonString)}担心XSS漏洞,因为用户需要为JSON中的对象指定一个名称 问题是。。。在执行JSENCODE时,它会转义单引号。然后,如果我尝试将其转换为JSON.parse(),则\'会将错误作为无效字符抛出。将\'替换为\'可以防止出现错误,但随后它会在对象名称列表中显示为\'而不是单引号(用于撇号) 在避免XSS漏洞的同时,允许用户在这

这可能是一个更基本的问题,但我正在从我的控制器访问JSON字符串,该控制器在我的JavaScript页面上访问数据库。我确实{!JSENCODE(jsonString)}担心XSS漏洞,因为用户需要为JSON中的对象指定一个名称

问题是。。。在执行JSENCODE时,它会转义单引号。然后,如果我尝试将其转换为JSON.parse(),则\'会将错误作为无效字符抛出。将\'替换为\'可以防止出现错误,但随后它会在对象名称列表中显示为\'而不是单引号(用于撇号)


在避免XSS漏洞的同时,允许用户在这些对象的名称中使用单引号的最佳做法是什么?

听起来您正在获取数据,将其转换为JSON,然后将其注入
元素中的字符串文字,然后尝试将结果字符串解析为JSON

问题是JSON中的特殊字符在JavaScript中也是特殊字符

好消息是JSON是JavaScript的一个子集,因此您可以将其当作JavaScript文本来使用

<script>
    var data =  {!JSENCODE(jsonString)};
    console.log(data);
</script>

var data={!JSENCODE(jsonString)};
控制台日志(数据);

好的,jsonString是来自我的控制器的JSON序列化列表,因此它是一个需要在我的javascript中解析的字符串。只需执行{!JSENCODE(jsonString)}就可以得到字符串。@TylerDahle-然后不要对它进行双重编码。只是使用它。安全检查指出它是XSS漏洞,但我认为。。。如果任何单引号用双引号括起来,它们实际上是一个漏洞吗?因为如果没有,那么我想就不需要JSENCODE了。