5

Rails 2.3.11 から 3.0.10 へのアップグレードに取り組んでおり、 の内容を変換するApplicationControllerのに問題がありfilter_parameter_loggingます。:referrer特定のパラメーターの両方をフィルター処理し、タグなどの値に表示される場合はそれらもフィルター処理したいと考えています。

通常のパラメーターをフィルターで除外できますapplication.rb

config.filter_parameters += [:password, :oauth, ...]

しかし、私が問題を抱えているのは、filter_parameter_logging でも渡すブロックです。また、URL のように見えるすべての値のパラメータを除外するため、次のようなものhttp://example.com?password=foobar&oauth=123foo&page=2は としてログに記録されhttp://example.com?password=[FILTERED]&oauth=[FILTERED]&page=2ます。上記のURLのように、レールが指定されたパラメータをフィルタリングし、他の値からそれらのパラメータのみをフィルタリングする方法が必要です。

filter_parameter_logging での表示は次のとおりです。

FILTER_WORDS = %{password oauth email ...} 
FILTER_WORDS_REGEX = /#{FILTER_WORDS.join("|")}/i

#Captures param in $1 (would also match things like old_password, new_password), and value in $2
FILTER_WORDS_GSUB_REGEX = /((?:#{FILTER_WORDS.join("|")})[^\/?]*?)(?:=|%3D).*?(&|%26|$)/i

filter_parameter_logging(*FILTER_WORDS) do |k,v|
  begin
    # Bail immediately if we can
    next unless v =~ FILTER_WORDS_REGEX && (v.index("=") || v.index("%3D"))

    #Filters out values for params that match
    v.gsub!(FILTER_WORDS_GSUB_REGEX) do
      "#{$1}=[FILTERED]#{$2}"
    end
  rescue Exception => e
    logger.error e
  end
end

config.filter_parametersin を使用してこの方法で Rails フィルターを作成する方法はありapplication.rbますか? Rails 3 でフィルタリングをカスタマイズする方法に関する適切なドキュメントが見つからないようです。

4

1 に答える 1

6

理解した。にラムダ ステートメントを渡すことができるconfig.filter_parametersので、フィルターにパラメーターを追加すると、次のようになります。

config.filter_parameters << lambda do |k,v|
  begin
    # Bail immediately if we can
    next unless v =~ FILTER_WORDS_REGEX && (v.index("=") || v.index("%3D"))

    #Filters out values for params that match
    v.gsub!(FILTER_WORDS_GSUB_REGEX) do
      "#{$1}=[FILTERED]#{$2}"
    end
  rescue Exception => e
    logger.error e
  end
end
于 2011-10-03T15:38:53.467 に答える