7.3. 控制 Jakarta Messaging ObjectMessage Deserialization


由于 ObjectMessage 可以包含潜在的危险对象,ActiveMQ Artemis 提供了一个简单的类过滤机制,以控制哪些软件包和类值得信任且不被信任。您可以将其类从可信软件包中的对象添加到白名单,以指明它们可以无问题地进行非序列化。您可以将其类从不受信任的软件包添加到黑列表中的对象,以防止它们被反序列化。

ActiveMQ Artemis 过滤对象以进行反序列化,如下所示:

  • 如果白名单和黑名单都为空(默认值),则允许任何可序列化的对象进行反序列化。
  • 如果对象的类或软件包与黑名单中的某一条目匹配,则不允许进行反序列化。
  • 如果对象的类或软件包与白名单中的条目匹配,则允许进行反序列化。
  • 如果对象的类或软件包与黑名单和白名单中的条目匹配,则黑名单中的条目具有优先权,这意味着不允许进行反序列化。
  • 如果对象的类或软件包都不匹配黑名单或白名单,则拒绝对象降序化,除非白名单为空,否则没有指定白名单。

如果对象全名与列表中的某一条目完全匹配,或者其软件包与列表中某一条目匹配,或者是列表中某一条目的子软件包,则对象被视为匹配项。

您可以使用 deserialization- white-list 和 deserialization- black-list 属性 ,在 connection-factory 和 pooled-connection - factory 中指定哪些对象可以被反序列化deserialization-white-list 属性用于定义允许进行反序列化的类或软件包的列表。deserialization-black-list 属性用于定义不允许进行反序列化的类或软件包的列表。

以下命令为 RemoteConnectionFactory 连接工厂创建一个黑名单,并为默认服务器创建 activemq-ra 池连接工厂的白名单。

/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=deserialization-black-list,value=[my.untrusted.package,another.untrusted.package])
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=deserialization-white-list,value=[my.trusted.package])
Copy to Clipboard Toggle word wrap

这些命令在 messaging-activemq 子系统中生成以下配置:

<connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1" deserialization-black-list="my.untrusted.package another.untrusted.package"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" deserialization-white-list="my.trusted.package" transaction="xa"/>
Copy to Clipboard Toggle word wrap

有关连接工厂和池连接工厂的详情,请参考本指南中的 配置连接工厂

您还可以通过配置激活属性在 MDB 中指定哪些对象可以被反序列化。deserializationWhiteList 属性用于定义允许进行反序列化的类或软件包的列表。deserializationBlackList 属性用于定义不允许进行反序列化的类或软件包列表。如需有关激活属性的更多信息,请参阅为 JBoss EAP 开发 Jakarta 企业 Bean 应用 时使用 部署描述符配置 MDB

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat