java-反序列化不受信任的数据解决方案

java-反序列化不受信任的数据解决方案,java,security,serialization,deserialization,Java,Security,Serialization,Deserialization,去年,我们遇到了所谓的java对象反序列化漏洞(看起来不是java的问题),该漏洞是对对象进行反序列化,可能导致远程代码执行(RCE)或拒绝服务(DoS)攻击 有关详细信息,请参阅 基本上,如果代码无法验证传入对象,那么它就容易受到攻击 如中所述,此次攻击的影响相当大, 首先,攻击者使用来自Apache Commons Collections的InvokerTransformer类来构建攻击链 解决方案1:黑名单不接受用于构建小工具链的类 但是,这还不够,因为攻击链可以通过许多其他方式构建。参

去年,我们遇到了所谓的java对象反序列化漏洞(看起来不是java的问题),该漏洞是对对象进行反序列化,可能导致远程代码执行(RCE)或拒绝服务(DoS)攻击

有关详细信息,请参阅

基本上,如果代码无法验证传入对象,那么它就容易受到攻击

如中所述,此次攻击的影响相当大,

首先,攻击者使用来自Apache Commons CollectionsInvokerTransformer类来构建攻击链

解决方案1:黑名单不接受用于构建小工具链的类

但是,这还不够,因为攻击链可以通过许多其他方式构建。参考

解决方案2:Whitelisting通过使用“SecureObjectStream”覆盖ObjectStream,验证应用程序实际需要的类

同样,这并不能完全否定这些攻击。存在使用jre7u21的RCE和使用哈希集的拒绝服务攻击

解决方案3:关闭反序列化这是迄今为止最好的解决方案

问题:
在不能忽略反序列化的情况下,除了黑名单和白名单之外,是否有更好的方法在坏数据爆炸之前验证和停止坏数据?

一些不错的指导原则:可能使用json等传输格式,xml或协议缓冲区是另一种选择?解决方案4:仅接受来自可信来源的数据-可通过RSA/ECC签名进行验证。将commons collection jar更新为3.2.2版。@在这种情况下,只有解决方案3是安全的。Java序列化格式是移动代码,您永远不应该向世界公开代码执行接口。改为使用仅数据格式。