Как скрыть переменные экземпляра объекта Ruby от просмотра в irb или журналах?

Я делаю драгоценный камень, чтобы обернуть API. Службе требуется несколько параметров входа в систему, поэтому я создал класс Connection для инициализации путем передачи всех значений входа и сохранения с переменными экземпляра. Одно из этих значений, @secret_access_key, очевидно, является секретным. Это не читается в приложении. Но при тестировании драгоценного камня в irb я вижу секретный ключ, отображаемый вместе со всеми другими переменными экземпляра, когда объект возвращается.

mws = MWS::Connection.new :access_key => '1', :secret_access_key => 'SECRET!!!', :merchant_id => '3', :marketplace_id => '4'
 => #<MWS::Connection:0x007fbd22acef40 @access_key="1", @merchant_id="3", @marketplace_id="4", @secret_access_key="SECRET!!!">

Я параноик, что секретный ключ появится в журналах Heroku, сообщениях об ошибках приложений или где-то еще.

Должен ли я беспокоиться? Если да, то как лучше всего хранить или скрывать эту информацию?

Кроме того, я использую httparty gem для управления этим, есть ли что-то лучшее, что я могу сделать с этим камнем?


person Erik J    schedule 08.01.2012    source источник


Ответы (1)


Вы можете использовать этот обходной путь:

class MWS::Connection
  def inspect
    "#<MWS::Connection:#{object_id}>"
  end
end

Конечно, секретный ключ по-прежнему будет доступен, но теперь он не должен отображаться ни в каких журналах:

mws = MWS::Connection.new :access_key => '1', :secret_access_key => 'SECRET!!!', :merchant_id => '3', :marketplace_id => '4'
# => #<MWS::Connection:0x007fbd22acef40>
mws.instance_variable_get(:@secret_access_key) # => 'SECRET!!!'
person Niklas B.    schedule 08.01.2012