3

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

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

谢谢

4

2 回答 2

4

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

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

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

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

安全权衡和其他考虑

$SAFE = 4. _ _ 坦率地说,我从未见过有人“在野外”使用生产代码来做到这一点。即使可以,您也可能不得不跳过这么多圈来清除用户提供的数据、实例化 ActiveRecord 对象并执行文件系统写入(例如日志记录或文件上传),这可能不值得在安全性上进行权衡。

通过使用较低的$SAFE级别并依靠其他安全最佳实践来实现您的目标,您可能会得到更好的服务。这实际上仅取决于您要完成的工作。与所有安全控制一样,您的里程肯定会有所不同。

于 2013-01-10T13:43:11.750 回答
0

当您的整个 Rails 将 $SAFE 设置为 4 时,您不会发生任何事情。因此,您的应用程序只能提供静态视图。至少这是我前段时间的经验。

于 2013-01-10T13:20:16.100 回答