Как встроить интерпретатор Python на веб-сайт


Я пытаюсь построить образовательный сайт кодирование, аналогичное Codecademy, но я честно говоря в растерянности относительно того, какие шаги следует предпринять. Могу ли я быть направлен в правильном направлении, включая даже простой интерпретатор python в веб-приложение?

4 11

4 ответа:

Одним из вариантов может быть использование PyPy для создания изолированного python. Это ограничило бы внешние операции, которые кто-то мог бы сделать.

Как только вы это настроите, ваш сайт возьмет исходный код, отправит его через ajax на ваш веб-сервер, и сервер выполнит код в подпроцессе изолированного экземпляра python. Вы также сможете убить процесс, если он займет больше, чем, скажем, 5 секунд. Затем вы возвращаете выходные данные обратно в качестве ответа клиенту.

Смотрите эти ссылки для помощь на Пыпи sandbox:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

Для создания полностью интерактивного REPL было бы еще сложнее. Вам нужно будет поддерживать интерпретатор для каждого клиента на вашем сервере. Затем примите ajax "линии" ввода и запустите их через interp, связавшись с запущенным процессом, и верните выходные данные.

В целом, не тривиально. Вам понадобится немного сильные навыки Дэва, чтобы сделать это комфортно. Вы можете найти эту задачу немного сложной, если вы только учитесь.

Есть больше, чтобы сделать здесь, чем вы думаете.

Главная проблема заключается в том, что выне можете позволить людям запускать произвольный код Python на вашем веб-сервере. Например, что произойдет, если они сделают

import os
os.system("rm -rf *.*")

Поэтому ясно, что вы должны безопасно запустить этот код Python. Но тогда у вас есть проблема защиты Python, которая в принципе невозможна из-за того, насколько она динамична. И поэтому вам, вероятно, придется запускать оболочку Python на виртуальной машине, которая поставляется со своей собственной головная боль.


Видели ли вы напр.http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=?

Одним из последних вариантов для этого является использование repl .

Эта опция является удивительной, потому что компиляторы сделаны с использованием JavaScript, поэтому компиляция и выполнение выполняются на стороне пользователя , что означает, что сервер свободен от уязвимостей.

У них есть компиляторы для: Python3, Python, Javascript, Java, Ruby, PHP...

Я настоятельно рекомендую вам проверить их сайт по адресу http://repl.it

Загляните в контейнеры LXC. У них есть довольно классный api, который можно использовать для создания легких контейнеров linux. Вы можете запустить команды подпроцесса внутри этого контейнера, чтобы конечный пользователь не мог связываться с вашим главным сервером.