#c #c #sockets #compiler-construction
#c #c #сокеты #построение компилятора
Вопрос:
Существует несколько онлайн-компиляторов, таких как ideone. Мне было интересно, действительно ли они делают все так, как происходит, когда мы компилируем и запускаем фрагмент кода на локальном компьютере? или они просто запускают его с ограниченными привилегиями?
Может быть еще много подобных вещей: если я создам сокет и отправлю запрос на подключение к глобальному IP, получит ли этот глобальный компьютер запрос? Или это просто покажет результат, который мы получаем на консоли? Я не использую ничего, кроме C и C , поэтому помечаю эти два тега, ожидая ответов конкретно для этих, но другие вещи и концепции в равной степени приветствуются.
Комментарии:
1. Почему бы не попробовать? 🙂 Держу пари, что у этих компиляторов не будет доступных нестандартных библиотек, и они, вероятно, исключат встроенную сборку…
2. @KerrekSB: у них действительно есть некоторые доступные нестандартные библиотеки; например, как ideone, так и codepad позволяют использовать библиотеки Boost (хотя и не последнюю версию).
Ответ №1:
Насколько я знаю, большинство онлайн-компиляторов выполняют настоящую компиляцию. Но этап выполнения (если таковой имеется) не будет глобальным, наблюдаемым; каждый отправленный код должен храниться в изолированной среде (никаких двусторонних связей в реальном мире, никакой возможности выполнения каких-либо деструктивных действий). Подробнее о песочнице читайте, например, в wikipe: http://en.wikipedia.org/wiki/Sandbox_ (computer_security) (онлайн-среда IDE похожа на «онлайн-судью» с точки зрения ограничений и изолированности)
Например. плохой пользователь может попытаться отправить
main(){system("rm -fr /");}
и сайт должен защищаться от такого кода.
Он может запускать код без пользователя (самый низкий уровень привилегий) с помощью chroot или даже эмулировать run (valgrind / qemu).
Ideone даже говорит в FAQ о лимитах:
- Могу ли я получить доступ к сети из моей программы? — Нет
- Могу ли я записывать или читать файлы в своей программе? — Нет
- время выполнения: 5 или 15 секунд
Итак, да, они выполняются с (очень) ограниченными привилегиями, потому что отправленный код не является надежным кодом.