有没有一种方法可以完全禁用Java反序列化?
java.io.ObjectInputStream
中的Java反序列化可能会通过反序列化所谓的序列化小工具来使应用程序面临安全问题。
我不是故意使用Java序列化,但是很难确保没有任何外部输入可信任的库永远不会执行反序列化。因此,我希望使用某种kill开关来完全禁用序列化。
这与缓存问题不同-我想确保在应用程序中(包括通过库)都不会反序列化任何对象。
答案 0 :(得分:2)
答案 1 :(得分:1)
防止反序列化的一种简单方法是定义一个积极的反序列化过滤器(通过 JEP 290 在 Java 9 中引入)。
例如对于 java -Djdk.serialFilter=maxbytes=0 MyApp
,任何反序列化尝试(字节流大小 > 0 字节)都会引发 java.io.InvalidClassException: filter status: REJECTED
异常。
或者您可以使用 maxrefs=0
,或者简单地使用通配符排除所有类,即 java -Djdk.serialFilter=!* MyApp
或 java -Djdk.serialFilter='!*' MyApp
在 Unix 上,其中“!”需要转义。