unserialize関数の第2引数($options)


$_SESSIONにシリアライズ化したオブジェクトを保存して、別の場所でデシリアライズしていたところ
PhpStormに第2引数を指定しろと言われた。

PHP7.0からは第2引数でデシリアライズの対象となるクラスを指定できるらしい。

$foo = unserialize($_SESSION['foo'], ['allowed_classes' => ['Foo']]);

こう書けばおこられない。

オブジェクトインジェクションていう脆弱性の対策みたい。
https://blog.tokumaru.org/2017/09/introduction-to-object-injection.html

追記

class Foo
{
   private $bars= [];

   public function add(Bar $bar)
   {
       $this->bars[] = $bar;
   }
}

第2引数で指定したクラスの中で別のクラスを使用している場合には
デシリアライズする際にエラーになった。
まぁそんな気はしてた。

$foo = unserialize($_SESSION['foo'], ['allowed_classes' => ['Foo', 'Bar']]);

第2引数で同じように指定すれば大丈夫。