Java GSON漏洞或利用反序列化来避免

Java GSON漏洞或利用反序列化来避免,java,security,gson,defensive-programming,Java,Security,Gson,Defensive Programming,我计划使用gson的fromJson()方法来解析来自浏览器的字符串。是否存在与此相关的任何潜在漏洞?我要转换的数据类型相对简单,一个列表和一个布尔值。但既然gson使用反射,我有什么需要注意的吗 例如,对于较旧的jvm(6.24之前),可能会对整数使用DOS攻击,而整数解析器将挂起 一些聪明的json会导致gson开始加载它应该是的类吗?使用gson需要注意的是您使用的构建器的类型(请参阅自定义反序列化器/序列化器) Gson还有另一个缺点,当您进行反序列化时(比如说使用自定义的),您最好检查

我计划使用gson的fromJson()方法来解析来自浏览器的字符串。是否存在与此相关的任何潜在漏洞?我要转换的数据类型相对简单,一个列表和一个布尔值。但既然gson使用反射,我有什么需要注意的吗

例如,对于较旧的jvm(6.24之前),可能会对整数使用DOS攻击,而整数解析器将挂起


一些聪明的json会导致gson开始加载它应该是的类吗?

使用gson需要注意的是您使用的构建器的类型(请参阅自定义反序列化器/序列化器)

Gson还有另一个缺点,当您进行反序列化时(比如说使用自定义的),您最好检查要传递的对象的类型(使用instanceof)

其他要点:Gson将根据传递的类型自动转换变量

即{“var1”:1,“var2”:“1”}
第一个将被转换为整数,第二个将被转换为字符串,因此我会注意对象的转换。

编写JSON解析器并不难,任何使用良好的开源版本都应该是安全的。当然,解析器可能包含一个bug,使其受到缓冲区溢出等问题的影响,但是,同样,逻辑非常简单,如果代码编写得相当好,并且经过了良好的审查,就不应该发生这种情况


一个更大的危险是,您自己可能无法正确地检查解析结果并接受(例如)超出应用程序范围的数字或过长的字符串。

出于安全原因,一位Gson项目开发人员建议不要让反序列化代码加载用户指定的类定义——应小心控制泛型类型的反序列化。

-1重新设计wheal是程序员可能犯的最严重的错误。我不是在提倡重新设计任何东西(尤其是a)--只是说代码并不难,所以没有特别的理由去期待错误(除了程序员会出错这一事实)。然而,还有比“重新发明轮子”更糟糕的编程违规行为。@Rook——我个人编写了一个JSON解析器(对于Qt,没有开源选项)。一天下午我花了几个小时。520行代码。但那不是我的重点。我的观点是,这不是复杂的代码(因为你显然认为是一个白痴可以做),如果在其创建过程中采取合理的小心,那么安全漏洞就不太可能了。因此,OP不必担心GSON中可能存在的安全漏洞,而应该担心其代码的其他部分。@HotLicks:“这不是复杂的代码[…],如果在创建过程中采取合理的谨慎措施,那么就不太可能出现安全漏洞。”。这听起来很像著名的遗言……解析JSON并不像看上去那么容易: