Sha256: fb41f98b8c4ef085482d42895cd527b457abcefe5f410e659d24b86fba1be5aa

Contents?: true

Size: 988 Bytes

Versions: 2

Compression:

Stored size: 988 Bytes

Contents

require 'railroader/checks/base_check'

# This check looks for calls to +eval+, +instance_eval+, etc. which include
# user input.
class Railroader::CheckEvaluation < Railroader::BaseCheck
  Railroader::Checks.add self

  @description = "Searches for evaluation of user input"

  # Process calls
  def run_check
    Railroader.debug "Finding eval-like calls"
    calls = tracker.find_call :method => [:eval, :instance_eval, :class_eval, :module_eval]

    Railroader.debug "Processing eval-like calls"
    calls.each do |call|
      process_result call
    end
  end

  # Warns if eval includes user input
  def process_result result
    return unless original? result

    if input = include_user_input?(result[:call].arglist)
      warn :result => result,
        :warning_type => "Dangerous Eval",
        :warning_code => :code_eval,
        :message => "User input in eval",
        :code => result[:call],
        :user_input => input,
        :confidence => :high
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
railroader-4.3.8 lib/railroader/checks/check_evaluation.rb
railroader-4.3.7 lib/railroader/checks/check_evaluation.rb