BT

オブジェクトのデシリアライゼーションフィルタがJava 9からバックポートされる

| 作者: Abraham Marín Pérez フォローする 9 人のフォロワー , 翻訳者 阪田 浩一 フォローする 1 人のフォロワー 投稿日 2017年3月30日. 推定読書時間: 3 分 |

原文(投稿日:2017/03/28)へのリンク

JEP 290は、オブジェクトをデシリアライズする際に入ってくるデータをフィルタできるようにするものである。当初はJava 9を対象としていたがJava 6と7、8にバックポートされる。この機能は処理されているオブジェクトの入力ストリームにおいて入ってくるデータをフィルタするメカニズムを提供する。またしばらく前にApache Commonsと他のライブラリに影響したもののようなデシリアライゼーションの脆弱性を防ぐ手助けができる。

信頼されないデータのデシリアライゼーションはとくにOpen Web Application Security Project (OWASP)とCERTオラクルJavaコーディング標準 (とくにルールSER12-JSER13-J)で挙げられたリスクであると一般に知られている。ソフトウェア開発者はObjectInputStreamに入ってくるデータが有効か、つねにチェックしなければならない。しかし、JDKにある既存のツールは必ずしもこれを簡単にさせてくれない。JEP 290はObjectInputStreamの拡張を必要とせず入ってくるデータをフィルタする手段を提供して改善する。これはいくつかのメカニズムを通じて実施される。数は開発者がどの程度関わる必要があるのかに依存する。

基礎レベルでは、開発者はシステムプロパティjdk.serialFilterまたはconf/security/java.propertiesにあるセキュリティプロパティjdk.serialFilterを修正することでデフォルトのObjectInputFilterを設定できる。これらのプロパティは1つ以上のクラスを確認するため、もしくはデシリアライズされるオブジェクトのプロパティにおける制限を設定するために使うパターン(Antのファイルパターンに類似したシンタックスを使っている)を受け取る。

// reject deserialisation of any class belonging to untrustedmodule,
// and of any array with more than 500 items in it
jdk.serialFilter=!untrustedmodule/.**;maxarray=500 

// white-list classes from package com.myorg.trusted,
// but not necessarily from its subpackages.
jdk.serialFilter=com.myorg.trusted.* 

より柔軟性が必要なら、開発者は独自のアクションやチェックを指定できる。独自のObjectInputFilterを実装し、それを既存のObjectInputStreamsetObjectInputFilterを使って適用する。ObjectInputFilterObjectInputFilter.FilterInfoで利用できる情報を現在デシリアライズしているオブジェクトを受け入れられるか、拒否する必要があるかどうか、もしくはフィルタが決定に十分な情報を持っているかどうかを決定するために使うことができる。後者の場合、独自フィルタは未決定としてステータスを残し、決定を別のユーザ定義フィルタに、もしくはデフォルトのシステムフィルタに移譲することができる。

最後に、もし開発者が全デシリアライゼーションに独自メカニズムを使いたいなら、ObjectInputFilter.Config.setSerialFilterを使ってユーザ定義フィルタをシステムデフォルトとして割り当てることができる。

最初に述べたように開発者はJava 9まで待つ必要がなく、シリアライゼーションにフィルタを適用し始められる。JEP 290はJava 8のアップデート121とJava 7のアップデート131、Java 6のアップデート141で利用できる。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT