Class: Arachni::Element::Base Abstract
- Extended by:
 - Utilities
 
- Includes:
 - Capabilities::WithScope, Utilities
 
- Defined in:
 - lib/arachni/element/base.rb
 
Overview
Base class for all element types.
Direct Known Subclasses
Body, Cookie, DOM, Form, GenericDOM, Header, JSON, Link, LinkTemplate, NestedCookie, Path, Server, UIForm, UIInput, XML
Constant Summary collapse
- MAX_SIZE =
          
Maximum element size in bytes. Anything larger than this should be exempt from parse and storage or have its value ignored.
During the audit, thousands of copies will be generated and the same amount of HTP requests will be stored in the HTTP::Client queue. Thus, elements with inputs of excessive size will lead to excessive RAM consumption.
This will almost never be necessary, but there have been cases of buggy `_VIEWSTATE` inputs that grow infinitely.
 10_000
Instance Attribute Summary collapse
- 
  
    
      #initialization_options  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Options used to initialize an identical element.
 - 
  
    
      #page  ⇒ Page 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
Page this element belongs to.
 
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
 - #action ⇒ Object
 - #dup ⇒ Object
 - #hash ⇒ Object
 - 
  
    
      #id  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
String uniquely identifying self.
 - 
  
    
      #initialize(options)  ⇒ Base 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of Base.
 - #marshal_dump ⇒ Object
 - #marshal_load(h) ⇒ Object
 - #persistent_hash ⇒ Object
 - #prepare_for_report ⇒ Object abstract
 - 
  
    
      #reset  ⇒ Element::Base 
    
    
  
  
  
  
  
  abstract
  
  
  
    
Reset the element to its original state.
 - 
  
    
      #to_h  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    
Simple representation of self.
 - #to_hash ⇒ Object
 - 
  
    
      #to_rpc_data  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    
Data representing this instance that are suitable the RPC transmission.
 - 
  
    
      #type  ⇒ Symbol 
    
    
  
  
  
  
  
  
  
  
  
    
Element type.
 - 
  
    
      #url  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
URL of the page that owns the element.
 - #url=(url) ⇒ Object
 
Methods included from Utilities
available_port, available_port_mutex, bytes_to_kilobytes, bytes_to_megabytes, caller_name, caller_path, cookie_decode, cookie_encode, cookies_from_file, cookies_from_parser, cookies_from_response, exception_jail, exclude_path?, follow_protocol?, form_decode, form_encode, forms_from_parser, forms_from_response, full_and_absolute_url?, generate_token, get_path, hms_to_seconds, html_decode, html_encode, include_path?, links_from_parser, links_from_response, normalize_url, page_from_response, page_from_url, parse_set_cookie, path_in_domain?, path_too_deep?, port_available?, rand_port, random_seed, redundant_path?, regexp_array_match, remove_constants, request_parse_body, seconds_to_hms, skip_page?, skip_path?, skip_resource?, skip_response?, to_absolute, uri_decode, uri_encode, uri_parse, uri_parse_query, uri_parser, uri_rewrite
Methods included from Capabilities::WithScope
Constructor Details
#initialize(options) ⇒ Base
Returns a new instance of Base.
      74 75 76 77 78 79 80 81  | 
    
      # File 'lib/arachni/element/base.rb', line 74 def initialize( ) if !([:url] || [:action]) fail 'Needs :url or :action option.' end @initialization_options = .dup self.url = [:url] || [:action] end  | 
  
Instance Attribute Details
#initialization_options ⇒ Object (readonly)
Returns Options used to initialize an identical element.
      72 73 74  | 
    
      # File 'lib/arachni/element/base.rb', line 72 def @initialization_options end  | 
  
#page ⇒ Page
Returns Page this element belongs to.
      68 69 70  | 
    
      # File 'lib/arachni/element/base.rb', line 68 def page @page end  | 
  
Class Method Details
.from_rpc_data(data) ⇒ Base
      195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223  | 
    
      # File 'lib/arachni/element/base.rb', line 195 def self.from_rpc_data( data ) instance = allocate data.each do |name, value| value = case name when 'dom' next if !value self::DOM.from_rpc_data( value ) when 'locator' next if !value Browser::ElementLocator.from_rpc_data( value ) when 'initialization_options' value.is_a?( Hash ) ? value.my_symbolize_keys( false ) : value when 'method' value.to_sym else value end instance.instance_variable_set( "@#{name}", value ) end instance.instance_variable_set( :@audit_options, {} ) instance end  | 
  
.too_big?(element) ⇒ Boolean
      225 226 227  | 
    
      # File 'lib/arachni/element/base.rb', line 225 def self.too_big?( element ) (element.is_a?( Numeric ) ? element : element.to_s.size) >= MAX_SIZE end  | 
  
.type ⇒ Symbol
Returns Element type.
      149 150 151  | 
    
      # File 'lib/arachni/element/base.rb', line 149 def self.type @type ||= name.split( ':' ).last.downcase.to_sym end  | 
  
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
      121 122 123  | 
    
      # File 'lib/arachni/element/base.rb', line 121 def ==( other ) hash == other.hash end  | 
  
#action ⇒ Object
      132 133 134  | 
    
      # File 'lib/arachni/element/base.rb', line 132 def action url end  | 
  
#dup ⇒ Object
      153 154 155 156 157  | 
    
      # File 'lib/arachni/element/base.rb', line 153 def dup dupped = self.class.new( self. ) dupped.page = page dupped end  | 
  
#hash ⇒ Object
      113 114 115  | 
    
      # File 'lib/arachni/element/base.rb', line 113 def hash id.hash end  | 
  
#id ⇒ String
Returns String uniquely identifying self.
      96 97 98  | 
    
      # File 'lib/arachni/element/base.rb', line 96 def id defined? super ? super : "#{action}:#{type}" end  | 
  
#marshal_dump ⇒ Object
      159 160 161 162 163 164 165  | 
    
      # File 'lib/arachni/element/base.rb', line 159 def marshal_dump instance_variables.inject({}) do |h, iv| next h if [:@page].include? iv h[iv] = instance_variable_get( iv ) h end end  | 
  
#marshal_load(h) ⇒ Object
      167 168 169  | 
    
      # File 'lib/arachni/element/base.rb', line 167 def marshal_load( h ) h.each { |k, v| instance_variable_set( k, v ) } end  | 
  
#persistent_hash ⇒ Object
      117 118 119  | 
    
      # File 'lib/arachni/element/base.rb', line 117 def persistent_hash id.persistent_hash end  | 
  
#prepare_for_report ⇒ Object
      91 92  | 
    
      # File 'lib/arachni/element/base.rb', line 91 def prepare_for_report end  | 
  
#reset ⇒ Element::Base
Returns Reset the element to its original state.
      86 87 88  | 
    
      # File 'lib/arachni/element/base.rb', line 86 def reset self end  | 
  
#to_h ⇒ Hash
Returns Simple representation of self.
      102 103 104 105 106 107 108  | 
    
      # File 'lib/arachni/element/base.rb', line 102 def to_h { class: self.class.to_s, type: type, url: url } end  | 
  
#to_hash ⇒ Object
      109 110 111  | 
    
      # File 'lib/arachni/element/base.rb', line 109 def to_hash to_h end  | 
  
#to_rpc_data ⇒ Hash
Returns Data representing this instance that are suitable the RPC transmission.
      173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191  | 
    
      # File 'lib/arachni/element/base.rb', line 173 def to_rpc_data data = marshal_dump.inject({}) do |h, (k, v)| h[k.to_s.gsub('@', '')] = v.to_rpc_data_or_self h end data.delete 'audit_options' data.delete 'scope' data['class'] = self.class.to_s data['initialization_options'] = if data['initialization_options'].is_a? Hash data['initialization_options'] = data['initialization_options'].my_stringify_keys(false) end data end  | 
  
#type ⇒ Symbol
Returns Element type.
      143 144 145  | 
    
      # File 'lib/arachni/element/base.rb', line 143 def type self.class.type end  | 
  
#url ⇒ String
Returns URL of the page that owns the element.
      128 129 130  | 
    
      # File 'lib/arachni/element/base.rb', line 128 def url @url end  | 
  
#url=(url) ⇒ Object
      137 138 139  | 
    
      # File 'lib/arachni/element/base.rb', line 137 def url=( url ) @url = normalize_url( url ).freeze end  |