java - 完全禁用 Java 反序列化

标签 java serialization

有没有办法完全禁用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=!* MyAppjava - Unix 上的 Djdk.serialFilter='!*' MyApp 其中“!”需要转义。

关于java - 完全禁用 Java 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51099078/

相关文章:

java - Java 中正确的继承体系结构

java库来确定程序在执行期间使用的CPU和内存

java - 使 Gson 行为依赖于深度

json - NSCoding 和 Codable 属性 <=> JSON 格式 <=>(读/写)文件

c# - DataContractJsonSerializer 抛出异常预期状态 'Element' .. 遇到 'Text' 名称 '',命名空间 ''

java - 如何以编程方式为 Imageview 设置双倍高度?

java - 获取某个类别的文档数量

java - 禁用 XMLInputFactory 中的功能安全处理

c# - 如何在自定义 System.Text.Json JsonConverter 中使用默认序列化?

android - 将下载的 JSON 数据缓存到 SQLite 数据库——这是个好主意吗?