7.3. JMS ObjectMessage デシリアライズの制御

ObjectMessage には潜在的に危険性があるオブジェクトを含めることができます。そのため、ActiveMQ Artemis では信頼できるパッケージやクラスと信頼できないパッケージやクラスを管理するシンプルなクラスのフィルタリングメカニズムを提供します。信頼できるパッケージのクラスを持つオブジェクトをホワイトリストに追加することで、問題なくデシリアライズできることを示すことができます。信頼できないパッケージのクラスを持つオブジェクトはブラックリストに追加することで、デシリアライズされないようにすることができます。

ActiveMQ Artemis は以下のようにデシリアライズするオブジェクトをフィルターにかけます。

  • ホワイトリストおよびブラックリストの両方が空の場合 (デフォルト)、シリアライズ可能なオブジェクトはすべてデシリアライズできます。
  • オブジェクトのクラスまたはパッケージがブラックリスト内のエントリーのいずれかに一致する場合は、デシリアライズすることはできません。
  • オブジェクトのクラスまたはパッケージがホワイトリスト内のエントリーと一致する場合は、デシリアライズすることができます。
  • オブジェクトのクラスまたはパッケージが、ブラックリストとホワイトリストの両方のエントリーと一致する場合は、ブラックリスト内のクラスが優先されます。つまり、デシリアライズはできません。
  • オブジェクトのクラスまたはパッケージがブラックリストとホワイトリストの両方に一致しない場合は、ホワイトリストが空の場合 (ホワイトリストが指定されていない場合) を除き、オブジェクトデシリアライズは拒否されます。

オブジェクトのフルネームがリスト内のエントリーのいずれかと完全に一致する場合、そのパッケージがリストにあるエントリーのいずれかと一致する場合、またはこれがリスト内にあるエントリーのいずれかのサブパッケージである場合、オブジェクトは一致すると見なされます。

deserialization-white-list 属性と deserialization- black-list 属性を使用して、connection-factorypooled-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])

これらのコマンドにより、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"/>

接続ファクトリーとプールされた接続ファクトリーの詳細は、本ガイドの「接続ファクトリーの設定」を参照してください。

また、アクティベーションプロパティーを設定して、MDB でデシリアライズできるオブジェクトを指定することもできます。deserializationWhiteList プロパティーは、デシリアライズできるクラスまたはパッケージのリストを定義するために使用されます。deserializationBlackList プロパティーは、デシリアライズできないクラスまたはパッケージのリストを定義するために使用されます。アクティベーションプロパティーの詳細は、JBoss EAP 『Developing EJB Applications』の「Configuring MDBs Using a Deployment Descriptor」を参照してください。