Class: Acunetix::Vulnerability

Inherits:
Object
  • Object
show all
Includes:
Cleanup
Defined in:
lib/acunetix/vulnerability.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(xml_node) ⇒ Vulnerability

Accepts an XML node from Nokogiri::XML.



8
9
10
# File 'lib/acunetix/vulnerability.rb', line 8

def initialize(xml_node)
  @xml = xml_node
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object

This method is invoked by Ruby when a method that is not defined in this instance is called.

In our case we inspect the @method@ parameter and try to find the attribute, simple descendent or collection that it maps to in the XML tree.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/acunetix/vulnerability.rb', line 41

def method_missing(method, *args)
  # We could remove this check and return nil for any non-recognized tag.
  # The problem would be that it would make tricky to debug problems with
  # typos. For instance: <>.potr would return nil instead of raising an
  # exception
  unless supported_tags.include?(method)
    super
    return
  end

  translations_table = vulnerability_table.merge(evidence_table)

  method_name = translations_table.fetch(method, method.to_s.dasherize)

  # then we try the children tags
  tag = xml.at_xpath("./#{method_name}")
  if tag && !tag.text.blank?
    if tags_with_html_content.include?(method)
      return cleanup_html(tag.text)
    else
      return tag.text
    end
  else
    'n/a'
  end

  # nothing found
  return nil
end

Instance Attribute Details

#xmlObject

Returns the value of attribute xml.



5
6
7
# File 'lib/acunetix/vulnerability.rb', line 5

def xml
  @xml
end

Instance Method Details

#respond_to?(method, include_private = false) ⇒ Boolean

This allows external callers (and specs) to check for implemented properties

Returns:

  • (Boolean)


30
31
32
33
# File 'lib/acunetix/vulnerability.rb', line 30

def respond_to?(method, include_private=false)
  return true if supported_tags.include?(method.to_sym)
  super
end

#supported_tagsObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/acunetix/vulnerability.rb', line 12

def supported_tags
  [
    # Vulnerability fields
    :capec, :certainty, :confirmed, :cvss31_base, :cvss31_environmental,
    :cvss31_temporal, :cvss31_vector, :cvss_base, :cvss_environmental,
    :cvss_temporal, :cvss_vector, :cwe, :description, :exploitation_skills,
    :external_references, :hipaa, :impact, :iso27001, :name, :owasp,
    :owasppc, :pci32, :remedial_actions, :remedial_procedure,
    :remedy_references, :severity, :state, :type, :url, :wasc,

    # Evidence fields
    :http_request, :http_request_method,
    :http_response, :http_response_status_code, :http_response_duration
  ]
end