java - JMS安全问题中不可信数据的反序列化
问题描述
我正在使用 bean 在我的 Java EE 应用程序中发送邮件。我的邮件发送类是通过 xDoclet 生成的。类代码如下
public void onMessage(javax.jms.Message message) {
MapMessage mapMsg = (MapMessage) message;
String toEmailAddress = mapMsg.getString("toAddress");
String ccEmailAddress = mapMsg.getString("ccAddress");
String from = mapMsg.getString("from");
String subject = mapMsg.getString("subject");
String content = mapMsg.getString("body");
}
现在,我在这个类的 checkmarx 中遇到了一些安全问题,例如 - Deserialization of Untrusted Data in JMS at lines
String toEmailAddress = mapMsg.getString("toAddress");
String ccEmailAddress = mapMsg.getString("ccAddress");
解决方案
基于 JMS 中对 Untrusted Data 的反序列化的 Checkmarx 查询,在强制转换时添加 try catch 块并检查消息是否不是 ObjectMessage 的实例:
public void onMessage(javax.jms.Message message) {
try {
if !(message instanceOf ObjectMessage){
MapMessage mapMsg = (MapMessage) message;
String toEmailAddress = mapMsg.getString("toAddress");
String ccEmailAddress = mapMsg.getString("ccAddress");
String from = mapMsg.getString("from");
String subject = mapMsg.getString("subject");
String content = mapMsg.getString("body");
}
}
catch {}
finally {}
}
推荐阅读
- python - 在 python 中将 mXnXk 矩阵绘制为 3d 模型
- android - 最初设置后无法更改应用栏标题的可见性
- python - 我正在尝试编写一个正则表达式来捕获特定的单词替换它
- dart - Dart 隔离 SendPort 和 ReceivePort 发送 100 次,反之亦然
- postgresql - 我应该如何在 Postgres 中存储 Go 的 time.Location?
- sql - 如何检查重复的 CLOB - Oracle?
- python - 旋转框小部件内的变量,可在单击按钮小部件时显示在 LCD 小部件中
- reactjs - 如何计算渲染函数中的行数?
- c# - 如何在 GetEnumerator 中返回动态实体
- sql - 在 SQL Developer 的脚本中传递和使用参数