有没有办法完全禁用java反序列化?
java.io.ObjectInputStream
中的 Java 反序列化可能会通过反序列化所谓的序列化小工具使应用程序面临安全问题。
我没有故意使用java序列化,但是很难确保任何受外部输入信任的库都不会执行反序列化。出于这个原因,我希望有某种终止开关来完全禁用序列化。
这与缓存问题不同 - 我想确保我的应用程序中没有对象被反序列化,包括通过库。
最佳答案
防止反序列化的一个简单方法是定义一个积极的反序列化过滤器(通过 JEP 290 在 Java 9 中引入)。
例如,对于java -Djdk.serialFilter=maxbytes=0 MyApp
,任何反序列化尝试(字节流大小> 0字节)都会抛出java.io.InvalidClassException:过滤器状态:拒绝
异常。
或者您可以使用 maxrefs=0
,或者简单地使用通配符排除所有类,即 java -Djdk.serialFilter=!* MyApp
或 java - Unix 上的 Djdk.serialFilter='!*' MyApp
其中“!”需要转义。
关于java - 完全禁用 Java 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51099078/