class Brakeman::CheckCrossSiteScripting
def check_for_immediate_xss exp
def check_for_immediate_xss exp return :duplicate if duplicate? exp if exp.node_type == :output out = exp.value end if raw_call? exp out = exp.value.first_arg elsif html_safe_call? exp out = exp.value.target end return if call? out and ignore_call? out.target, out.method if input = has_immediate_user_input?(out) add_result exp message = msg("Unescaped ", msg_input(input)) warn :template => @current_template, :warning_type => "Cross-Site Scripting", :warning_code => :cross_site_scripting, :message => message, :code => input.match, :confidence => :high, :cwe_id => [79] elsif not tracker.options[:ignore_model_output] and match = has_immediate_model?(out) method = if call? match match.method else nil end unless IGNORE_MODEL_METHODS.include? method add_result exp if likely_model_attribute? match confidence = :high else confidence = :medium end message = "Unescaped model attribute" link_path = "cross_site_scripting" warning_code = :cross_site_scripting if node_type?(out, :call, :safe_call, :attrasgn, :safe_attrasgn) && out.method == :to_json message += " in JSON hash" link_path += "_to_json" warning_code = :xss_to_json end warn :template => @current_template, :warning_type => "Cross-Site Scripting", :warning_code => warning_code, :message => message, :code => match, :confidence => confidence, :link_path => link_path, :cwe_id => [79] end else false end end