Sha256: 6cc5a3ad31e7ec00e800d67c6df615190f07052f4ba127c388518bd54cf781c4
Contents?: true
Size: 1.41 KB
Versions: 2
Compression:
Stored size: 1.41 KB
Contents
# frozen_string_literal: true module TaintedLove module Replacer # Ensures user input is tainted in Rails class ReplaceRailsUserInput < Base def should_replace? Object.const_defined?('Rails') end def replace! # taint the values loaded from the database if Object.const_defined?('ActiveRecord::Base') ActiveRecord::Base.after_find do attributes.each do |key, value| TaintedLove.tag(value.taint, source: "ActiveRecord attribute #{self.class.to_s}##{key}", value: value) end end end TaintedLove.proxy_method('ActionDispatch::Http::Headers', :[]) do |return_value, *args| TaintedLove.tag(return_value.taint, source: "headers[#{args.first.inspect}]", value: return_value) end # taint params keys if Object.const_defined?('ActionController::Parameters') ActionController::Parameters.class_eval do def keys @parameters.keys.map { |key| TaintedLove.tag(key.dup.taint, source: "Parameter name #{key.inspect}", value: key) } end end end # Transfer tags from String to SafeBuffer TaintedLove.proxy_method('ActiveSupport::SafeBuffer', :initialize) do |return_value, str| return_value.tainted_love_tags = str.tainted_love_tags end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tainted_love-0.4.1 | lib/tainted_love/replacer/replace_rails_user_input.rb |
tainted_love-0.4.0 | lib/tainted_love/replacer/replace_rails_user_input.rb |