arachni 1.2.1 → 1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -0
- data/Gemfile +1 -1
- data/README.md +16 -5
- data/components/checks/active/ldap_injection/errors.txt +1 -0
- data/components/checks/active/source_code_disclosure.rb +1 -1
- data/components/checks/active/unvalidated_redirect.rb +6 -6
- data/components/checks/active/unvalidated_redirect_dom.rb +10 -7
- data/components/checks/passive/grep/captcha.rb +14 -5
- data/components/checks/passive/grep/form_upload.rb +7 -3
- data/components/checks/passive/grep/hsts.rb +3 -3
- data/components/checks/passive/grep/html_objects.rb +2 -3
- data/components/checks/passive/grep/http_only_cookies.rb +2 -3
- data/components/checks/passive/grep/insecure_cookies.rb +1 -1
- data/components/checks/passive/grep/password_autocomplete.rb +2 -2
- data/components/checks/passive/grep/unencrypted_password_forms.rb +7 -7
- data/components/checks/passive/grep/x_frame_options.rb +2 -2
- data/components/checks/passive/http_put.rb +2 -3
- data/components/path_extractors/comments.rb +3 -3
- data/components/path_extractors/scripts.rb +10 -1
- data/components/plugins/defaults/autothrottle.rb +27 -18
- data/components/plugins/defaults/meta/remedies/discovery.rb +30 -33
- data/components/plugins/defaults/meta/remedies/timing_attacks.rb +7 -11
- data/components/plugins/login_script.rb +9 -3
- data/components/plugins/proxy.rb +4 -3
- data/components/reporters/html.rb +11 -14
- data/components/reporters/html/default/issue.erb +13 -38
- data/components/reporters/html/default/issue/info.erb +1 -1
- data/components/reporters/html/default/summary/issues/by_name.erb +3 -3
- data/components/reporters/stdout.rb +62 -71
- data/components/reporters/xml.rb +26 -40
- data/components/reporters/xml/schema.xsd +43 -89
- data/lib/arachni/browser.rb +52 -3
- data/lib/arachni/browser/javascript.rb +3 -3
- data/lib/arachni/browser/javascript/scripts/taint_tracer.js +46 -25
- data/lib/arachni/browser_cluster.rb +61 -0
- data/lib/arachni/browser_cluster/job.rb +21 -1
- data/lib/arachni/browser_cluster/jobs/browser_provider.rb +3 -1
- data/lib/arachni/browser_cluster/jobs/resource_exploration.rb +2 -1
- data/lib/arachni/browser_cluster/jobs/resource_exploration/event_trigger.rb +2 -1
- data/lib/arachni/browser_cluster/jobs/taint_trace.rb +3 -2
- data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +1 -1
- data/lib/arachni/browser_cluster/worker.rb +5 -0
- data/lib/arachni/check/auditor.rb +22 -12
- data/lib/arachni/data/framework.rb +13 -1
- data/lib/arachni/data/issues.rb +9 -25
- data/lib/arachni/element/base.rb +9 -3
- data/lib/arachni/element/capabilities/analyzable.rb +2 -6
- data/lib/arachni/element/capabilities/analyzable/differential.rb +24 -7
- data/lib/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +23 -23
- data/lib/arachni/element/capabilities/auditable.rb +0 -6
- data/lib/arachni/element/capabilities/dom_only.rb +61 -0
- data/lib/arachni/element/capabilities/with_dom.rb +3 -1
- data/lib/arachni/element/cookie.rb +35 -5
- data/lib/arachni/element/cookie/dom.rb +13 -4
- data/lib/arachni/element/{capabilities/auditable/dom.rb → dom.rb} +20 -68
- data/lib/arachni/element/dom/capabilities/auditable.rb +29 -0
- data/lib/arachni/element/dom/capabilities/inputtable.rb +27 -0
- data/lib/arachni/element/dom/capabilities/mutable.rb +21 -0
- data/lib/arachni/element/dom/capabilities/submittable.rb +52 -0
- data/lib/arachni/element/form.rb +12 -1
- data/lib/arachni/element/form/capabilities/mutable.rb +2 -1
- data/lib/arachni/element/form/capabilities/with_dom.rb +0 -1
- data/lib/arachni/element/form/dom.rb +9 -3
- data/lib/arachni/element/header.rb +14 -33
- data/lib/arachni/element/header/capabilities/inputtable.rb +29 -0
- data/lib/arachni/element/header/capabilities/mutable.rb +51 -0
- data/lib/arachni/element/input/dom.rb +71 -0
- data/lib/arachni/element/json.rb +2 -0
- data/lib/arachni/element/link.rb +3 -0
- data/lib/arachni/element/link/capabilities/with_dom.rb +0 -1
- data/lib/arachni/element/link/dom.rb +16 -3
- data/lib/arachni/element/link/dom/capabilities/submittable.rb +29 -0
- data/lib/arachni/element/link_template.rb +3 -5
- data/lib/arachni/element/link_template/capabilities/inputtable.rb +5 -0
- data/lib/arachni/element/link_template/capabilities/with_dom.rb +0 -1
- data/lib/arachni/element/link_template/dom.rb +16 -3
- data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +29 -0
- data/lib/arachni/element/server.rb +3 -5
- data/lib/arachni/element/ui_form.rb +106 -0
- data/lib/arachni/element/ui_form/dom.rb +107 -0
- data/lib/arachni/element/ui_input.rb +62 -0
- data/lib/arachni/element/xml.rb +2 -1
- data/lib/arachni/framework.rb +7 -5
- data/lib/arachni/framework/parts/audit.rb +0 -1
- data/lib/arachni/framework/parts/check.rb +1 -0
- data/lib/arachni/framework/parts/data.rb +4 -0
- data/lib/arachni/framework/parts/state.rb +0 -2
- data/lib/arachni/http/client.rb +17 -6
- data/lib/arachni/http/proxy_server.rb +52 -5
- data/lib/arachni/http/request.rb +1 -1
- data/lib/arachni/issue.rb +34 -179
- data/lib/arachni/issue/severity.rb +2 -0
- data/lib/arachni/option_groups/audit.rb +22 -2
- data/lib/arachni/option_groups/browser_cluster.rb +15 -0
- data/lib/arachni/page.rb +3 -2
- data/lib/arachni/parser.rb +24 -5
- data/lib/arachni/platform/manager.rb +1 -2
- data/lib/arachni/rpc/server/framework.rb +3 -4
- data/lib/arachni/rpc/server/framework/multi_instance.rb +2 -1
- data/lib/arachni/session.rb +1 -1
- data/lib/arachni/trainer.rb +4 -7
- data/lib/arachni/watir/element.rb +12 -1
- data/lib/version +1 -1
- data/spec/arachni/browser/element_locator_spec.rb +43 -43
- data/spec/arachni/browser/javascript/dom_monitor_spec.rb +44 -44
- data/spec/arachni/browser/javascript/proxy/stub_spec.rb +17 -14
- data/spec/arachni/browser/javascript/proxy_spec.rb +24 -24
- data/spec/arachni/browser/javascript/taint_tracer/frame/called_function_spec.rb +11 -11
- data/spec/arachni/browser/javascript/taint_tracer/frame_spec.rb +7 -7
- data/spec/arachni/browser/javascript/taint_tracer/sink/data_flow_spec.rb +13 -13
- data/spec/arachni/browser/javascript/taint_tracer/sink/execution_flow_spec.rb +7 -7
- data/spec/arachni/browser/javascript/taint_tracer_spec.rb +568 -558
- data/spec/arachni/browser/javascript_spec.rb +73 -63
- data/spec/arachni/browser_cluster/job/result_spec.rb +3 -3
- data/spec/arachni/browser_cluster/job_spec.rb +68 -48
- data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger/result_spec.rb +2 -2
- data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger_spec.rb +5 -4
- data/spec/arachni/browser_cluster/jobs/resource_exploration/result_spec.rb +2 -2
- data/spec/arachni/browser_cluster/jobs/resource_exploration_spec.rb +5 -5
- data/spec/arachni/browser_cluster/worker_spec.rb +87 -70
- data/spec/arachni/browser_cluster_spec.rb +64 -39
- data/spec/arachni/browser_spec.rb +692 -527
- data/spec/arachni/check/auditor_spec.rb +177 -147
- data/spec/arachni/check/base_spec.rb +33 -33
- data/spec/arachni/check/manager_spec.rb +15 -15
- data/spec/arachni/component/base_spec.rb +8 -8
- data/spec/arachni/component/manager_spec.rb +100 -99
- data/spec/arachni/component/options/address_spec.rb +3 -3
- data/spec/arachni/component/options/base_spec.rb +7 -7
- data/spec/arachni/component/options/bool_spec.rb +9 -9
- data/spec/arachni/component/options/float_spec.rb +6 -6
- data/spec/arachni/component/options/int_spec.rb +5 -5
- data/spec/arachni/component/options/multiple_choice_spec.rb +12 -12
- data/spec/arachni/component/options/object_spec.rb +2 -2
- data/spec/arachni/component/options/path_spec.rb +3 -3
- data/spec/arachni/component/options/port_spec.rb +5 -5
- data/spec/arachni/component/options/string_spec.rb +3 -3
- data/spec/arachni/component/options/url_spec.rb +4 -4
- data/spec/arachni/component/utilities_spec.rb +2 -2
- data/spec/arachni/data/framework/rpc_spec.rb +10 -9
- data/spec/arachni/data/framework_spec.rb +65 -46
- data/spec/arachni/data/issues_spec.rb +39 -77
- data/spec/arachni/data/plugins_spec.rb +11 -11
- data/spec/arachni/data/session_spec.rb +6 -6
- data/spec/arachni/data_spec.rb +8 -8
- data/spec/arachni/element/body_spec.rb +10 -10
- data/spec/arachni/element/capabilities/analyzable/differential_spec.rb +39 -21
- data/spec/arachni/element/capabilities/analyzable/{taint_spec.rb → signature_spec.rb} +63 -63
- data/spec/arachni/element/capabilities/analyzable/timeout_spec.rb +51 -51
- data/spec/arachni/element/capabilities/with_scope/scope_spec.rb +5 -5
- data/spec/arachni/element/cookie/dom_spec.rb +37 -18
- data/spec/arachni/element/cookie_spec.rb +206 -139
- data/spec/arachni/element/form/dom_spec.rb +36 -19
- data/spec/arachni/element/form_spec.rb +210 -187
- data/spec/arachni/element/generic_dom_spec.rb +14 -14
- data/spec/arachni/element/header_spec.rb +35 -17
- data/spec/arachni/element/json_spec.rb +53 -31
- data/spec/arachni/element/link/dom_spec.rb +46 -28
- data/spec/arachni/element/link_spec.rb +58 -40
- data/spec/arachni/element/link_template/dom_spec.rb +47 -29
- data/spec/arachni/element/link_template_spec.rb +79 -61
- data/spec/arachni/element/path_spec.rb +1 -1
- data/spec/arachni/element/server_spec.rb +33 -32
- data/spec/arachni/element/ui_form/ui_form_dom_spec.rb +164 -0
- data/spec/arachni/element/ui_form_spec.rb +242 -0
- data/spec/arachni/element/ui_input/dom_spec.rb +157 -0
- data/spec/arachni/element/ui_input_spec.rb +136 -0
- data/spec/arachni/element/xml_spec.rb +42 -24
- data/spec/arachni/element_filter_spec.rb +49 -48
- data/spec/arachni/error_spec.rb +3 -3
- data/spec/arachni/framework/parts/audit_spec.rb +64 -63
- data/spec/arachni/framework/parts/browser_spec.rb +16 -16
- data/spec/arachni/framework/parts/check_spec.rb +3 -3
- data/spec/arachni/framework/parts/data_spec.rb +48 -48
- data/spec/arachni/framework/parts/platform_spec.rb +3 -3
- data/spec/arachni/framework/parts/plugin_spec.rb +7 -6
- data/spec/arachni/framework/parts/report_spec.rb +7 -7
- data/spec/arachni/framework/parts/scope_spec.rb +16 -16
- data/spec/arachni/framework/parts/state_spec.rb +68 -69
- data/spec/arachni/framework_spec.rb +39 -31
- data/spec/arachni/http/client/dynamic_404_handlers_spec.rb +32 -32
- data/spec/arachni/http/client_spec.rb +219 -208
- data/spec/arachni/http/cookie_jar_spec.rb +72 -72
- data/spec/arachni/http/headers_spec.rb +14 -14
- data/spec/arachni/http/proxy_server_spec.rb +43 -42
- data/spec/arachni/http/request_spec.rb +105 -103
- data/spec/arachni/http/response/scope_spec.rb +24 -24
- data/spec/arachni/http/response_spec.rb +50 -49
- data/spec/arachni/issue/severity_spec.rb +10 -9
- data/spec/arachni/issue_spec.rb +71 -369
- data/spec/arachni/option_groups/audit_spec.rb +114 -114
- data/spec/arachni/option_groups/browser_cluster_spec.rb +20 -3
- data/spec/arachni/option_groups/datastore_spec.rb +6 -6
- data/spec/arachni/option_groups/dispatcher_spec.rb +19 -19
- data/spec/arachni/option_groups/http_spec.rb +11 -11
- data/spec/arachni/option_groups/input_spec.rb +31 -27
- data/spec/arachni/option_groups/output_spec.rb +2 -2
- data/spec/arachni/option_groups/paths_spec.rb +17 -17
- data/spec/arachni/option_groups/rpc_spec.rb +2 -2
- data/spec/arachni/option_groups/scope_spec.rb +40 -40
- data/spec/arachni/option_groups/session_spec.rb +6 -5
- data/spec/arachni/option_groups/snapshot_spec.rb +4 -4
- data/spec/arachni/options_spec.rb +46 -45
- data/spec/arachni/page/dom/transition_spec.rb +74 -72
- data/spec/arachni/page/dom_spec.rb +35 -35
- data/spec/arachni/page/scope_spec.rb +15 -15
- data/spec/arachni/page_spec.rb +217 -217
- data/spec/arachni/parser_spec.rb +106 -104
- data/spec/arachni/platform/fingerprinter_spec.rb +17 -14
- data/spec/arachni/platform/list_spec.rb +33 -33
- data/spec/arachni/platform/manager_spec.rb +67 -64
- data/spec/arachni/plugin/base_spec.rb +10 -10
- data/spec/arachni/plugin/manager_spec.rb +38 -37
- data/spec/arachni/report_spec.rb +43 -40
- data/spec/arachni/reporter/base_spec.rb +15 -15
- data/spec/arachni/reporter/manager_spec.rb +4 -4
- data/spec/arachni/reporter/options_spec.rb +6 -6
- data/spec/arachni/rpc/client/base_spec.rb +6 -6
- data/spec/arachni/rpc/client/dispatcher_spec.rb +2 -2
- data/spec/arachni/rpc/client/instance_spec.rb +6 -6
- data/spec/arachni/rpc/server/active_options_spec.rb +11 -8
- data/spec/arachni/rpc/server/base_spec.rb +5 -5
- data/spec/arachni/rpc/server/checks/manager_spec.rb +8 -8
- data/spec/arachni/rpc/server/dispatcher/node_spec.rb +37 -37
- data/spec/arachni/rpc/server/dispatcher/service_spec.rb +15 -14
- data/spec/arachni/rpc/server/dispatcher_spec.rb +36 -35
- data/spec/arachni/rpc/server/framework/distributor_spec.rb +36 -36
- data/spec/arachni/rpc/server/framework_multi_spec.rb +340 -336
- data/spec/arachni/rpc/server/framework_spec.rb +90 -85
- data/spec/arachni/rpc/server/instance_spec.rb +126 -107
- data/spec/arachni/rpc/server/output_spec.rb +1 -1
- data/spec/arachni/rpc/server/plugin/manager_spec.rb +6 -6
- data/spec/arachni/ruby/array_spec.rb +42 -42
- data/spec/arachni/ruby/hash_spec.rb +20 -18
- data/spec/arachni/ruby/io_spec.rb +2 -2
- data/spec/arachni/ruby/object_spec.rb +1 -1
- data/spec/arachni/ruby/set_spec.rb +3 -3
- data/spec/arachni/ruby/string_spec.rb +30 -30
- data/spec/arachni/ruby/webrick_spec.rb +2 -2
- data/spec/arachni/scope_spec.rb +1 -1
- data/spec/arachni/session_spec.rb +67 -64
- data/spec/arachni/snapshot_spec.rb +15 -15
- data/spec/arachni/state/audit_spec.rb +11 -11
- data/spec/arachni/state/element_filter_spec.rb +6 -6
- data/spec/arachni/state/framework/rpc_spec.rb +12 -12
- data/spec/arachni/state/framework_spec.rb +125 -121
- data/spec/arachni/state/http_spec.rb +7 -7
- data/spec/arachni/state/options_spec.rb +7 -7
- data/spec/arachni/state/plugins_spec.rb +8 -8
- data/spec/arachni/state_spec.rb +10 -10
- data/spec/arachni/support/buffer/autoflush_spec.rb +16 -16
- data/spec/arachni/support/buffer/base_spec.rb +39 -39
- data/spec/arachni/support/cache/least_cost_replacement_spec.rb +18 -18
- data/spec/arachni/support/cache/least_recently_pushed_spec.rb +24 -24
- data/spec/arachni/support/cache/least_recently_used_spec.rb +20 -20
- data/spec/arachni/support/cache/preference_spec.rb +4 -4
- data/spec/arachni/support/cache/random_replacement_spec.rb +8 -8
- data/spec/arachni/support/crypto/rsa_aes_cbc_spec.rb +1 -1
- data/spec/arachni/support/database/hash_spec.rb +44 -43
- data/spec/arachni/support/database/queue_spec.rb +27 -27
- data/spec/arachni/support/lookup/hash_set_spec.rb +8 -8
- data/spec/arachni/support/lookup/moolb_spec.rb +3 -3
- data/spec/arachni/support/mixins/observable_spec.rb +6 -6
- data/spec/arachni/support/signature_spec.rb +19 -19
- data/spec/arachni/trainer_spec.rb +39 -39
- data/spec/arachni/typhoeus/hydra_spec.rb +2 -2
- data/spec/arachni/uri/scope_spec.rb +66 -66
- data/spec/arachni/uri_spec.rb +107 -105
- data/spec/arachni/utilities_spec.rb +40 -40
- data/spec/components/checks/active/csrf_spec.rb +8 -8
- data/spec/components/checks/active/no_sql_injection_spec.rb +1 -1
- data/spec/components/checks/active/sql_injection_spec.rb +16 -16
- data/spec/components/checks/active/trainer_spec.rb +4 -4
- data/spec/components/checks/active/unvalidated_redirect_dom_spec.rb +4 -2
- data/spec/components/checks/active/xpath_injection_spec.rb +1 -1
- data/spec/components/checks/active/xss_dom_script_context_spec.rb +51 -21
- data/spec/components/checks/active/xss_dom_spec.rb +46 -24
- data/spec/components/checks/passive/allowed_methods_spec.rb +1 -1
- data/spec/components/checks/passive/grep/cookie_set_for_parent_domain_spec.rb +1 -1
- data/spec/components/checks/passive/grep/hsts_spec.rb +2 -2
- data/spec/components/checks/passive/grep/http_only_cookies_spec.rb +1 -1
- data/spec/components/checks/passive/grep/insecure_cookies_spec.rb +1 -1
- data/spec/components/checks/passive/grep/insecure_cors_policy_spec.rb +2 -2
- data/spec/components/checks/passive/grep/password_autocomplete_spec.rb +1 -1
- data/spec/components/checks/passive/grep/private_ip_spec.rb +3 -3
- data/spec/components/checks/passive/grep/unencrypted_password_forms_spec.rb +1 -1
- data/spec/components/checks/passive/grep/x_frame_options_spec.rb +2 -2
- data/spec/components/checks/passive/interesting_responses_spec.rb +2 -2
- data/spec/components/checks/passive/webdav_spec.rb +1 -1
- data/spec/components/checks/passive/xst_spec.rb +1 -1
- data/spec/components/fingerprinters/servers/apache_spec.rb +2 -2
- data/spec/components/path_extractors/comments_spec.rb +5 -1
- data/spec/components/path_extractors/scripts_spec.rb +5 -2
- data/spec/components/plugins/autologin_spec.rb +22 -22
- data/spec/components/plugins/autothrottle_spec.rb +6 -5
- data/spec/components/plugins/content_types_spec.rb +4 -4
- data/spec/components/plugins/cookie_collector_spec.rb +5 -5
- data/spec/components/plugins/exec_spec.rb +12 -12
- data/spec/components/plugins/form_dicattack_spec.rb +3 -3
- data/spec/components/plugins/headers_collector_spec.rb +8 -8
- data/spec/components/plugins/healthmap_spec.rb +3 -3
- data/spec/components/plugins/http_dicattack_spec.rb +3 -3
- data/spec/components/plugins/login_script_spec.rb +79 -22
- data/spec/components/plugins/meta/remedies/discovery_spec.rb +3 -2
- data/spec/components/plugins/meta/remedies/timing_attacks_spec.rb +3 -3
- data/spec/components/plugins/meta/uniformity_spec.rb +2 -2
- data/spec/components/plugins/restrict_to_dom_state_spec.rb +1 -1
- data/spec/components/plugins/script_spec.rb +1 -1
- data/spec/components/plugins/uncommon_headers_spec.rb +2 -2
- data/spec/components/plugins/vector_collector_spec.rb +2 -2
- data/spec/components/plugins/vector_feed_spec.rb +40 -40
- data/spec/components/plugins/waf_detector_spec.rb +6 -6
- data/spec/components/reporters/json_spec.rb +4 -4
- data/spec/components/reporters/marshal_spec.rb +2 -2
- data/spec/components/reporters/yaml_spec.rb +3 -2
- data/spec/external/wavsep/active/sqli_spec.rb +1 -3
- data/spec/spec_helper.rb +4 -0
- data/spec/support/factories/element/ui_form.rb +14 -0
- data/spec/support/factories/element/ui_input.rb +13 -0
- data/spec/support/factories/issue.rb +0 -13
- data/spec/support/fixtures/report.afr +0 -0
- data/spec/support/fixtures/{taint_check/taint.rb → signature_check/signature.rb} +2 -2
- data/spec/support/helpers/browser_cluster/jobs/taint_tracer.rb +11 -11
- data/spec/support/helpers/framework.rb +1 -1
- data/spec/support/helpers/pages.rb +2 -2
- data/spec/support/servers/arachni/browser.rb +139 -0
- data/spec/support/servers/arachni/browser/javascript/taint_tracer.rb +40 -0
- data/spec/support/servers/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +0 -0
- data/spec/support/servers/arachni/element/input/input_dom.rb +102 -0
- data/spec/support/servers/arachni/element/ui_form/ui_form_dom.rb +238 -0
- data/spec/support/servers/checks/active/trainer_check.rb +7 -7
- data/spec/support/servers/checks/active/unvalidated_redirect_dom.rb +22 -6
- data/spec/support/servers/checks/active/xss_dom.rb +50 -0
- data/spec/support/servers/checks/active/xss_dom_script_context.rb +53 -0
- data/spec/support/shared/browser/javascript/taint_tracer/sink/base.rb +6 -6
- data/spec/support/shared/check.rb +10 -12
- data/spec/support/shared/component/options/base.rb +24 -24
- data/spec/support/shared/element/base.rb +25 -25
- data/spec/support/shared/element/capabilities/auditable.rb +116 -140
- data/spec/support/shared/element/capabilities/dom_only.rb +65 -0
- data/spec/support/shared/element/capabilities/inputtable.rb +71 -86
- data/spec/support/shared/element/capabilities/mutable.rb +122 -111
- data/spec/support/shared/element/capabilities/refreshable.rb +10 -10
- data/spec/support/shared/element/capabilities/{submitable.rb → submittable.rb} +26 -26
- data/spec/support/shared/element/capabilities/with_auditor.rb +10 -10
- data/spec/support/shared/element/capabilities/with_dom.rb +8 -8
- data/spec/support/shared/element/capabilities/with_node.rb +4 -6
- data/spec/support/shared/element/capabilities/with_scope.rb +2 -2
- data/spec/support/shared/element/capabilities/with_source.rb +6 -8
- data/spec/support/shared/element/dom.rb +144 -0
- data/spec/support/shared/element/dom/auditable.rb +42 -0
- data/spec/support/shared/element/dom/inputtable.rb +5 -0
- data/spec/support/shared/element/dom/mutable.rb +3 -0
- data/spec/support/shared/element/dom/submittable.rb +119 -0
- data/spec/support/shared/external/wavsep.rb +3 -3
- data/spec/support/shared/fingerprinter.rb +2 -2
- data/spec/support/shared/framework.rb +1 -1
- data/spec/support/shared/http/message.rb +9 -9
- data/spec/support/shared/option_group.rb +17 -17
- data/spec/support/shared/path_extractor.rb +1 -1
- data/spec/support/shared/plugin.rb +2 -2
- data/spec/support/shared/support/cache.rb +57 -57
- data/spec/support/shared/support/lookup.rb +25 -25
- data/ui/cli/framework.rb +22 -11
- data/ui/cli/framework/option_parser.rb +15 -0
- data/ui/cli/option_parser.rb +8 -1
- data/ui/cli/output.rb +2 -1
- metadata +54 -20
- data/components/checks/active/xss_dom_inputs.rb +0 -236
- data/spec/components/checks/active/xss_dom_inputs_spec.rb +0 -30
- data/spec/support/servers/checks/active/xss_dom_inputs.rb +0 -59
- data/spec/support/shared/element/capabilities/auditable/dom.rb +0 -322
@@ -30,40 +30,40 @@ describe Arachni::ElementFilter do
|
|
30
30
|
|
31
31
|
describe '#forms' do
|
32
32
|
it "keeps track of forms by #{Arachni::Element::Form}#id" do
|
33
|
-
subject.forms.
|
33
|
+
expect(subject.forms).to be_empty
|
34
34
|
subject.update_forms form
|
35
|
-
subject.forms.
|
36
|
-
subject.forms.
|
35
|
+
expect(subject.forms).to be_any
|
36
|
+
expect(subject.forms).to include form.id
|
37
37
|
end
|
38
38
|
|
39
39
|
it "returns a #{Arachni::Support::LookUp::HashSet}" do
|
40
|
-
subject.forms.
|
40
|
+
expect(subject.forms).to be_kind_of Arachni::Support::LookUp::HashSet
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
describe '#links' do
|
45
45
|
it "keeps track of links by #{Arachni::Element::Link}#id" do
|
46
|
-
subject.links.
|
46
|
+
expect(subject.links).to be_empty
|
47
47
|
subject.update_links link
|
48
|
-
subject.links.
|
49
|
-
subject.links.
|
48
|
+
expect(subject.links).to be_any
|
49
|
+
expect(subject.links).to include link.id
|
50
50
|
end
|
51
51
|
|
52
52
|
it "returns a #{Arachni::Support::LookUp::HashSet}" do
|
53
|
-
subject.links.
|
53
|
+
expect(subject.links).to be_kind_of Arachni::Support::LookUp::HashSet
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
describe '#cookies' do
|
58
58
|
it "keeps track of cookies by #{Arachni::Element::Link}#id" do
|
59
|
-
subject.cookies.
|
59
|
+
expect(subject.cookies).to be_empty
|
60
60
|
subject.update_cookies cookie
|
61
|
-
subject.cookies.
|
62
|
-
subject.cookies.
|
61
|
+
expect(subject.cookies).to be_any
|
62
|
+
expect(subject.cookies).to include cookie.id
|
63
63
|
end
|
64
64
|
|
65
65
|
it "returns a #{Arachni::Support::LookUp::HashSet}" do
|
66
|
-
subject.cookies.
|
66
|
+
expect(subject.cookies).to be_kind_of Arachni::Support::LookUp::HashSet
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -74,15 +74,15 @@ describe Arachni::ElementFilter do
|
|
74
74
|
subject.update_forms form
|
75
75
|
subject.update_cookies cookie
|
76
76
|
|
77
|
-
subject.
|
78
|
-
subject.
|
79
|
-
subject.
|
77
|
+
expect(subject).to include link
|
78
|
+
expect(subject).to include form
|
79
|
+
expect(subject).to include cookie
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
83
|
context 'when the given element is not included' do
|
84
84
|
it 'returns false' do
|
85
|
-
subject.
|
85
|
+
expect(subject).not_to include link
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -90,16 +90,16 @@ describe Arachni::ElementFilter do
|
|
90
90
|
describe '#forms_include?' do
|
91
91
|
context 'when #forms includes the given form' do
|
92
92
|
it 'returns true' do
|
93
|
-
subject.forms.
|
93
|
+
expect(subject.forms).to be_empty
|
94
94
|
subject.update_forms form
|
95
|
-
subject.forms.
|
96
|
-
subject.forms_include?( form ).
|
95
|
+
expect(subject.forms).to be_any
|
96
|
+
expect(subject.forms_include?( form )).to be_truthy
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
100
|
context 'when #forms does not include the given form' do
|
101
101
|
it 'returns false' do
|
102
|
-
subject.forms_include?( form ).
|
102
|
+
expect(subject.forms_include?( form )).to be_falsey
|
103
103
|
end
|
104
104
|
end
|
105
105
|
end
|
@@ -107,16 +107,16 @@ describe Arachni::ElementFilter do
|
|
107
107
|
describe '#links_include?' do
|
108
108
|
context 'when #links includes the given form' do
|
109
109
|
it 'returns true' do
|
110
|
-
subject.links.
|
110
|
+
expect(subject.links).to be_empty
|
111
111
|
subject.update_links link
|
112
|
-
subject.links.
|
113
|
-
subject.links_include?( link ).
|
112
|
+
expect(subject.links).to be_any
|
113
|
+
expect(subject.links_include?( link )).to be_truthy
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
117
|
context 'when #links does not include the given form' do
|
118
118
|
it 'returns false' do
|
119
|
-
subject.links_include?( link ).
|
119
|
+
expect(subject.links_include?( link )).to be_falsey
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
@@ -124,16 +124,16 @@ describe Arachni::ElementFilter do
|
|
124
124
|
describe '#cookies_include?' do
|
125
125
|
context 'when #cookies includes the given form' do
|
126
126
|
it 'returns true' do
|
127
|
-
subject.cookies.
|
127
|
+
expect(subject.cookies).to be_empty
|
128
128
|
subject.update_cookies cookie
|
129
|
-
subject.cookies.
|
130
|
-
subject.cookies_include?( cookie ).
|
129
|
+
expect(subject.cookies).to be_any
|
130
|
+
expect(subject.cookies_include?( cookie )).to be_truthy
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
context 'when #cookies does not include the given form' do
|
135
135
|
it 'returns false' do
|
136
|
-
subject.cookies_include?( cookie ).
|
136
|
+
expect(subject.cookies_include?( cookie )).to be_falsey
|
137
137
|
end
|
138
138
|
end
|
139
139
|
end
|
@@ -144,20 +144,20 @@ describe Arachni::ElementFilter do
|
|
144
144
|
subject.update_from_page( page )
|
145
145
|
|
146
146
|
(page.links | page.forms | page.cookies).each do |element|
|
147
|
-
subject.
|
147
|
+
expect(subject).to include element
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
151
|
it 'returns the amount of new ones' do
|
152
152
|
subject.update_links( page.links )
|
153
|
-
subject.update_from_page( page ).
|
153
|
+
expect(subject.update_from_page( page )).to eq((page.forms | page.cookies).size)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
157
|
context 'when there are no new elements' do
|
158
158
|
it 'returns 0' do
|
159
159
|
subject.update_from_page( page )
|
160
|
-
subject.update_from_page( page ).
|
160
|
+
expect(subject.update_from_page( page )).to eq(0)
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
@@ -165,33 +165,34 @@ describe Arachni::ElementFilter do
|
|
165
165
|
describe '#update_from_page_cache' do
|
166
166
|
context 'when there are new elements in the Page#cache' do
|
167
167
|
it 'adds them to the list' do
|
168
|
-
page.cache.
|
168
|
+
expect(page.cache).not_to include :links
|
169
169
|
page.links
|
170
|
-
page.cache[:links].
|
170
|
+
expect(page.cache[:links]).to eq(page.links)
|
171
171
|
|
172
172
|
subject.update_from_page_cache( page )
|
173
173
|
|
174
174
|
page.links.each do |element|
|
175
|
-
subject.
|
175
|
+
expect(subject).to include element
|
176
176
|
end
|
177
177
|
|
178
178
|
(page.forms | page.cookies).each do |element|
|
179
|
-
subject.
|
179
|
+
expect(subject).not_to include element
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
183
|
it 'returns the amount of new ones' do
|
184
184
|
page.links
|
185
|
-
subject.update_from_page_cache( page ).
|
185
|
+
expect(subject.update_from_page_cache( page )).to eq(page.links.size)
|
186
186
|
end
|
187
187
|
end
|
188
188
|
|
189
189
|
context 'when there are no new elements in the Page#cache' do
|
190
190
|
it 'returns 0' do
|
191
|
-
page.elements.
|
192
|
-
subject.update_from_page_cache( page ).
|
191
|
+
expect(page.elements).to be_any
|
192
|
+
expect(subject.update_from_page_cache( page )).to eq(
|
193
193
|
(page.links | page.forms | page.cookies).size
|
194
|
-
|
194
|
+
)
|
195
|
+
expect(subject.update_from_page_cache( page )).to eq(0)
|
195
196
|
end
|
196
197
|
end
|
197
198
|
end
|
@@ -200,19 +201,19 @@ describe Arachni::ElementFilter do
|
|
200
201
|
context 'when there are new links' do
|
201
202
|
it 'adds them to the list' do
|
202
203
|
subject.update_links( link )
|
203
|
-
subject.links_include?( link ).
|
204
|
+
expect(subject.links_include?( link )).to be_truthy
|
204
205
|
end
|
205
206
|
|
206
207
|
it 'returns the amount of new ones' do
|
207
208
|
subject.update_links( page.links )
|
208
|
-
subject.update_links( [link] | page.links ).
|
209
|
+
expect(subject.update_links( [link] | page.links )).to eq(1)
|
209
210
|
end
|
210
211
|
end
|
211
212
|
|
212
213
|
context 'when there are no new links' do
|
213
214
|
it 'returns 0' do
|
214
215
|
subject.update_links( page.links )
|
215
|
-
subject.update_links( page.links ).
|
216
|
+
expect(subject.update_links( page.links )).to eq(0)
|
216
217
|
end
|
217
218
|
end
|
218
219
|
end
|
@@ -221,19 +222,19 @@ describe Arachni::ElementFilter do
|
|
221
222
|
context 'when there are new links' do
|
222
223
|
it 'adds them to the list' do
|
223
224
|
subject.update_forms( form )
|
224
|
-
subject.forms_include?( form ).
|
225
|
+
expect(subject.forms_include?( form )).to be_truthy
|
225
226
|
end
|
226
227
|
|
227
228
|
it 'returns the amount of new ones' do
|
228
229
|
subject.update_forms( page.forms )
|
229
|
-
subject.update_forms( [form] | page.forms ).
|
230
|
+
expect(subject.update_forms( [form] | page.forms )).to eq(1)
|
230
231
|
end
|
231
232
|
end
|
232
233
|
|
233
234
|
context 'when there are no new links' do
|
234
235
|
it 'returns 0' do
|
235
236
|
subject.update_forms( page.forms )
|
236
|
-
subject.update_forms( page.forms ).
|
237
|
+
expect(subject.update_forms( page.forms )).to eq(0)
|
237
238
|
end
|
238
239
|
end
|
239
240
|
end
|
@@ -242,19 +243,19 @@ describe Arachni::ElementFilter do
|
|
242
243
|
context 'when there are new links' do
|
243
244
|
it 'adds them to the list' do
|
244
245
|
subject.update_cookies( cookie )
|
245
|
-
subject.cookies_include?( cookie ).
|
246
|
+
expect(subject.cookies_include?( cookie )).to be_truthy
|
246
247
|
end
|
247
248
|
|
248
249
|
it 'returns the amount of new ones' do
|
249
250
|
subject.update_cookies( page.cookies )
|
250
|
-
subject.update_cookies( [cookie] | page.cookies ).
|
251
|
+
expect(subject.update_cookies( [cookie] | page.cookies )).to eq(1)
|
251
252
|
end
|
252
253
|
end
|
253
254
|
|
254
255
|
context 'when there are no new cookies' do
|
255
256
|
it 'returns 0' do
|
256
257
|
subject.update_cookies( page.cookies )
|
257
|
-
subject.update_cookies( page.cookies ).
|
258
|
+
expect(subject.update_cookies( page.cookies )).to eq(0)
|
258
259
|
end
|
259
260
|
end
|
260
261
|
end
|
data/spec/arachni/error_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Arachni::Error do
|
4
4
|
it 'inherits from StandardError' do
|
5
|
-
(Arachni::Error <= StandardError).
|
5
|
+
expect(Arachni::Error <= StandardError).to be_truthy
|
6
6
|
|
7
7
|
caught = false
|
8
8
|
begin
|
@@ -10,7 +10,7 @@ describe Arachni::Error do
|
|
10
10
|
rescue StandardError => e
|
11
11
|
caught = true
|
12
12
|
end
|
13
|
-
caught.
|
13
|
+
expect(caught).to be_truthy
|
14
14
|
|
15
15
|
caught = false
|
16
16
|
begin
|
@@ -18,6 +18,6 @@ describe Arachni::Error do
|
|
18
18
|
rescue
|
19
19
|
caught = true
|
20
20
|
end
|
21
|
-
caught.
|
21
|
+
expect(caught).to be_truthy
|
22
22
|
end
|
23
23
|
end
|
@@ -11,24 +11,24 @@ describe Arachni::Framework::Parts::Audit do
|
|
11
11
|
f.options.url = @url
|
12
12
|
f.options.scope.restrict_paths << @url + '/binary'
|
13
13
|
f.options.audit.elements :links, :forms, :cookies
|
14
|
-
f.checks.load :
|
14
|
+
f.checks.load :signature
|
15
15
|
|
16
16
|
f.on_page_audit { |p| audited << p.url }
|
17
17
|
f.run
|
18
18
|
end
|
19
|
-
audited.sort.
|
19
|
+
expect(audited.sort).to eq([@url + '/binary'].sort)
|
20
20
|
|
21
21
|
audited = []
|
22
22
|
Arachni::Framework.new do |f|
|
23
23
|
f.options.url = @url
|
24
24
|
f.options.scope.restrict_paths << @url + '/binary'
|
25
25
|
f.options.scope.exclude_binaries = true
|
26
|
-
f.checks.load :
|
26
|
+
f.checks.load :signature
|
27
27
|
|
28
28
|
f.on_page_audit { |p| audited << p.url }
|
29
29
|
f.run
|
30
30
|
end
|
31
|
-
audited.
|
31
|
+
expect(audited).to be_empty
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -38,13 +38,13 @@ describe Arachni::Framework::Parts::Audit do
|
|
38
38
|
f.options.url = "#{@url}/elem_combo"
|
39
39
|
f.options.scope.extend_paths = %w(/some/stuff /more/stuff)
|
40
40
|
f.options.audit.elements :links, :forms, :cookies
|
41
|
-
f.checks.load :
|
41
|
+
f.checks.load :signature
|
42
42
|
|
43
43
|
f.run
|
44
44
|
|
45
|
-
f.report.sitemap.
|
46
|
-
f.report.sitemap.
|
47
|
-
f.report.sitemap.size.
|
45
|
+
expect(f.report.sitemap).to include "#{@url}/some/stuff"
|
46
|
+
expect(f.report.sitemap).to include "#{@url}/more/stuff"
|
47
|
+
expect(f.report.sitemap.size).to be > 3
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -55,13 +55,13 @@ describe Arachni::Framework::Parts::Audit do
|
|
55
55
|
f.options.url = "#{@url}/elem_combo"
|
56
56
|
f.options.scope.restrict_paths = %w(/log_remote_file_if_exists/true)
|
57
57
|
f.options.audit.elements :links, :forms, :cookies
|
58
|
-
f.checks.load :
|
58
|
+
f.checks.load :signature
|
59
59
|
|
60
60
|
f.run
|
61
61
|
|
62
62
|
sitemap = f.report.sitemap.map { |u, _| u.split( '?' ).first }
|
63
|
-
sitemap.sort.uniq.
|
64
|
-
map { |p| f.to_absolute( p ) }.sort
|
63
|
+
expect(sitemap.sort.uniq).to eq(f.options.scope.restrict_paths.
|
64
|
+
map { |p| f.to_absolute( p ) }.sort)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -73,9 +73,9 @@ describe Arachni::Framework::Parts::Audit do
|
|
73
73
|
@options.url = 'http://blahaha'
|
74
74
|
@options.scope.restrict_paths = [@options.url]
|
75
75
|
|
76
|
-
subject.checks.load :
|
76
|
+
subject.checks.load :signature
|
77
77
|
subject.run
|
78
|
-
subject.failures.
|
78
|
+
expect(subject.failures).to be_any
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -84,9 +84,9 @@ describe Arachni::Framework::Parts::Audit do
|
|
84
84
|
@options.url = @f_url + '/fail'
|
85
85
|
@options.scope.restrict_paths = [@options.url]
|
86
86
|
|
87
|
-
subject.checks.load :
|
87
|
+
subject.checks.load :signature
|
88
88
|
subject.run
|
89
|
-
subject.failures.
|
89
|
+
expect(subject.failures).to be_any
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -94,15 +94,15 @@ describe Arachni::Framework::Parts::Audit do
|
|
94
94
|
@options.url = @f_url + '/fail_4_times'
|
95
95
|
@options.scope.restrict_paths = [@options.url]
|
96
96
|
|
97
|
-
subject.checks.load :
|
97
|
+
subject.checks.load :signature
|
98
98
|
subject.run
|
99
|
-
subject.failures.
|
99
|
+
expect(subject.failures).to be_empty
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
describe '#http' do
|
104
104
|
it 'provides access to the HTTP interface' do
|
105
|
-
subject.http.is_a?( Arachni::HTTP::Client ).
|
105
|
+
expect(subject.http.is_a?( Arachni::HTTP::Client )).to be_truthy
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
@@ -112,9 +112,9 @@ describe Arachni::Framework::Parts::Audit do
|
|
112
112
|
@options.url = @f_url
|
113
113
|
@options.scope.restrict_paths = [@options.url]
|
114
114
|
|
115
|
-
subject.checks.load :
|
115
|
+
subject.checks.load :signature
|
116
116
|
subject.run
|
117
|
-
subject.failures.
|
117
|
+
expect(subject.failures).to be_empty
|
118
118
|
end
|
119
119
|
end
|
120
120
|
context 'when there are failed requests' do
|
@@ -122,9 +122,9 @@ describe Arachni::Framework::Parts::Audit do
|
|
122
122
|
@options.url = @f_url + '/fail'
|
123
123
|
@options.scope.restrict_paths = [@options.url]
|
124
124
|
|
125
|
-
subject.checks.load :
|
125
|
+
subject.checks.load :signature
|
126
126
|
subject.run
|
127
|
-
subject.failures.
|
127
|
+
expect(subject.failures).to be_any
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
@@ -138,7 +138,7 @@ describe Arachni::Framework::Parts::Audit do
|
|
138
138
|
|
139
139
|
f.audit_page Arachni::Page.from_url( @url + '/link' )
|
140
140
|
end
|
141
|
-
ok.
|
141
|
+
expect(ok).to be_truthy
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
@@ -151,22 +151,22 @@ describe Arachni::Framework::Parts::Audit do
|
|
151
151
|
|
152
152
|
f.audit_page Arachni::Page.from_url( @url + '/link' )
|
153
153
|
end
|
154
|
-
ok.
|
154
|
+
expect(ok).to be_truthy
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
158
|
describe '#audit_page' do
|
159
159
|
it 'updates the #sitemap with the DOM URL' do
|
160
160
|
subject.options.audit.elements :links, :forms, :cookies
|
161
|
-
subject.checks.load :
|
161
|
+
subject.checks.load :signature
|
162
162
|
|
163
|
-
subject.sitemap.
|
163
|
+
expect(subject.sitemap).to be_empty
|
164
164
|
|
165
165
|
page = Arachni::Page.from_url( @url + '/link' )
|
166
166
|
page.dom.url = @url + '/link/#/stuff'
|
167
167
|
|
168
168
|
subject.audit_page page
|
169
|
-
subject.sitemap.
|
169
|
+
expect(subject.sitemap).to include @url + '/link/#/stuff'
|
170
170
|
end
|
171
171
|
|
172
172
|
it "runs #{Arachni::Check::Manager}#without_platforms before #{Arachni::Check::Manager}#with_platforms" do
|
@@ -184,23 +184,24 @@ describe Arachni::Framework::Parts::Audit do
|
|
184
184
|
|
185
185
|
f.audit_page page
|
186
186
|
|
187
|
-
responses.
|
187
|
+
expect(responses).to eq(
|
188
188
|
%w(http://localhost/test3 http://localhost/test
|
189
189
|
http://localhost/test2)
|
190
|
+
)
|
190
191
|
end
|
191
192
|
end
|
192
193
|
|
193
194
|
context 'when checks were' do
|
194
195
|
context 'ran against the page' do
|
195
196
|
it 'returns true' do
|
196
|
-
subject.checks.load :
|
197
|
-
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) ).
|
197
|
+
subject.checks.load :signature
|
198
|
+
expect(subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )).to be_truthy
|
198
199
|
end
|
199
200
|
end
|
200
201
|
|
201
202
|
context 'not ran against the page' do
|
202
203
|
it 'returns false' do
|
203
|
-
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) ).
|
204
|
+
expect(subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )).to be_falsey
|
204
205
|
end
|
205
206
|
end
|
206
207
|
end
|
@@ -209,15 +210,15 @@ describe Arachni::Framework::Parts::Audit do
|
|
209
210
|
it 'analyzes the DOM and pushes new pages to the page queue' do
|
210
211
|
Arachni::Framework.new do |f|
|
211
212
|
f.options.audit.elements :links, :forms, :cookies
|
212
|
-
f.checks.load :
|
213
|
+
f.checks.load :signature
|
213
214
|
|
214
|
-
f.page_queue_total_size.
|
215
|
+
expect(f.page_queue_total_size).to eq(0)
|
215
216
|
|
216
217
|
f.audit_page( Arachni::Page.from_url( @url + '/with_javascript' ) )
|
217
218
|
|
218
219
|
sleep 0.1 while f.wait_for_browser_cluster?
|
219
220
|
|
220
|
-
f.page_queue_total_size.
|
221
|
+
expect(f.page_queue_total_size).to be > 0
|
221
222
|
end
|
222
223
|
end
|
223
224
|
|
@@ -226,13 +227,13 @@ describe Arachni::Framework::Parts::Audit do
|
|
226
227
|
f.options.url = @url
|
227
228
|
f.options.audit.elements :links, :forms, :cookies
|
228
229
|
|
229
|
-
f.url_queue_total_size.
|
230
|
+
expect(f.url_queue_total_size).to eq(0)
|
230
231
|
|
231
232
|
f.audit_page( Arachni::Page.from_url( @url + '/with_javascript' ) )
|
232
233
|
|
233
234
|
f.run
|
234
235
|
|
235
|
-
f.url_queue_total_size.
|
236
|
+
expect(f.url_queue_total_size).to eq(3)
|
236
237
|
end
|
237
238
|
end
|
238
239
|
|
@@ -242,26 +243,26 @@ describe Arachni::Framework::Parts::Audit do
|
|
242
243
|
f.options.url = @url
|
243
244
|
|
244
245
|
f.options.audit.elements :links, :forms, :cookies
|
245
|
-
f.checks.load :
|
246
|
+
f.checks.load :signature
|
246
247
|
f.options.scope.dom_depth_limit = 1
|
247
|
-
f.url_queue_total_size.
|
248
|
-
f.audit_page( Arachni::Page.from_url( @url + '/with_javascript' ) ).
|
248
|
+
expect(f.url_queue_total_size).to eq(0)
|
249
|
+
expect(f.audit_page( Arachni::Page.from_url( @url + '/with_javascript' ) )).to be_truthy
|
249
250
|
f.run
|
250
|
-
f.url_queue_total_size.
|
251
|
+
expect(f.url_queue_total_size).to eq(3)
|
251
252
|
|
252
253
|
f.reset
|
253
254
|
|
254
255
|
f.options.audit.elements :links, :forms, :cookies
|
255
|
-
f.checks.load :
|
256
|
+
f.checks.load :signature
|
256
257
|
f.options.scope.dom_depth_limit = 1
|
257
|
-
f.url_queue_total_size.
|
258
|
+
expect(f.url_queue_total_size).to eq(0)
|
258
259
|
|
259
260
|
page = Arachni::Page.from_url( @url + '/with_javascript' )
|
260
261
|
page.dom.push_transition Arachni::Page::DOM::Transition.new( :page, :load )
|
261
262
|
|
262
|
-
f.audit_page( page ).
|
263
|
+
expect(f.audit_page( page )).to be_truthy
|
263
264
|
f.run
|
264
|
-
f.url_queue_total_size.
|
265
|
+
expect(f.url_queue_total_size).to eq(1)
|
265
266
|
end
|
266
267
|
end
|
267
268
|
|
@@ -278,13 +279,13 @@ describe Arachni::Framework::Parts::Audit do
|
|
278
279
|
)
|
279
280
|
|
280
281
|
Arachni::Framework.new do |f|
|
281
|
-
f.checks.load :
|
282
|
+
f.checks.load :signature
|
282
283
|
|
283
284
|
f.options.scope.dom_depth_limit = 10
|
284
|
-
f.audit_page( page ).
|
285
|
+
expect(f.audit_page( page )).to be_truthy
|
285
286
|
|
286
287
|
f.options.scope.dom_depth_limit = 2
|
287
|
-
f.audit_page( page ).
|
288
|
+
expect(f.audit_page( page )).to be_falsey
|
288
289
|
end
|
289
290
|
end
|
290
291
|
end
|
@@ -295,15 +296,15 @@ describe Arachni::Framework::Parts::Audit do
|
|
295
296
|
subject.options.scope.exclude_path_patterns << /link/
|
296
297
|
subject.options.audit.elements :links, :forms, :cookies
|
297
298
|
|
298
|
-
subject.checks.load :
|
299
|
+
subject.checks.load :signature
|
299
300
|
|
300
301
|
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )
|
301
|
-
subject.report.issues.size.
|
302
|
+
expect(subject.report.issues.size).to eq(0)
|
302
303
|
end
|
303
304
|
|
304
305
|
it 'returns false' do
|
305
306
|
subject.options.scope.exclude_path_patterns << /link/
|
306
|
-
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) ).
|
307
|
+
expect(subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )).to be_falsey
|
307
308
|
end
|
308
309
|
end
|
309
310
|
|
@@ -319,11 +320,11 @@ describe Arachni::Framework::Parts::Audit do
|
|
319
320
|
subject.options.platforms = [:unix]
|
320
321
|
subject.options.audit.elements :links, :forms, :cookies
|
321
322
|
|
322
|
-
subject.checks.load :
|
323
|
-
subject.checks[:
|
323
|
+
subject.checks.load :signature
|
324
|
+
subject.checks[:signature].platforms << :unix
|
324
325
|
|
325
326
|
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )
|
326
|
-
subject.report.issues.
|
327
|
+
expect(subject.report.issues).to be_any
|
327
328
|
end
|
328
329
|
end
|
329
330
|
|
@@ -333,11 +334,11 @@ describe Arachni::Framework::Parts::Audit do
|
|
333
334
|
|
334
335
|
subject.options.audit.elements :links, :forms, :cookies
|
335
336
|
|
336
|
-
subject.checks.load :
|
337
|
-
subject.checks[:
|
337
|
+
subject.checks.load :signature
|
338
|
+
subject.checks[:signature].platforms << :unix
|
338
339
|
|
339
340
|
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )
|
340
|
-
subject.report.issues.
|
341
|
+
expect(subject.report.issues).to be_empty
|
341
342
|
end
|
342
343
|
end
|
343
344
|
end
|
@@ -347,20 +348,20 @@ describe Arachni::Framework::Parts::Audit do
|
|
347
348
|
subject.options.platforms = []
|
348
349
|
subject.options.audit.elements :links, :forms, :cookies
|
349
350
|
|
350
|
-
subject.checks.load :
|
351
|
-
subject.checks[:
|
351
|
+
subject.checks.load :signature
|
352
|
+
subject.checks[:signature].platforms << :unix
|
352
353
|
|
353
354
|
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )
|
354
|
-
subject.report.issues.
|
355
|
+
expect(subject.report.issues).to be_any
|
355
356
|
end
|
356
357
|
end
|
357
358
|
end
|
358
359
|
|
359
360
|
context "when #{Arachni::Check::Auditor}.has_timeout_candidates?" do
|
360
361
|
it "calls #{Arachni::Check::Auditor}.timeout_audit_run" do
|
361
|
-
Arachni::Check::Auditor.
|
362
|
+
allow(Arachni::Check::Auditor).to receive(:has_timeout_candidates?){ true }
|
362
363
|
|
363
|
-
Arachni::Check::Auditor.
|
364
|
+
expect(Arachni::Check::Auditor).to receive(:timeout_audit_run)
|
364
365
|
subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )
|
365
366
|
end
|
366
367
|
end
|
@@ -376,7 +377,7 @@ describe Arachni::Framework::Parts::Audit do
|
|
376
377
|
Arachni::Framework.new do |f|
|
377
378
|
f.checks.load_all
|
378
379
|
|
379
|
-
f.checks[:test].
|
380
|
+
allow_any_instance_of(f.checks[:test]).to receive(:run) { raise }
|
380
381
|
|
381
382
|
page = Arachni::Page.from_url( @url + '/link' )
|
382
383
|
|
@@ -387,7 +388,7 @@ describe Arachni::Framework::Parts::Audit do
|
|
387
388
|
|
388
389
|
f.audit_page page
|
389
390
|
|
390
|
-
responses.
|
391
|
+
expect(responses).to eq(%w(http://localhost/test3 http://localhost/test2))
|
391
392
|
end
|
392
393
|
end
|
393
394
|
end
|