Как безопасно «оценить» пользовательский код на веб-странице?

Я работаю над веб-приложением, чтобы обучать концепциям программирования. На веб-страницах есть текст о концепции программирования, а затем пользователь может ввести код javascript в окно текстового редактора, чтобы попытаться решить проблему программирования. Когда пользователь нажимает «отправить», я анализирую набранный им текст, чтобы увидеть, решили ли они проблему. Например, я прошу их «написать функцию с именем f , которая добавляет три к своему аргументу».

Вот что я делаю для анализа текста пользователя:

  1. Запустите JSLint для текста со строгими настройками, в частности без использования функций браузера или консоли.
  2. Если есть какие-либо ошибки, показать ошибки и остановить.
  3. eval (usertext);
  4. Перебрать условия для передачи присваивания, eval (условие) . Пример условия - "f (1) === 4" . Условия получены из надежного источника.
  5. Показать условия прохождения / отказа.

Мои вопросы: достаточно ли этого для предотвращения проблем с безопасностью? Что еще я могу сделать, чтобы стать параноиком? Есть ли лучший способ сделать то, что я хочу?

Если это уместно, мое приложение находится в Google App Engine с бэкэндом Python, использует JQuery, имеет индивидуальные учетные записи пользователей.

11
задан Nathan Whitehead 15 July 2011 в 23:08
поделиться