Можете ли вы позволить пользователям загружать приложения Sinatra и запускать их внутри Rails в качестве промежуточного программного обеспечения? - PullRequest
2 голосов
/ 25 марта 2010

Я хочу позволить пользователям писать небольшие пользовательские приложения (например, темы или плагины для Wordpress) и загружать / запускать их на моем сайте.

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

Но я не могу понять последствия этого для безопасности. Я попытался создать простое приложение sinatra в качестве промежуточного программного обеспечения, и оно имеет доступ ко всем моделям рельсов и всему прочему - так что это плохо. Есть ли в стойке способ разделить их так, чтобы приложения sinatra эффективно помещались в «песочницу» и не могли делать ничего плохого (вне API или какого-то особого способа, которым я их настроил для связи)?

Может быть, есть более простой способ сделать это, о котором я тоже не задумывался, поэтому идеи приветствуются. Спасибо!

Ответы [ 2 ]

1 голос
/ 25 марта 2010

Может быть, посмотрите на TryRuby / Причудливая песочница или одна из других Рубиновых песочниц может вас куда-нибудь отвезти.

1 голос
/ 25 марта 2010

Насколько хорошо вы знаете / доверяете своим пользователям? Я надеюсь, что ответ содержит такие слова, как «чрезвычайно» и «глубоко». Как легко вы могли бы достать их чем-нибудь острым и болезненным, если они испортятся?

Я не могу придумать простой способ (черт возьми, я не могу придумать сложного), позволяющий загружать и устанавливать такие вещи. Даже с Wordpress я не думаю, что они позволяют устанавливать / запускать какие-либо случайные плагины на сайте, размещенном на WP - риск даже проблемного кода, вызывающего проблемы, просто кажется мне безумным.

Синатра, безусловно, даст гибкость, но, как вы уже определили, это может быть нехорошо,

Конечно, если ваши пользователи грамотны на Ruby / Sinatra (или могут стать приемлемо такими), вы можете предоставить им хранилище (git, svn или что-то еще) для их приложений и развернуть их в соответствующем месте в Rack либо ad hoc или по какому-либо расписанию.

Думая о копыте и без какого-либо представления о целесообразности, если функции, которые можно безопасно сделать доступными, относительно ограничены, вы можете рассмотреть вопрос о написании какого-либо ограниченного DSL для их использования. Если созданные таким образом сценарии были достаточно короткими / эффективными, возможно, их можно было бы сохранить в базе данных приложения и выполнить с помощью eval?

...