On Aug 29, 2013, at 1:39 PM, Kevin Reid wrote:

> On Thu, Aug 29, 2013 at 12:56 PM, Allen Wirfs-Brock <[email protected]> 
> wrote:
> On Aug 29, 2013, at 10:51 AM, Kevin Reid wrote:
>> This is a hazardous change for SES-style security. For example, I've just 
>> taken a quick look at our (Caja) codebase and found a place where 
>> Array.prototype.slice.call(foo) is used to obtain a “no funny business” 
>> array (i.e. doesn't have side effects when you read it) and another where 
>> it's used to obtain an array which must be in the caller's realm. These 
>> would be easy enough to replace with a more explicit operation, but I wanted 
>> to point out that this is not a harmless change.
> 
> In the Array.prototype.slice.call(foo) use case what is foo? Is it known to 
> be an Array?  Are you saying this is how you clone an Array?
> 
> Sorry, both are of that form, if I was unclear. When we want to simply clone 
> an existing array, belonging to a secured realm, I think we generally use 
> slice as a method, and there is no security property there.
> 
> Of the two cases I refer to, one is a function (the trademarking stamp()) 
> which takes a list of objects as a parameter and needs to ensure that 
> successive stages of processing operate on exactly the same set of objects 
> and do not trigger any side effects in the list's implementation. Here, realm 
> is irrelevant but the list's implementation must be relied on, so in practice 
> we want an Array from stamp()'s own realm.
> 
> The other case is one where it is a cross-frame protocol and we specifically 
> want an object which belongs to 'our own' realm because its prototypes are 
> frozen and specially extended, whereas the calling realm's prototypes notably 
> are not frozen (it's outside of the shiny happy sandbox) and therefore 
> constitute a risk to least-authority programming which we want to stop at the 
> boundaries. (Note for MarkM: It's actually a little bit more complicated than 
> this, but the details are irrelevant to the principle.)
> 

for both cases, are you using Array.isArray to determine that you are operating 
upon an array?

what would be the appropriate thing to happen (all things considered) in a 
world where subclasses of Array exist?

Allen

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to