可以使用Ruby $ SAFE级别来利用Rails漏洞吗?

时间:2013-01-10 13:11:08

标签: ruby-on-rails ruby security

CVE-2013-0155CVE-2013-0156等Rails漏洞可能允许用户运行从不受信任的源(XML / YAML参数)构造的任意代码。

使用$ SAFE = 4(比方说)是否可以阻止此类攻击?如果是,Rails开发者是否使用这样的安全级别?如果不是,为什么?

由于

2 个答案:

答案 0 :(得分:4)

受污染的对象和受保护的操作

基本上, $ SAFE 级别可以归结为保护应用程序免受污染数据的影响,但是恶魔就是细节。 Programming Ruby中有一整章涉及各个层面,值得您花时间阅读它。

Rails应用程序通常需要污染数据

一般来说,平均Rails应用程序会引发受污染的输入。 params 哈希受定义污染,您的大多数用户交互都依赖于受污染的数据。假设您可以清理输入或使用框架功能来阻止mass-assignment vulnerabilities,在大多数情况下,您的应用程序仍然需要与用户提供的数据进行交互才能真正有用。

安全权衡及其他考虑因素

$SAFE = 4时,可能会或可能无法有效地运行Rails应用程序 。坦率地说,我从来没有见过有人用“野外”的生产代码来做这件事。即使你可以,你也可能不得不跳过这么多箍来解开用户提供的数据,实例化ActiveRecord对象,并执行文件系统写入(例如日志记录或文件上传),这可能不值得进行安全权衡。

使用较低的 $ SAFE 级别并依靠其他安全最佳做法来实现目标,可能会更好。这实际上取决于你想要完成的事情。与所有安全控制一样,您的里程肯定会有所不同。

答案 1 :(得分:0)

当你的整个Rails将$ SAFE设置为4时,你什么都不会发生。如上所述,您的应用程序瘫痪只能提供静态视图。至少这是我以前的经历。