【发布时间】:2011-09-28 16:14:18
【问题描述】:
我是一名新晋的 Ruby/Rails 开发人员,拥有多年的 Java 经验。这个“安全”问题是 ruby 特有的——而不是 rails——这就是为什么很难找到答案的原因,因为大多数 rails 安全问题都涉及网络问题。
作为一名 Java 开发人员,我已经阅读了《Effective Java》数次。该书中提出的关键点之一是保护类中的数据和方法免受恶意用户的侵害。我的意思是:尽可能多地将代码私有化,使用不可变类并在返回对不可变对象的引用时使用防御性复制。您也可以使用 final 关键字。
但在 Ruby 中,一切都是开放的。当然,您可以将方法/数据设为私有,但作为 Ruby API 的使用者,有什么阻止我编写自己的方法版本,然后简单地(在运行时或代码中动态地)将其附加到类API?似乎 Effective Java 中讨论的所有安全性根本不适用于 Ruby。这只是从 Java 的思维转变吗?这不是 Ruby 或其他类似语言的“缺陷”吗?
【问题讨论】:
-
如果您将
private视为安全,那您就完蛋了。听说过反射吗?就像其他所有事情一样,如果攻击者的代码与您的代码在同一进程中,那么您的应用程序就像被劫持一样好。private等主要是为了语义,让其他代码不用担心实现细节(也让你不用担心其他代码依赖实现细节)。 -
好的,是的,这和其他人所说的都是有道理的 - 只要有人可以更改您的代码,它是什么语言都没有关系。所以我想我明白了 - 它可以追溯到您可以用来构建类的工具,以表明某些数据受到保护。这样,使用您的代码的人可以减少“错误”,因为事情是可靠构建的,但归根结底,无论语言如何,每个编码人员都可以选择构建适合它们的代码。谢谢大家。
标签: ruby security dynamic duck-typing