Среда для битвы ботов

игры Программирование ИИ

Собственно вопрос на счёт исполнения присылаемого кода.
Есть клиент в виде java-апплета, с которого отсылается код. Сервер должен скомпилировать его и прислать обратно байт-код, или же исполнить и прислать обратно результат. Вот как реализуются подобные системы?

Если посоветуете подключать принятый код в виде модуля, компилить и исполнять его. То как в таком случае обезопаситься от вредоносного кода?

На каком языке написан код - не важно. Хотя хотелось что бы это были плюсы или java.

Примечание:
Возьму компилятор, к примеру от visual studio, и просто удалю все ненужные(опасные) библиотеки.
Кто-нибудь может обойти подобную защиту?

Примечание:
>На дополнение #1:
>Это в принципе неверный подход, так как, например, элементарно пишется простейшая программа, вызывающая утечку памяти
Согласен. А если так:
Есть основная программа, которая получив код, запускает связку из полученного кода и программы к которой он относится. И если та завершается с кодом ошибки, равном утечки памяти, основная программа шлёт юзера куда подальше.

Примечание:
>Ant1973
>На дополнение #2: ...
Эх, чую работы будет не мало.
Подскажите тогда с чего начать, а то еще не имел дело с "виртуальными managed-средами".
Ответы:
Очевидно, что принятый код должен исполняться в виртуальной среде, тогда при правильной реализации вредоносный код просто невозможен. В частности, виртуальная среда может иметь свою собственную систему команд, в общем случае, совершенно произвольную и несовместимую с системой команд хост-системы.
На дополнение #1:
Это в принципе неверный подход, так как, например, элементарно пишется простейшая программа, вызывающая утечку памяти и в итоге спустя какое-то время вся ваша система падает; или банально — без утечек — занимающая всю память, что опять же чревато падением Вашей основной программы.
На дополнение #2:
В общем случае, это проблему не решит. Во-первых, утечка памяти сама по себе не оставляет кода ошибки, она лишь постепенно приводит к другим проблемам (м.б., весьма разнообразным). Во-вторых, утечка памяти — это не единственный возможный сценарий, и предусмотреть все возможные вряд ли удастся.
Продолжаю настаивать на том, что единственный реальный вариант — это некая виртуальная managed-среда, где у программ нет никакой возможности получить доступ к ресурсам внешней среды. :)
Вот с практическими советами затрудняюсь...
Может быть, имеет смысл посмотреть в сторону существующих виртуальных машин, того же VMWare, к примеру? Загонять туда программы, и даже если программа умудрится крэшнуть всю систему, то ее можно просто восстановить из снэпшота (собственно, это можно делать штатно, перед каждым новым запуском).
Но все плюсы и минусы такого подхода оценить не берусь. Например, не уверен, будет ли приемлемой потеря производительности, ведь, по сути, будет эмулироваться полностью операционная система, что, в принципе, для такой задачи излишне. С другой стороны, это явно проще, чем писать свою виртуальную машину с нуля... В общем, не знаю. :)


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.