什么时候需要污染Ruby对象,什么时候我们应该消除它们的污染?污染对象的概念如何让Ruby脚本在安全模式下运行?有人能用一些代码片段来详细说明这一点吗?
发布于 2013-01-11 23:33:47
受污染的是什么?
根据定义,用户输入是受污染的。例如:
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有关受污染对象的更多信息
你可以在Locking Ruby in the Safe的“编程Ruby”一章中找到更多关于污染对象的信息。
https://stackoverflow.com/questions/14281004
复制相似问题