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

StackOverflow https://stackoverflow.com/questions/2513877

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top