1

我是一个新的 Ruby/Rails 开发人员,拥有多年的 Java 经验。这个“安全”问题是特定于 ruby​​ 的——而不是 rails——这就是为什么很难找到答案的原因,因为大多数 rails 安全问题都涉及 web 问题。

作为一名 Java 开发人员,我已经多次阅读 Effective Java。该书中提出的关键点之一是保护类中的数据和方法免受恶意用户的侵害。我的意思是:尽可能多地将代码私有化,使用不可变类并在返回对不可变对象的引用时使用防御性复制。您也可以使用 final 关键字。

但在 Ruby 中,一切都是开放的。当然,您可以将方法/数据设为私有,但作为 Ruby API 的使用者,有什么阻止我编写自己的方法版本,然后简单地(在运行时或代码中动态地)将其附加到类API?似乎 Effective Java 中讨论的所有安全性根本不适用于 Ruby。这只是从 Java 的思维转变吗?这不是 Ruby 或其他类似语言的“缺陷”吗?

4

2 回答 2

3

防御是针对糟糕的设计,而不是入侵者

封装、类私有功能和其他推荐的 OO 设计模式不能再次防御恶意的外部函数和敌对类。

相反,这个想法只是以一种使其不那么脆弱且更容易修改的方式来构建程序。

将每个班级视为一个单独的建筑物。我们可以建一个新办公室,让它靠在北边的下一栋楼上,也许可以从楼里向西延伸一些钢材,以帮助支撑我们的新结构。

明显的结果将是破坏 N 和 W 邻居的结构完整性,并且对新建筑的支持存在问题。对于软件,像这样的坏主意并不总是那么明显,所以我们阅读了充满原则和建议的书籍来提醒我们。

于 2011-09-28T16:26:03.397 回答
2

为了使其成为攻击媒介,恶意用户必须能够更改您将运行的代码。如果他能做到这一点,那么你使用什么语言并不重要:你正在运行他的代码,他拥有你。

于 2011-09-28T16:17:24.200 回答