Module: Arachni::Element::Form::Capabilities::Mutable
- Includes:
- Capabilities::Mutable
- Defined in:
- lib/arachni/element/form/capabilities/mutable.rb
Overview
Extends Capabilities::Mutable with Arachni::Element::Form-specific functionality.
Constant Summary
Constants included from Capabilities::Mutable
Capabilities::Mutable::EXTRA_NAME, Capabilities::Mutable::FUZZ_NAME, Capabilities::Mutable::FUZZ_NAME_VALUE, Capabilities::Mutable::MUTATION_OPTIONS
Instance Attribute Summary
Attributes included from Capabilities::Mutable
#affected_input_name, #format, #seed
Instance Method Summary collapse
-
#each_mutation(payload, opts = {}) {|mutation| ... } ⇒ Object
Overrides Mutable#each_mutation adding support for mutations with:.
- #mutation_with_original_values ⇒ Object
-
#mutation_with_original_values? ⇒ Bool
‘true` if the element has not been mutated, `false` otherwise.
- #mutation_with_sample_values ⇒ Object
-
#mutation_with_sample_values? ⇒ Bool
‘true` if the element has been populated with sample (OptionGroups::Input.fill) values, `false` otherwise.
Methods included from Capabilities::Mutable
#affected_input_value, #affected_input_value=, #dup, #immutables, #inspect, #mutation?, #mutations, #reset, #switch_method, #to_h, #to_rpc_data
Instance Method Details
#each_mutation(payload, opts = {}) {|mutation| ... } ⇒ Object
Overrides Mutable#each_mutation adding support for mutations with:
-
Sample values (filled by OptionGroups::Input.fill).
-
Original values.
-
Password fields requiring identical values (in order to pass server-side validation)
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/arachni/element/form/capabilities/mutable.rb', line 66 def each_mutation( payload, opts = {} ) opts = MUTATION_OPTIONS.merge( opts ) generated = Arachni::Support::LookUp::HashSet.new( hasher: :mutable_id ) # Completely remove fake inputs prior to mutation generation, they'll # be restored at the end of this method. pre_inputs = @inputs @inputs = @inputs.reject{ |name, _| fake_field?( name ) } super( payload, opts ) do |elem| elem.mirror_password_fields yield elem if !generated.include?( elem ) generated << elem end return if opts[:skip_original] elem = self.dup elem.mutation_with_original_values elem.affected_input_name = ORIGINAL_VALUES yield elem if !generated.include?( elem ) generated << elem # Default values, in case they reveal new resources. if node inputs.keys.each do |input| next if field_type_for( input ) != :select node.xpath( "select[@name=\"#{input}\"]" ).css('option').each do |option| try_input do elem = self.dup elem.mutation_with_original_values elem.affected_input_name = input elem.affected_input_value = option['value'] || option.text yield elem if !generated.include?( elem ) generated << elem end end end end try_input do # Sample values, in case they reveal new resources. elem = self.dup elem.inputs = Arachni::Options.input.fill( inputs.dup ) elem.affected_input_name = SAMPLE_VALUES elem.mutation_with_sample_values yield elem if !generated.include?( elem ) generated << elem end ensure @inputs = pre_inputs end |
#mutation_with_original_values ⇒ Object
26 27 28 |
# File 'lib/arachni/element/form/capabilities/mutable.rb', line 26 def mutation_with_original_values @mutation_with_original_values = true end |
#mutation_with_original_values? ⇒ Bool
Returns ‘true` if the element has not been mutated, `false` otherwise.
22 23 24 |
# File 'lib/arachni/element/form/capabilities/mutable.rb', line 22 def mutation_with_original_values? !!@mutation_with_original_values end |
#mutation_with_sample_values ⇒ Object
39 40 41 |
# File 'lib/arachni/element/form/capabilities/mutable.rb', line 39 def mutation_with_sample_values @mutation_with_sample_values = true end |
#mutation_with_sample_values? ⇒ Bool
Returns ‘true` if the element has been populated with sample (OptionGroups::Input.fill) values, `false` otherwise.
35 36 37 |
# File 'lib/arachni/element/form/capabilities/mutable.rb', line 35 def mutation_with_sample_values? !!@mutation_with_sample_values end |