Наверное вы замечали, что в логах приложения у вас всегда видно входящие параметры контролера.
Естественно в продакшине они идиут на уровне логирования debug.level = info и очень желательно что бы все пароли или например данные кредитки не светились в открытом виде в логах. Для этого достаточно в начале вашего котролера устанивать фильтр для параметров, которые вы хотите закрыть для логов.
class ManagementController < ApplicationController
filter_parameter_logging :password
После этого ваши логи будут выглядеть примерно так:
[INFO|#23033|2008-04-17 12:23:11] : Parameters: {"action"=>"confirm", "id"=>"26", "card_number"=>"[FILTERED]", "controller"=>"invoice", "card_cvv"=>"[FILTERED]"}
-----------------------------------
В ходе эксплуатации рельсов выяснилась еще одна ситуация что при рендеринге компонента с каким либо параметрами все входящие параметры логируются в открытов виде, что есть не очень хорошо. Для этого можно сделать просто monkey path путем переопределения добавлением в либы или application.rb кода где уровень логирования был изменен из info -> debug что в продакшин режиме скроет параметры.
module ActionController
module Components
module InstanceMethods
private
def component_logging(options)
if logger
logger.debug "Start rendering component (#{options.inspect}): "
result = yield
logger.info "\n\nEnd of component rendering"
result
else
yield
end
end
end
end
end
-----------------------------------
Иногда бывает етьс необходимость зранить данные в базе типа пароля в открытом виде, но естественно вам не хочется что бы все имели доступ к ним совсем легко, и естественно хотелось бы установить какое то криптование перез занесение в базу и после извлечения из нее.
есть такой джем http://sentry.rubyforge.org/ который на уровне ActiveRecord криптует данные туда и обратно при сохранении и при обращении к полю таблицы.
#gem install sentry
class Model < ActiveRecord::Base
generates_crypted :password, :mode => :asymmetric
end model.password = '5234523453425'
model.save # password is encrypted and saved to crypted_password in the database,
# model.password is cleared and becomes a virtual field.
model.password('secret_password')
=> '5234523453425'
Более детальной можно посмjтреть на сайте http://sentry.rubyforge.org/