Как бы вы заблокировали приложение Google App Engine, выполняющее ненадежный код? - PullRequest
2 голосов
/ 30 января 2010

В настоящее время мы используем Google App Engine для оценки решений проблем Python, представленных студентами. Мы переместили выполнение всего ненадежного кода в отдельное приложение GAE, которое не использует хранилище данных. Кажется, все работает нормально для 50+ загруженных нами проблем, но мне любопытно, какие дыры в безопасности остаются, которые найдут трудолюбивые студенты. Как мы можем далее защитить этот код от ненадежного кода, который он исполняет в GAE?

#The solution and doctest are untrusted code passed in to the GAE app. 
solution = 'b=5'
doctest = '>>> b \n 5'

#Compile and exec the untrusted solution provided by the user. 
compiled = compile(solution, 'submitted code', 'exec')
sandbox = {}
exec compiled in sandbox

#Compile and exec each of the doctests
test_cases = doctest.DocTestParser().get_examples(doctest)
for test in test_cases:
  if not test.want:
    exec test.source in sandbox

1 Ответ

3 голосов
/ 30 января 2010

Посмотрите на источник shell.appspot.com - он даже использует хранилище данных (для сохранения сеанса). По сути, он просто делает просто exec, как и вы - есть и другие улучшения, но ничего особенного относительно «блокировки» ненадежного кода. Предположительно, инженеры Google (из команды App Engine), выпустившие этот пример кода, чувствуют себя очень хорошо в отношении его защиты от ненадежного кода.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...