【问题标题】:What are tainted objects, and when should we untaint them?什么是受污染的对象,我们应该何时清除它们?
【发布时间】:2013-01-11 15:13:13
【问题描述】:

Ruby 对象什么时候需要被污染,什么时候应该去污染它们?受污染对象的概念如何使 Ruby 脚本在安全模式下运行?谁能详细说明一下,用一些代码 sn-ps 来明确这个概念?

【问题讨论】:

  • 相关答案,但不是重复问题:stackoverflow.com/a/14259324/1301972
  • 能不能稍微关注一下How does the concept of tainted object make a Ruby script run in safe mode?这个问题?

标签: ruby ruby-1.9 taint taint-checking


【解决方案1】:

什么是污染?

根据定义,用户输入受到污染。例如:

string = gets
string.tainted?
# => true

您也可以手动污染对象。

string = 'Not yet tainted.'
string.tainted?
# => false

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

为什么要清除对象?

通常,您只有在验证和/或清理对象后才能对其进行净化。对于您不想在不受信任的字符串或其他对象上运行的某些操作,或者当您的安全级别需要未污染的对象执行所需的操作时,取消污染对象会将其标记为“安全”。

清除对象

清除对象的最简单方法是对其调用Object#untaint 方法。例如,如果您的 string 变量包含一个被污染的对象,那么:

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

更多关于污染对象

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

【讨论】:

  • 完美解释! +1给你!但是How does the concept of tainted object make a Ruby script run in safe mode? 对这个问题有什么建议吗?
  • @PythonLikeYOU 我更新了答案以反映您何时可能想要清除对象。就其本身而言,(未)污染除了更改对象上的标志外不会做任何事情。仅当您担心输入的安全性(例如 SQL 注入或 #eval 方法)或$SAFE >= 1 时,它才真正重要。
  • 我上面提出的问题(在评论中)也回答了吗?我只是在你的帖子里徘徊!
  • "safe" for certain operations 是什么意思?这里提到了哪些操作?
猜你喜欢
  • 2013-08-11
  • 2021-10-02
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2010-11-01
  • 1970-01-01
相关资源
最近更新 更多