什么是被污染的对象,什么时候应该清除它们



什么时候Ruby对象需要被污染,什么时候我们应该去污染它们?受污染对象的概念如何使Ruby脚本在安全模式下运行?有人可以详细说明这一点,使一些代码片段的概念清楚?

什么是污染?

根据定义,用户输入被污染了。例如:

string = gets
string.tainted?
# => true

您也可以手动污染对象。

string = 'Not yet tainted.'
string.tainted?
# => false
(string = 'Explicitly taint me!').taint
string.tainted?
# => true

为什么不污染对象?

一般来说,只有在对对象进行验证和/或消毒之后,才能对其进行未污染处理。未污染对象将其标记为"安全"的某些操作,您不希望在不受信任的字符串或其他对象上运行,或者当您的安全级别需要一个未污染的对象来执行所需的操作。

清除对象

清除一个对象最简单的方法是调用object #untaint方法。例如,如果字符串变量包含受污染的对象,则:

(string = "Let's taint this string!").taint
string.untaint.tainted?
# => false

关于受污染对象的更多信息

你可以在Programming Ruby的安全章节中找到更多关于被污染对象的信息。

最新更新