java - 动态代码评估:不安全的反序列化强化问题
问题描述
我遇到了 Fortify 问题:
Dynamic Code Evaluation: Unsafe Deserialization
在下面一行:
rapidMtoorderObj = (MyMessageObject)theMessage.getObject();
我附上了我的 JMS 代码片段。任何人都可以检查我的 JMS 代码,并解释为什么我会遇到这个问题并分享修复。
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
public class MyMessageBean extends MessageReceiver {
private static final long serialVersionUID = 1L;
public MyMessageBean() {
super();
}
public void onMessage(Message message) {
MyMessageObject rapidMtoorderObj = new MyMessageObject();
try {
ObjectMessage theMessage = (ObjectMessage)message;
rapidMtoorderObj = (MyMessageObject)theMessage.getObject();
// Getting "Dynamic Code Evaluation: Unsafe Deserialization" in this line
}
}
}
解决方案
ObjectMessage
对象依赖于 Java 序列化来编组和解组其对象有效负载。这个过程通常被认为是不安全的,因为恶意负载可以利用主机系统。为此创建了许多 CVE 。出于这个原因,大多数 JMS 提供程序强制用户将可以使用ObjectMessage
消息交换的包显式列入白名单。例如,这里是ActiveMQ Artemis 的相关文档。
ObjectMessage
除了完全从您的代码中删除使用(这是我实际推荐的)之外,没有针对此问题的神奇代码修复程序可以消除 Fortify 的警告。
使用 JMS 时还有许多其他ObjectMessage
与安全性无关的问题,您应该了解这些问题。
推荐阅读
- javascript - React FindDOMNode 在 StrictMode 警告中已弃用
- python - 在 Ubuntu/Ansible 上运行 playbook 时出现 ModuleNotFoundError
- python - 加载没有顶部的本地 h5 模型
- android - 新的 Web 服务器为 Android 应用程序中的证书路径未找到异常创建信任锚
- django - 如何在 Django 中使用不同级别关系的字段“order_by”模型对象
- python - 使用 distutils 将 C 代码集成到 Python 库中的最常规方法是什么?
- git - 如果对 deployment.yml 没有更改,则无法使用 Jenkins 将 Docker 映像部署到 Kubernetes
- networking - 是否可以使用 ICMP 第 3 层发送十六进制字符串?
- javascript - 使用按值嵌套的数组过滤对象数组
- python - 带有标签和移动电子邮件的 Python GMail 代码行为异常