Что такое испорченные объекты, и когда мы должны их освободить?

Когда нужно, чтобы объекты Ruby были испорчены, и когда мы их не используем? Как концепция tainted объекта делает Ruby script работать в безопасном режиме? Может ли кто-нибудь уточнить это, чтобы сделать концепцию понятной с некоторыми фрагментами кода?

Ответы

Ответ 1

Что такое Tainted?

Пользовательский ввод испорчен, по определению. Например:

string = gets
string.tainted?
# => true

Вы также можете вручную испортить объект.

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

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

Почему Untaint Object?

Как правило, вы должны удалить объект только после проверки и/или дезинфекции. Отключение объекта означает, что он является "безопасным" для определенных операций, которые вы не хотели бы запускать на ненадежных строках или других объектах, или когда ваш безопасный уровень требует использования незанятого объекта для выполнения требуемой операции.

Удаление объекта

Самый простой способ отключить объект - вызвать метод Object # untaint. Например, если ваша строковая переменная содержит зараженный объект, то:

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

Подробнее о Tainted Objects

Вы можете узнать больше о tainted объектах из Блокировка Ruby в разделе Safe в разделе Programming Ruby.