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



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

使用$SAFE=4(说)是否可以防止这种攻击?如果是,Rails开发人员使用这样的安全级别吗?如果没有,为什么?

谢谢

受污染对象和受保护操作

基本上,$SAFE级别可以归结为保护应用程序免受受污染数据的侵害,但细节决定成败。《Programming Ruby》中有一整章讨论了不同的层次,值得你花时间把它读一遍。

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

一般来说,一般的Rails应用程序都会邀请受污染的输入。参数散列被定义污染了,大多数用户交互依赖于受污染的数据。即使你可以对输入进行消毒,或者使用框架特性来防止大规模分配漏洞,在大多数情况下,你的应用程序仍然需要与用户提供的数据进行交互,才能真正发挥作用。

安全权衡和其他考虑

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

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

当整个Rails将$SAFE设置为4时,不会发生任何事情。也就是说,你的应用不能只提供静态视图。至少这是我前段时间的经历。

最新更新