我正在使用Django编写Python应用程序,并使用Python的标准json
库将对象与JSON序列化。
我听说过
的内容任何seralizer / deserializer / parser都是对应用程序的潜在安全威胁
这在服务器端是否真的如此?我是否需要担心有人将篡改的JSON发送到我的实例并且具有远程代码执行权限?我认为除了(可能)XSS或SQL注入之外不存在任何安全威胁,在我的情况下(将值转换为int,将所有数据存储在MongoDB中)不应该是这种情况。
我是否应该从这些解析来自客户端的JSON数据线路上偏执?
答案 0 :(得分:3)
JSON数据只能包含基本类型:字符串,数字,布尔值,空值,对象和列表。这意味着正确格式化的JSON数据不会对您的应用程序造成任何风险,除非您正在做一些愚蠢的事情,比如使用eval()
执行该代码。
因此,如果有效的JSON不是问题,那么问题就变成了#34;客户端是否可以发送任何在Python的json模块"处理时带来安全风险的无效数据。这里的答案也是否定的,Python的json模块将可靠地为无效的json数据引发ValueError,没有可怕的副作用。
答案 1 :(得分:1)
一般来说,blurb是正确的,但取决于解析器及其开发人员的安全性/意识如何。 json
模块本身已经过长时间的审查,并没有做任何会损害服务器安全性的事情。
答案 2 :(得分:0)
任何seralizer / deserializer / parser都是对应用程序的潜在安全威胁
只要您自己编写seralizer / deserializer / parser,就可以在服务器端实现。
只要您使用标准库,您就可以信任其程序员。
答案 3 :(得分:0)
你永远不知道解析器里面做了什么。解析本身是一种可能的安全威胁,尽管开发人员会尽力避免它。
对于已经开发了很长时间的稳定库,几乎没有危险。
答案 4 :(得分:0)
是。你应该是偏执狂。仅仅因为解析器是可信的并不意味着你不能搞砸。
答案 5 :(得分:0)
嗯...接受任何用户输入都是有潜在危险的,尤其是在使用您不熟悉的外部库时。例如,通过提供定制数据(将所有迭代引导到O(n²)),可以很容易地演示如何将快速排序算法实施得不好用于拒绝服务攻击。这是否意味着排序算法很危险?不,这意味着任何事情的执行都很糟糕。
显然,你应该估计危险和收益,并根据这个选择采用什么。坦率地说,如果你正在研究那种使用第三方json实现的潜在风险是安全问题的项目,你就不会在Stack Overflow上询问它。