什么时候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

有关受污染对象的详细信息
您可以在ruby编程的Locking Ruby in the Safe一章中找到更多关于受污染对象的信息。

关于ruby - 什么是被污染的物体?什么时候应该去污染它们?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14281004/

10-10 13:18