如何安全地让用户为Rails应用程序提交自定义主题/插件

时间:2010-03-23 04:04:23

标签: ruby-on-rails security user-input sandbox

在我的rails应用程序中,我想让用户提交自定义“主题”以各种方式显示数据。

我认为他们可以使用API​​调用在视图中获取数据,我可以为此创建一个身份验证机制。也是经过身份验证的API,用于保存数据。所以这可能是安全的。

但我正在努力让用户上传/提交自己的主题代码。

我希望这可以像Wordpress主题/插件一样工作,人们可以上传这个东西。但存在一些安全风险。例如,如果我使用上传的“主题”,用户提交并将其放在rails应用程序内某处的自己的目录中,有什么风险呢?

如果用户在其主题中插入任何rails可执行代码,即使它是视图,他们也可以完全访问所有模型,每个人的数据等。甚至来自其他用户。所以这不好。

我需要一些方法让上传的主题存在于rails应用程序的沙箱中,但我还没有看到一个很好的方法来做到这一点。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用Liquid(http://www.liquidmarkup.org/),它是为了让用户为Shopify创建自己的主题而开发的。 Liquid主题不是真正的Ruby代码,因此您不必担心用户试图访问他们不应该访问的内容。

另一个选择是Ruby的“受污染”对象概念,它可用于实现安全主题/插件,同时仍允许用户编写实际的Ruby代码。您可以阅读更多相关信息here.我无法保证它的安全性,因为我从未使用它。

答案 1 :(得分:0)

答案 2 :(得分:0)

我也在考虑让用户提交他们自己的sinatra应用程序,然后在rails中运行它们。看起来像Rack routing这是可能的。我还没有找到任何关于如何/如果sinatra应用程序是从rails应用程序沙箱的数据。如果有人有信息,请告诉我!