Выполнение ненадежного кода RDotNet

Мы работаем над функцией, в которой нам нужно позволить пользователю написать небольшой R-скрипт для вычисления некоторых данных.

Скрипты должны быть довольно простыми, например:

var1 + var2 - var3

or

var1 + sum(var2)

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

Мы пытались использовать другой домен приложения, но эта ссылка показывает, что она по-прежнему не поддерживается.

Поэтому нам нужно найти более творческий способ «защитить» сервер.

Один из вариантов, о котором мы подумали, — создать какой-то словарь разрешенных функций и предварительно проанализировать сценарий, чтобы найти вещи, которые не разрешены.

Мой вопрос: как бы вы это сделали? (при условии, что AppDomain НЕ является опцией)


person Georges Legros    schedule 02.03.2016    source источник
comment
Не уверен, что это комментарий или ответ, я бы придерживался домена приложения, но по-другому: вы можете попытаться запустить свое приложение в другом процессе, который уже работает в другом домене приложения. В этом случае R.net и R по-прежнему будут использоваться в одном домене. Если я не ошибаюсь, сам процесс R запускается автоматически в том же домене, что и его родитель. Взаимодействие между процессами может быть реализовано, например, через именованные каналы MCF.   -  person David Go    schedule 05.03.2016


Ответы (1)


Просто чтобы пометить этот вопрос как закрытый, вот что мы сделали:

В итоге мы использовали Rserve.

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

person Georges Legros    schedule 10.05.2016