Re: Unserializes, inheritance and allows_classes

From: Date: Fri, 18 Jan 2019 00:53:03 +0000
Subject: Re: Unserializes, inheritance and allows_classes
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-103759@lists.php.net to get a copy of this message
On Fri, Jan 18, 2019 at 1:50 AM Marcos Passos <marcospassos.com@gmail.com> wrote: > Hi Marco, > > Also: nothing denies an attacker from defining a subtype to your class, >> then passing a malicious instance to your application. > > > Fact, but it also reveals a fragility in the solution in the sense that > one has to opt between flexible design or security. > > Em qui, 17 de jan de 2019 às 22:24, Marco Pivetta <ocramius@gmail.com> > escreveu: > >> >> On Fri, Jan 18, 2019 at 12:49 AM Marcos Passos < >> marcospassos.com@gmail.com> wrote: >> >>> Hi internals, >>> >>> Today I stumbled upon a limitation when implementing the unserialize >>> method >>> of a serializable class which depends on an abstraction also >>> serializable. >>> Currently, there is no way to unserialize an object specifying a parent >>> class in the allowed_classes option: >>> >>> class SerializableBase implements \Serializable { >>> > } >>> > class SerializableChild extends SerializableBase { >>> > } >>> > class Foo implements \Serializable { >>> > private $dependency; >>> > public function __construct(SerializableBase $dependency) { >>> > $this->dependency = $dependency; >>> > } >>> > public function serialize() : string { >>> > return \serialize($this->dependency); >>> > } >>> > public function unserialize($data) : void { >>> > $this->dependency = \unserialize($data, ['allowed_classes' >>> > => >>> > SerializableBase::class]); >>> > } >>> > } >>> >>> >>> Is this an intentional limitation? >>> >>> >> Seems expected to me: allowed_classes is a whitelist, not a >> complex >> filter/ruleset. >> >> Also: nothing denies an attacker from defining a subtype to your class, >> then passing a malicious instance to your application. >> >> Marco Pivetta >> >> http://twitter.com/Ocramius >> >> http://ocramius.github.com/ >> >> > Security is not a choice. The design is not fragile, it is strict and correct. Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/

« previous php.internals (#103759) next »