Как безопасно позволить пользователям отправлять пользовательские темы / плагины для приложения Rails - PullRequest
2 голосов
/ 23 марта 2010

В моем приложении rails я бы хотел, чтобы пользователи отправляли собственные «темы» для отображения данных различными способами.

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 23 марта 2010

Вы можете попробовать Liquid (http://www.liquidmarkup.org/),, который был разработан, чтобы позволить пользователям создавать свои собственные темы для Shopify. Жидкие темы - это не настоящий Ruby-код, поэтому вам не нужно беспокоиться о пользователях, пытающихся получить доступ вещи, которые они не должны.

Другим вариантом является концепция Ruby «испорченных» объектов, которые можно использовать для реализации защищенных тем / плагинов, в то же время позволяя пользователям писать настоящий код Ruby. Вы можете прочитать больше об этом здесь. Я не могу подтвердить, насколько это безопасно, поскольку я никогда не использовал его.

0 голосов
/ 25 марта 2010

Я также думаю о том, чтобы позволить пользователям отправлять свои собственные приложения sinatra, а затем запускать их изнутри рельсов. Похоже, с Rack маршрутизацией это возможно. Я не смог найти никаких данных о том, как / если приложение sinatra помещено в песочницу из приложения rails. Если у кого-то есть информация, пожалуйста, дайте мне знать!

0 голосов
/ 23 марта 2010

Похоже, что это может иметь потенциал: http://flouri.sh/2007/10/27/safely-exposing-your-app-to-a-ruby-sandbox

...