0

json我正在用 Django 编写一个 Python 应用程序,并使用 Python 的标准库将对象与 JSON 序列化。

我听说过类似的事情

任何序列化器/反序列化器/解析器都是对应用程序的潜在安全威胁

在服务器端真的是这样吗?我是否需要担心有人将篡改的 JSON 发送到我的实例并且他们具有远程代码执行权限?我认为除了(可能)XSS 或 SQL 注入之外不会有任何安全威胁,在我的情况下(将值转换为整数,将所有数据存储在 MongoDB 中)不应该是这种情况。

我是否应该对解析来自客户端的 JSON 数据感到偏执?

4

6 回答 6

3

JSON 数据只能包含基本类型:字符串、数字、布尔值、null、对象和列表。这意味着正确格式化的 JSON 数据不会对您的应用程序造成任何风险,除非您正在做一些愚蠢的事情,例如使用eval().

因此,如果有效的 JSON 不是问题,那么问题就变成了“客户端是否可以发送任何在 Python 的 json 模块处理时构成安全风险的无效数据”。这里的答案也是否定的,Python 的 json 模块会可靠地为无效的 json 数据引发 ValueError,而不会产生可怕的副作用。

于 2013-11-08T23:18:06.883 回答
1

一般来说,这种宣传是正确的,但取决于解析器及其开发人员的安全启用/意识如何。该json模块本身已经过很长时间的审查,并且不会做任何会危及服务器安全的事情。

于 2013-11-08T23:12:43.907 回答
0

是的。你应该是偏执狂。仅仅因为解析器是受信任的并不意味着你不能搞砸。

于 2013-11-08T23:29:26.643 回答
0

好吧...接受任何用户输入都有潜在的危险,尤其是在使用您不太了解的外部库时。例如,通过向其提供定制数据,将所有迭代引导至 O(n²),可以很容易地演示如何将实施不佳的快速排序算法用于拒绝服务攻击。这是否意味着排序算法很危险?不,这意味着任何事情的糟糕实施都可能是危险的。

显然,您应该估计危险和好处,并据此选择采用什么。坦率地说,如果您正在从事的项目中使用 3rd 方 json 实现的潜在风险是一个安全问题,那么您就不会在 Stack Overflow 上询问它。

于 2013-11-08T23:31:12.563 回答
0

任何序列化器/反序列化器/解析器都是对应用程序的潜在安全威胁

只要您自己编写序列化器/反序列化器/解析器,在服务器端就是如此。

只要您使用标准库,您就可以信任它的程序员。

于 2013-11-08T23:14:54.763 回答
0

你永远不知道解析器在里面做了什么。解析本身就是一种可能的安全威胁,尽管开发人员会尽力避免它。

对于一个开发了很长时间的稳定库来说,几乎没有危险。

于 2013-11-08T23:15:01.903 回答