什么时候需要对 Ruby 对象进行污染,什么时候应该消除它们的污染?受污染对象的概念如何使 Ruby 脚本在安全模式下运行?任何人都可以详细说明这一点,通过一些代码片段使概念清晰吗?
什么是污染?
根据定义,用户输入被污染了。例如:
string = gets
string.tainted?
# => true
您还可以手动污染对象。
string = 'Not yet tainted.'
string.tainted?
# => false
(string = 'Explicitly taint me!').taint
string.tainted?
# => true
为什么要清除对象?
通常,只有在验证和/或清理对象后,您才会对其进行净化。对于您不想在不受信任的字符串或其他对象上运行的某些操作,或者当您的安全级别需要未污染的对象来执行所需的操作时,取消对象的污染将其标记为“安全”。
清除对象的污染
取消对象污染的最简单方法是调用对象#untaint http://ruby-doc.org/core-1.9.3/Object.html#method-i-untaint方法就可以了。例如,如果您的string变量保存一个受污染的对象,然后:
(string = "Let's taint this string!").taint
string.untaint.tainted?
# => false
有关受污染对象的更多信息
您可以从以下位置找到有关受污染物体的更多信息将红宝石锁在保险箱中 http://ruby-doc.com/docs/ProgrammingRuby/html/taint.html的章节红宝石编程.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)