Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Object | untaint

概要

Object#untaint -> self

詳細

オブジェクトの汚染マークを除去する。

セキュリティレベルについては下記参照。
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fsafelevel.html

サンプルコード
require 'tbpgr_utils'

name = ARGV[0]
age = ARGV[1]

Person = Struct.new(:name, :age)
tanaka = Person.new('tanaka', 24)
yogore = Person.new(name, age)

bulk_puts_eval binding, <<-EOS
tanaka.name.tainted?
tanaka.name.taint
tanaka.name.tainted?
tanaka.name.untaint
tanaka.name.tainted?
yogore.name.tainted?
yogore.name.taint
EOS

$SAFE = 1
# 汚染された文字列でディレクトリ操作をしようとしてセキュリティエラーが発生
Dir.mkdir(yogore.name) unless Dir.exist?(yogore.name)

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

$ ruby object_taint.rb yogore 99
tanaka.name.tainted? # => false
tanaka.name.taint    # => "tanaka"
tanaka.name.tainted? # => true
tanaka.name.untaint  # => "tanaka"
tanaka.name.tainted? # => false
yogore.name.tainted? # => true
yogore.name.taint    # => "yogore"
object_taint.rb:21:in `exist?': Insecure operation - exist? (SecurityError)
        from object_taint.rb:21:in `<main>'