Безопасно выполняющий отправленный пользователями код Python на сервере

<pre>&gt;</pre>

рендеринг как:

>

, Таким образом, Вы хотите:

<pre>
    PrimeCalc calc = new PrimeCalc();
    Func&lt;int, int&gt; del = calc.GetNextPrime;
</pre>

, который складывается как:

    PrimeCalc calc = new PrimeCalc();
    Func<int, int> del = calc.GetNextPrime;
9
задан SilentGhost 15 November 2009 в 13:28
поделиться

4 ответа

В современном Linux в дополнение к chroot (2) вы можете дополнительно ограничить процесс, используя clone (2) вместо fork (2). Есть несколько интересных флагов clone (2):

CLONE_NEWIPC (new namespace for semaphores, shared memory, message queues)
CLONE_NEWNET (new network namespace - nice one)
CLONE_NEWNS (new set of mountpoints)
CLONE_NEWPID (new set of process identifiers)
CLONE_NEWUTS (new hostname, domainname, etc)

Ранее эта функциональность была реализована в OpenVZ, а затем слита в апстриме, так что больше нет необходимости в исправленном ядре.

3
ответ дан 4 December 2019 в 22:28
поделиться

Если вы запустите скрипт от имени пользователя nobody (в Linux), он не сможет писать практически никуда и не читать данные, для которых правильно настроены права доступа. Но он все равно может вызвать DoS-атаку, например:

  • заполнение / tmp
  • съедает всю оперативную память
  • съедает весь ЦП

Кроме того, внешние сетевые соединения могут быть открыты и т.д. Вы, вероятно, можете заблокировать все это ограничениями ядра, но вы обязательно что-то забудете.

Поэтому я думаю, что виртуальная машина без доступа к сети или реальному жесткому диску будет единственным (разумно) безопасным путем. Возможно, разработчики Python Challenge используют KVM , который, в принципе, «предоставляется операционной системой».

Для повышения эффективности вы можете запускать все представления в одной виртуальной машине. Это сэкономит вам много накладных расходов,

2
ответ дан 4 December 2019 в 22:28
поделиться

Использование chroot ( Википедия ) может быть частью решения, например, в сочетании с ulimit и некоторыми другими общими (или пользовательские) инструменты.

0
ответ дан 4 December 2019 в 22:28
поделиться

То, что предложил @ bialix, должно было сработать, но попробуйте альтернативный способ подключения:

class Foo(QtCore.QObject):
    mysignal = QtCore.pyqtSignal(str, name='mysignal')

    def connect_to_signal(self):
        # you can use this syntax instead of the 'old' one
        self.mysignal.connect(self.myslot)

        # but this will also work
        self.connect(self, QtCore.SIGNAL('mysignal(QString)'), self.myslot) 

        self.mysignal.emit("hello")

    def myslot(self, param):
        print "received %s" % param

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

-121--4087845-

Нет, нет.

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

Или, если вы хотите иметь разные css для разных браузеров, вы можете использовать css hacks. Вероятно, существуют CSS-взломы, которые работают с нужными браузерами.

Или, если единственное, что вам нужно изменить, это «ширина» (одного определения CSS?), вы, вероятно, можете сделать это при обнаружении jquery или javascript

jquery браузера. см.: http://docs.jquery.com/Utilities/jQuery.browser

-121--4268561-

http://codepad.org/about успешно внедрила такую систему (в качестве общедоступной службы вставки/запуска кода!)

codepad.org является интерактивным компилятором/интерпретатором и простым инструментом совместной работы. Это пастебин, который исполняет код для тебя. [...]

Как это работает

Выполнение кода обрабатывается супервизором на основе geordi . Стратегия состоит в том, чтобы запустить все под контролем, при этом многие системные вызовы запрещены или проигнорированы. Компиляторы и конечные исполняемые файлы выполняются в chroot-тюрьме со строгими ограничениями ресурсов. Супервизор написан на языке хаскелл.

[...]

Когда ваше приложение выполняет удаленный код, вы должны ожидать проблем с безопасностью. Вместо того, чтобы полагаться только на chroot и ptrace supervisor, я принял некоторые дополнительные меры предосторожности:

  • Процессы supervisor выполняются на виртуальных машинах, которые защищены брандмауэром, так что они не способны устанавливать исходящие соединения.

  • Машины, на которых выполняются виртуальные машины, также подвергаются интенсивному брандмауэру и периодически восстанавливаются из исходных образов.

3
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: