Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Ресурсы Список джемов      Поиск   
Arrow_leftНазад в блог

Защищаем rails приложение

Date2008-04-17 UserRuslan Voloshin Commentкоментарии 0

Наверное вы замечали, что в логах приложения у вас всегда видно входящие параметры контролера.

Естественно в продакшине они идиут на уровне логирования 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/

0 коментариев
Новый коментарий
зарегистрируйтесь для добавления сообщений
используй формат RedCloth
Tags:
Гости: 78 Онлайн: 0
Реклама:
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008