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

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

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

谢谢

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

基本上, $ SAFE级别归结为保护应用程序免受污染数据,但是恶魔在细节中。 编程Ruby中有一整章介绍了各个层次,值得您花时间阅读它。

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

一般来说,平均Rails应用程序会引发污点输入。 params散列被定义污染,并且您的大多数用户交互依赖于受污染的数据。 假设您可以清理输入或使用框架function来防止批量分配漏洞 ,在大多数情况下,您的应用程序仍然需要与用户提供的数据进行交互才能真正有用。

安全权衡和其他考虑因素

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

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

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