I'm not sure it makes much of a difference from a security point of
view.  I suspect WebKit does #3 because it grabs the security context
immediately before executing the script.  That actually seems
marginally safer because it means you're unlikely to grab an out-dated
security context.

Adam


On Fri, Sep 3, 2010 at 3:49 AM, Henri Sivonen <hsivo...@iki.fi> wrote:
> When evaluating a parser-inserted script, there are three potential script 
> global objects to use:
>  1) The script global object of the document whose active parser the parser 
> that inserted the script is.
>  2) The script global object of the document that owned the script element at 
> the time of invoking the "run" algorithm.
>  3) The script global object of the document that owns the script element at 
> the time of script evaluation.
>
> The spec says the answer is #3. WebKit (with HTML5 parser or without) says 
> the answer is #1. Firefox 3.6 says the answer is #2.
>
> I doubt that there are Web compat considerations forcing this choice, because 
> IE8 doesn't get as far as running the script in this case. IE9 tries to do 
> either #2 or #3 (not sure which) succeeding for inline scripts and failing 
> for external ones. (IIRC, the text in the spec that explains the distinction 
> between 1 and the other (without explaining the distinction between 2 and 3) 
> was added specifically for the benefit of the IE team.)
>
> The spec asserts that these options are equally safe, because if something is 
> able to move the scripts so that 1, 2 and 3 would result in different script 
> global objects, the script gets moved within one Origin.
>
> However, if there's something other than Same Origin restricting what scripts 
> are eligible for evaluation (e.g. Content Security Policies that I don't know 
> well enough to reason about), 1, 2 and 3 might not be equally safe.
>
> Questions:
>  * Is anyone aware of an existing or upcoming security mechanism that would 
> not make the three above cases equally safe--especially if e.g. the security 
> check was made according to #1 but the effective script global object were 
> chosen accoding to #3?
>  * Why does the spec say #3 when none of the browsers did #3 at the time of 
> spec writing?
>  * Are there use cases that favor any one of these in particular? (I doubt 
> it.)
>
> FWIW, my gut says we should do #1, since it is obviously secure, except it 
> would be unfortunate if the spec changed to #1 but too late for IE9 to match.
>
> --
> Henri Sivonen
> hsivo...@iki.fi
> http://hsivonen.iki.fi/
>

Reply via email to