On Nov 25, 2009, at 12:34 PM, Adam Barth wrote:

On Wed, Nov 25, 2009 at 12:30 PM, Maciej Stachowiak <[email protected]> wrote:
On Nov 25, 2009, at 6:05 AM, Adam Barth wrote:
Maybe we should have a DOM API called
webkitJailChildren("no-script-for-you") on Node that prevents future
children from running script.  Making it a DOM API prevents authors
from trying to turn the feature on with markup.

Interesting idea. This seems potentially trickier to implement than just innerStaticHTML, since nearly every method that mutates the DOM will have to
check jail status. innerStaticHTML could be limited in scope to only
operations that happen as part of parsing.

Instead of checking every DOM mutation, we could just walk the parent
pointers before executing a script to see if an ancestor is jailed.


A few thoughts:

1) Presumably we'd want to block instantiation of plugins and Java applets too, or the scripting restriction becomes toothless. Perhaps also iframes, unless the scripting restriction is intended to propagate across frame boundaries.

2) Capturing all points at which script execution occurs and tracing them back to the originating element may be tricky. javascript: URIs are one potentially subtle example. By the time the JavaScript for those gets executed, I believe we no longer know the originating element, the way the code is currently structured.

3) It seems like the rule "don't execute JS" might not be quite what is desired, since it would (presumably) prevent the parent itself from using event listeners on nodes in the jail. IMO the best treatment for event listeners would be to prevent them from being created by attributes, rather than to prevent them from executing.

4) Do we need to strip or rename id, name and class values to prevent interference with the containing page's use of getElementById() and such? Caja does.

Regards,
Maciej

_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to