What are tainted objects, and when should we untaint them?

后端 未结 1 1958
梦谈多话
梦谈多话 2021-02-04 04:36

When do Ruby objects need to be made tainted and when should we untaint them? How does the concept of tainted object make a Ruby script run in safe mode? Can anyone elaborate on

1条回答
  •  故里飘歌
    2021-02-04 05:25

    What is Tainted?

    User input is tainted, by definition. For example:

    string = gets
    string.tainted?
    # => true
    

    You can also manually taint an object.

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

    Why Untaint an Object?

    Generally, you would untaint an object only after you validate and/or sanitize it. Untainting an object marks it as "safe" for certain operations that you wouldn't want to run on untrusted strings or other objects, or when your safe level requires an untainted object to perform the desired operation.

    Untainting an Object

    The easiest way to untaint an object is to call the Object#untaint method on it. For example, if your string variable holds a tainted object, then:

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

    More About Tainted Objects

    You can find out more about tainted objects from the Locking Ruby in the Safe chapter of Programming Ruby.

    0 讨论(0)
提交回复
热议问题