Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Checkmarx错误:反序列化不受信任的数据_Java_Jms_Deserialization_Checkmarx_Validationmessage - Fatal编程技术网

Java Checkmarx错误:反序列化不受信任的数据

Java Checkmarx错误:反序列化不受信任的数据,java,jms,deserialization,checkmarx,validationmessage,Java,Jms,Deserialization,Checkmarx,Validationmessage,在接受JMS消息的onMessage()方法中,我在checkmarx扫描(在代码中查找与安全相关的漏洞)期间得到了不可信数据的反序列化: @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void onMessage(Message message) { log.debug("Code Run Started - In Queue"); if (message instanceof Obje

在接受JMS消息的onMessage()方法中,我在checkmarx扫描(在代码中查找与安全相关的漏洞)期间得到了不可信数据的反序列化:

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void onMessage(Message message) {
    log.debug("Code Run Started - In Queue");
    if (message instanceof ObjectMessage) {
        ObjectMessage objMes = (ObjectMessage) message;
        try {
            ChangeOperationType changeOperation = null;
            changeOperation = (ChangeOperationType) objMes.getObject();
        } catch (JMSException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            log.error("Message Type is incorrect (Not ChangeOperationType). ", e1);
        }
        try {
            callBackEndpoint = message.getStringProperty(CRMCommonProcessing.CALLBACK_ENDPOINT_URI_PROPERTY);
        } catch (JMSException e) {
            log.error("CALLBACK ENDPOINT VALUE ERROR. ", e);
        }
        change(changeOperation);
    } else {
        log.error("WRONG MESSAGE TYPE GIVEN");
    }
    log.debug("Code Run Complete - In Queue");
}

此问题的任何修复或解决方案?

ObjectMessage
对象(您在
onMessage()
方法中使用)依赖于Java序列化来封送和解封其对象负载。此过程通常被认为是不安全的,因为恶意负载可以利用主机系统进行攻击。已经为此创建了。出于这个原因,大多数JMS提供程序强制用户显式地列出可以使用
ObjectMessage
消息交换的包。例如,下面是相关的

对于这个问题,除了从代码中完全删除
ObjectMessage
之外,没有神奇的代码修复程序可以消除checkmarx中的警告(这是我实际建议的)。如果可能,为有效负载定义数据表示(JSON、protobuf、XML),并使用
javax.jms.TextMessage
javax.jms.ByteMessage
来携带它


使用JMS
ObjectMessage
还有许多其他问题与安全性无关,您也应该这样做。

那么,在这种情况下,我们应该在代码中使用什么来代替ObjectMessage呢?有什么建议吗?我当时没有评论,但我更新了我的答案以回应你的评论。如果我的回答针对您的问题,请将其标记为正确,以帮助将来可能有相同问题的其他人。谢谢