这可能是一个更基本的问题,但是我在我的JavaScript页面上从我的控制器访问JSON字符串,该控制器访问数据库。我用{!JSENCODE(jsonString)}来警惕XSS漏洞,因为用户可以在JSON中指定对象的名称。
问题是......在执行JSENCODE时,它会转义单引号。然后,如果我尝试JSON.parse()它,\'作为无效字符抛出错误。替换\'用\'防止错误,但它显示为\'在对象名称列表中而不是单引号(用于撇号)。
允许用户在避免XSS漏洞的同时在这些对象的名称中使用单引号的最佳做法是什么?
答案 0 :(得分:0)
听起来您正在获取数据,将其转换为JSON,然后将其注入<script>
元素中的字符串文字,然后尝试将结果字符串解析为JSON。
问题是JSON中的特殊字符也是JavaScript中的特殊字符。
好消息是JSON是JavaScript的一个子集,因此您可以像使用JavaScript文字一样使用它。
<script>
var data = {!JSENCODE(jsonString)};
console.log(data);
</script>