如何净化用户输入文本,使其可以在Javascript/JSON中使用

How to sanitize user input text so that it can be used in Javascript/JSON?

本文关键字:Javascript JSON 用户 何净化 输入 文本      更新时间:2023-09-26

我有一个web应用程序,我允许一些大的文本输入使用文本字段。该文本被保存到数据库中,然后作为JSON响应中的字段发送回用户。在浏览器中,我尝试使用JSON.parse将其简单地转换为Object,但这有时会失败,这取决于用户在字段中输入的内容。

我认为现在,文本中有单引号,这些在我调用JSON.parse之前破坏了浏览器端Javascript。

清理该数据的最佳方法是什么?在理想情况下,我可以在保存后将其解析回Object,并进行最小的清理。

这不是一个处理问题:您可以很好地在JSON中放入带引号的字符串:编码只是转义它们。

你的问题是编码问题。要在浏览器中构建JSON字符串,请使用JSON.stringify。要在服务器端完成它,您应该使用(未提及的)服务器端语言/框架提供的工具。

使用JSON的好处是您不需要清理任何内容。无论你给JSON编码器提供什么,它总是输出纯JSON。显然,如果您计划在HTML页面中使用JSON,则需要对其进行HTML编码。根据JS编码器,你需要确保那里没有</script>(例如用'/替换/)。

您也不需要JSON.parse。JSON是JavaScript的一个子集,所以你可以这样做(为了简单,像php一样):

<script>
    var obj = <?= json_encode($whatever) ?>;
</script>

如果你真的想在JSON中包含JSON作为字符串,考虑不要这样做。你可以只使用对象本身——不需要在JSON数据中使用JSON 字符串。但如果你有这个,它也应该总是有效的