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

时间:2017-07-06 15:00:40

标签: javascript json xss

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

好消息是JSON是JavaScript的一个子集,因此您可以像使用JavaScript文字一样使用它。

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