首页 > 解决方案 > 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");

标签: javasecurityjmsibm-mq

解决方案


基于 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 {}
}

推荐阅读