2

我想让用户编写小型自定义应用程序(想想 Wordpress 上的主题或插件)并在我的网站上上传/运行它们。

我正在考虑为此使用 Sinatra 应用程序,因为它会给用户很大的灵活性,然后在我的 rails 应用程序中将它们作为中间件运行。

但我无法弄清楚这对安全的影响。我尝试创建一个简单的 sinatra 应用程序作为中间件,它可以访问所有的 rails 模型和所有东西——所以这很糟糕。有没有办法让机架保持这些独立,以便 sinatra 应用程序有效地沙盒化并且不能做任何坏事(在 API 或我为它们设置的某种特定方式进行通信之外)?

可能有一种更简单的方法可以实现这一点,我也没有想到,所以欢迎提出想法。谢谢!

4

2 回答 2

1

您对用户的了解/信任程度如何?我希望答案包含“非常”和“亲密”等词。如果他们搞砸了,你能多容易地用尖锐和痛苦的东西接触到他们?

我想不出一种简单的方法(哎呀,我想不出一种复杂的方法)来允许上传和安装这些东西。即使使用 Wordpress,我认为它们也不允许在 WP 托管的站点上安装/运行任何随机插件——即使是善意的代码导致问题的风险在我偏执的头脑中似乎也是巨大的。

Sinatra 肯定会提供灵活性,但这可能不是一件好事,正如您已经确定的那样。

当然,如果您的用户是 Ruby/Sinatra 读写能力(或能够接受),那么您可以为他们的应用程序提供一个存储库(git、svn 或其他),并将它们部署到 Rack 中的适当位置,无论是ad hoc还是 on一些时间表。

在没有任何可行性概念的情况下思考,如果可以安全地提供的功能相对有限,您可能会考虑编写某种受约束的 DSL 以供他们使用。如果这样生成的脚本足够短/高效,也许它们可以存储在应用程序的数据库中并通过eval?

于 2010-03-25T13:34:14.693 回答
1

也许看看TryRuby / The Freaky Sandbox或其他Ruby 沙箱之一可能会带您到某个地方。

于 2010-03-25T19:00:23.967 回答