Как я могу поместить в песочницу ненадежный пользовательский контент JavaScript?

Мне нужно разместить на своем сайте пользовательские скрипты (вроде какjsfiddle). Я хочу, чтобы скрипты выполнялись в браузерах посетителей безопасным способом, изолированным от страницы, на которой они обслуживаются. Поскольку код предоставляется пользователями, нет никаких гарантий, что он заслуживает доверия.

Прямо сейчас я могу думать о трех вариантах:

Serve the user-submitted content in an iframe from a different domain, and rely on the same-origin policy. This would require setting up an additional domain which I'd like to avoid if possible. I believe this is how jsfiddle does it. The script can still do some damage, changing top.location.href for example, which is less than ideal. http://jsfiddle.net/PzkUw/ Use the sandbox attribute. I suspect this is not well supported across browsers. Sanitize the scripts before serving them. I would rather not go there.

Есть ли другие решения или рекомендации по вышеуказанному?

Update

Если, как я подозреваю, первый вариант является лучшим решением,what can a malicious script do other than change the top window location, and how can I prevent this? Я могу манипулировать или отклонять определенные сценарии на основе статического анализа кода, но этожесткий учитывая количество способов доступа к объектам и сложность статического анализа javascript в целом. По крайней мере, для этого потребуется полноценный синтаксический анализатор и ряд сложных правил (некоторые, но я подозреваю, что не все, из которых присутствуют в JSLint).

Ответы на вопрос(4)

Ваш ответ на вопрос