2009-09-04 8 views
2

Я ищу, чтобы пользователи могли вводить JavaScript, чтобы указать некоторую логику в моем приложении. JavaScript будет введен и отображен в браузере, но сначала он будет сохранен и проверен на стороне сервера.Исправление на стороне сервера или песочница на стороне сервера?

Это открывает очевидные последствия для безопасности.

В идеале я хотел бы разрешить только подмножество языка JavaScript. Интуитивно, подход выбора - определение того, что разрешено, и отказ от всего остального - кажется более безопасным, чем подход отказа, - указывая, что запрещено.

Множество решений, которые я видел на стороне клиента - я думаю, что решение на стороне сервера имеет больше смысла для моих нужд, поскольку я могу дать отзыв пользователю, если JavaScript недопустим, и только сохранить его на сервере, когда он «чист».

Было бы также полезно приложить что-то для анализа JavaScript и выполнить некоторые проверки - например, я бы предоставил пользователю некоторые переменные, я бы хотел проверить, что они не используют какие-либо неинициализированные переменные, или что код возвращает что-то в ожидаемом формате. Решение для песочницы должно, по крайней мере, не мешать этому, но оно может потенциально активно помочь - если оно работает, анализируя код, а не только регулярные выражения, и я могу поместить свои собственные крючки, чтобы проверить некоторый синтаксис.

Google Caja выглядит так, как будто он может делать то, что я хочу, но я не очень нырнул в него.

Какой подход вы бы порекомендовали?

Отличные решения с открытым исходным кодом. Я не против писать свой собственный код, но это кажется простой задачей решить проблему с нуля.

ответ

1

Если вы не против оставлять браузеры, которые не поддерживают потоки веб-работников, вы можете попробовать JSandbox, что эффективно изолирует выполнение JavaScript в рабочих песочницах «sandbox».