java - 反序列化代码安全

标签 java security serialization deserialization

我有一个网络服务器,可以检索从小程序发送的序列化图像。 反序列化代码如下:

  //Http request from applet that contains serialized image 
  in = request.getInputStream();
  inputFromApplet = new ObjectInputStream(in);
  byte[] sendimage = (byte[]) inputFromApplet.readObject();
  //image is created then using byte[]

此代码是否容易受到反序列化攻击? 谢谢。

最佳答案

我同意目前的评论。但使用的 ObjectInputStream 可能存在一个特殊问题。 .readObject() 方法将返回的对象的类型是从给定的序列化中检索的。

恶意请求可能包含意外对象的序列化。然后,ObjectInputStream 将读取此数据并

Classes [...] [will be] loaded as required using the standard mechanisms.

因此可能会出现以下问题:

  • 一个简单的 ClassCastException
  • 您的应用程序速度变慢,并且每个加载的类都需要更多内存
  • 实例化期间可能会调用类构造函数中包含的恶意代码
  • 类初始化程序(如果有)中包含的恶意代码可能会在实例化期间被调用

最后两件事发生的概率非常低。这是具有此类代码的必需类,必须在您的类路径上可用。

关于java - 反序列化代码安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35204488/

相关文章:

java - 用空格分割字符串

java - 从智能手机上的命令行终端测试 Android NDK

java - setOnClickListener(this) 的性能注意事项

java - 使用反射调用随机方法

javascript - 比较 NodeJS 缓冲区同时避免时序攻击

.net - 保护.NET框架

c# - 如何保护 dll 功能不被我的应用程序外部使用?

php - 如何在 MySQL 中更新序列化数据

c# - 将类设为可序列化的缺点

linq-to-sql - 返回 Entity Framework 中的普通对象以进行序列化