Фильтрация частей или всего URL запроса из журналов рельсов - PullRequest
3 голосов
/ 14 января 2010

Rails предоставляет filter_parameter_logging для фильтрации конфиденциальных параметров из журнала rails.

Если у вас есть JSONP API, в URL может присутствовать некоторая конфиденциальная информация. Есть ли способ отфильтровать URL-адреса запроса и из журнала?

Ответы [ 2 ]

6 голосов
/ 14 января 2010

Примечание : ответом был способ заставить его работать на Rails 2.x ~> 3.0. Начиная с Rails 3.1, если вы установите config.filter_parameters, Rails также отфильтрует чувствительный параметр в строке запроса. См. этот коммит для более подробной информации.


Я думаю, что в этом случае вам необходимо переопределить complete_request_uri в ActionController :: Base , поскольку ActionController :: Benchmarking вызывает этот метод и печатает строку, которая выглядит следующим образом:

Completed in 171ms (View: 35, DB: 7) | 200 OK [http://localhost:3000/]

Я думаю, вы можете поместить это в инициализатор, чтобы переопределить этот метод

class ActionController::Base
  private

  def complete_request_uri
    "#{request.protocol}#{request.host}#{request.request_uri.gsub(/secret=([a-z0-9]+)/i, "secret=[FILTERTED]")}"
  end
end

Обратите внимание, что вам нужно немного поиграть с регулярным выражением, чтобы заменить его на ту часть, которую вы хотели.

2 голосов
/ 01 марта 2011

К сожалению, это больше не работает в Rails 3. Путь (включая параметры запроса) происходит от ActionDispatch :: Request , который наследуется от Rack :: Request . Вот соответствующий обезьян-патч, который вы можете добавить в инициализатор:

class ActionDispatch::Request
  def fullpath
    @fullpath ||= super.gsub(/secret=[^&]+/, 'secret=[FILTERED]')
  end
end

Я перешел на использование [^&] в регулярном выражении, так как параметр может легко содержать символы, которые не являются буквами или цифрами.

...