Ruby的开放式动态类结构(鸭子打字)是否安全?

时间:2011-09-28 16:14:19

标签: ruby security dynamic duck-typing

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

将每个班级视为一个单独的建筑。我们可以建造一个新的办公室,这样它就可以靠近北边的下一座建筑物,也许可以将一些钢筋从建筑物延伸到西边,以帮助建造我们的新建筑。

显而易见的结果是N和W邻居的结构完整性受损,以及对新建筑的可疑支持。有了软件,像这样的坏主意并不总是那么明显,所以我们阅读了充满原则和建议的书籍来提醒我们。

答案 1 :(得分:2)

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