污染Ruby对象的目的是什么?

我知道将不受信任的对象标记为污染的可能性,但是根本目的是什么,为什么要这样做呢?

在Perl中编写CGI时,它曾经是一种非常标准的做法。 甚至有一个常见问题解答。 基本思想是运行时间可以保证您不会隐含地信任受污染的值。

为了确保不受信任的数据不会被错误地用于计算,交易或解释为代码,人们会将污点视为安全预防措施。

通过内置语言function跟踪污点比通过编码约定或依赖代码审查进行跟踪更清晰,更可靠。

例如,来自用户的输入通常可以被认为是“不可信的”,直到它被正确地清理以便插入到数据库中。 通过将输入标记为污染,Ruby可确保实现令人满意的卫生并防止潜在的SQL注入攻击。

对于一个“古代”(2005)编码实践的例子,该实践演示了如何在没有Perl和Ruby模块的情况下跟踪污点,请阅读一些好老Joel:

http://www.joelonsoftware.com/articles/Wrong.html