Class: Brakeman::CheckWithoutProtection
- Inherits:
-
BaseCheck
- Object
- BaseCheck
- Brakeman::CheckWithoutProtection
- Defined in:
- lib/brakeman/checks/check_without_protection.rb
Overview
Check for bypassing mass assignment protection with without_protection => true
Only for Rails 3.1
Instance Method Summary collapse
- #all_literals?(call) ⇒ Boolean
-
#process_result(res) ⇒ Object
All results should be Model.new(...) or Model.attributes=() calls.
- #run_check ⇒ Object
Instance Method Details
#all_literals?(call) ⇒ Boolean
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/brakeman/checks/check_without_protection.rb', line 66 def all_literals? call call.each_arg do |arg| if hash? arg hash_iterate arg do |k, v| unless node_type? k, :str, :lit, :false, :true and node_type? v, :str, :lit, :false, :true return false end end else return false end end true end |
#process_result(res) ⇒ Object
All results should be Model.new(...) or Model.attributes=() calls
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/brakeman/checks/check_without_protection.rb', line 34 def process_result res call = res[:call] last_arg = call.last_arg if hash? last_arg and not call.original_line and not duplicate? res if value = hash_access(last_arg, :without_protection) if true? value add_result res if input = include_user_input?(call.arglist) confidence = :high elsif all_literals? call return else confidence = :medium end warn :result => res, :warning_type => "Mass Assignment", :warning_code => :mass_assign_without_protection, :message => "Unprotected mass assignment", :code => call, :user_input => input, :confidence => confidence, :cwe_id => [915] end end end end |
#run_check ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/brakeman/checks/check_without_protection.rb', line 12 def run_check if version_between? "0.0.0", "3.0.99" return end return if active_record_models.empty? Brakeman.debug "Finding all mass assignments" calls = tracker.find_call :targets => active_record_models.keys, :methods => [:new, :attributes=, :update_attributes, :update_attributes!, :create, :create!] Brakeman.debug "Processing all mass assignments" calls.each do |result| process_result result end end |