> Hi François, your goals here have a 
> tremendous overlap with SES. In what
> ways is SES not satisfactory for
> these purposes?

Sorry for the late reply, I did take some time investigating SES and the 
implications. Basically, it seems SES provide the required guards in this case 
(untouched + read-only globals, direct eval only). I'm not quite sure it has 
this notion of "stateless", however, that is required to be able to use the 
function safely.

What I mean by that is that the function should not be able to know in any way 
if it has been called before, or cloned, or anything. I'm pretty sure that SES 
does not give you that (but you can of course use it in a certain way that will 
guarantee you that).


The second thing I'm not sure SES provide you is the "everything here is wiped 
after the function returns" thing. By deep-cloning every object before any 
operation involving a host object, we create a layer that make sure the safe 
execution context cannot pollute in any way the parent context (for example via 
an object prototype yielding the Object.prototype inside the sandbox, or via a 
function and its scope).

|    function __SES_CODE__() {
|        var x = {value:0};
|        return function() { return x.value++; }
|    }
|    
|    // in this case, the return value in my proposal would be null
|    // because we can't clone the function without leaking
|    // some of the internal objects of the function.
|    // 
|    // however "return function() as serializable { return 0; }"
|    // would have been ok since we can clone the function.


The final remark is that SES seems to be a JavaScript-based sandbox. To fulfill 
my needs, I need a browser to be able to accept a JS function and know this 
function can be executed into a sandbox. 

|    SomeWebAnim.timingFunction = alert; // should throw, we cannot accept this 
because we can't report the error after

This means the sandbox has to be implemented in C++ because the browser itself 
does not trust JavaScript to enforce its security.


In conclusion, I believe a browser-implemented SES with a particular membrane 
deep-cloning/nulling outgoing values to prevent any insider object to reach the 
calling code is exactly what my proposal was all about, it's great to see some 
people did already work making sure the details would be right.

In my proposal, the "function() as serializable { ... }" syntax is nothing more 
than a way to create a stateless function that is meant to be executed in such 
a SES environment, and flagged as such. We could imagine any syntax for that, 
but I think eval'ing the source code of a function to recreate it is not what 
we should advocate for this use case.

Do my comments make sense to you?                                         
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to