Rails 漏洞(例如CVE-2013-0155和CVE-2013-0156)可能允许用户运行从不受信任的源(XML/YAML 参数)构建的任意代码。
使用 $SAFE=4 (比如说)是否可以防止此类攻击?如果是,Rails 开发人员是否使用这种安全级别?如果不是,为什么?
谢谢
Rails 漏洞(例如CVE-2013-0155和CVE-2013-0156)可能允许用户运行从不受信任的源(XML/YAML 参数)构建的任意代码。
使用 $SAFE=4 (比如说)是否可以防止此类攻击?如果是,Rails 开发人员是否使用这种安全级别?如果不是,为什么?
谢谢
基本上,$SAFE级别归结为保护应用程序免受污染数据的影响,但魔鬼在细节中。Ruby 编程有一整章涉及各个级别,值得您花时间阅读。
一般来说,一般的 Rails 应用程序都会引入受污染的输入。params散列被定义为污染,并且您的大多数用户交互都依赖于被污染的数据。假设您可以清理输入或使用框架功能来防止批量分配漏洞,在大多数情况下,您的应用程序仍然需要与用户提供的数据进行交互才能真正有用。
在$SAFE = 4
. _ _ 坦率地说,我从未见过有人“在野外”使用生产代码来做到这一点。即使可以,您也可能不得不跳过这么多圈来清除用户提供的数据、实例化 ActiveRecord 对象并执行文件系统写入(例如日志记录或文件上传),这可能不值得在安全性上进行权衡。
通过使用较低的$SAFE级别并依靠其他安全最佳实践来实现您的目标,您可能会得到更好的服务。这实际上仅取决于您要完成的工作。与所有安全控制一样,您的里程肯定会有所不同。
当您的整个 Rails 将 $SAFE 设置为 4 时,您不会发生任何事情。因此,您的应用程序只能提供静态视图。至少这是我前段时间的经验。