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.
Files changed (373) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -0
  3. data/Gemfile +1 -1
  4. data/README.md +16 -5
  5. data/components/checks/active/ldap_injection/errors.txt +1 -0
  6. data/components/checks/active/source_code_disclosure.rb +1 -1
  7. data/components/checks/active/unvalidated_redirect.rb +6 -6
  8. data/components/checks/active/unvalidated_redirect_dom.rb +10 -7
  9. data/components/checks/passive/grep/captcha.rb +14 -5
  10. data/components/checks/passive/grep/form_upload.rb +7 -3
  11. data/components/checks/passive/grep/hsts.rb +3 -3
  12. data/components/checks/passive/grep/html_objects.rb +2 -3
  13. data/components/checks/passive/grep/http_only_cookies.rb +2 -3
  14. data/components/checks/passive/grep/insecure_cookies.rb +1 -1
  15. data/components/checks/passive/grep/password_autocomplete.rb +2 -2
  16. data/components/checks/passive/grep/unencrypted_password_forms.rb +7 -7
  17. data/components/checks/passive/grep/x_frame_options.rb +2 -2
  18. data/components/checks/passive/http_put.rb +2 -3
  19. data/components/path_extractors/comments.rb +3 -3
  20. data/components/path_extractors/scripts.rb +10 -1
  21. data/components/plugins/defaults/autothrottle.rb +27 -18
  22. data/components/plugins/defaults/meta/remedies/discovery.rb +30 -33
  23. data/components/plugins/defaults/meta/remedies/timing_attacks.rb +7 -11
  24. data/components/plugins/login_script.rb +9 -3
  25. data/components/plugins/proxy.rb +4 -3
  26. data/components/reporters/html.rb +11 -14
  27. data/components/reporters/html/default/issue.erb +13 -38
  28. data/components/reporters/html/default/issue/info.erb +1 -1
  29. data/components/reporters/html/default/summary/issues/by_name.erb +3 -3
  30. data/components/reporters/stdout.rb +62 -71
  31. data/components/reporters/xml.rb +26 -40
  32. data/components/reporters/xml/schema.xsd +43 -89
  33. data/lib/arachni/browser.rb +52 -3
  34. data/lib/arachni/browser/javascript.rb +3 -3
  35. data/lib/arachni/browser/javascript/scripts/taint_tracer.js +46 -25
  36. data/lib/arachni/browser_cluster.rb +61 -0
  37. data/lib/arachni/browser_cluster/job.rb +21 -1
  38. data/lib/arachni/browser_cluster/jobs/browser_provider.rb +3 -1
  39. data/lib/arachni/browser_cluster/jobs/resource_exploration.rb +2 -1
  40. data/lib/arachni/browser_cluster/jobs/resource_exploration/event_trigger.rb +2 -1
  41. data/lib/arachni/browser_cluster/jobs/taint_trace.rb +3 -2
  42. data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +1 -1
  43. data/lib/arachni/browser_cluster/worker.rb +5 -0
  44. data/lib/arachni/check/auditor.rb +22 -12
  45. data/lib/arachni/data/framework.rb +13 -1
  46. data/lib/arachni/data/issues.rb +9 -25
  47. data/lib/arachni/element/base.rb +9 -3
  48. data/lib/arachni/element/capabilities/analyzable.rb +2 -6
  49. data/lib/arachni/element/capabilities/analyzable/differential.rb +24 -7
  50. data/lib/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +23 -23
  51. data/lib/arachni/element/capabilities/auditable.rb +0 -6
  52. data/lib/arachni/element/capabilities/dom_only.rb +61 -0
  53. data/lib/arachni/element/capabilities/with_dom.rb +3 -1
  54. data/lib/arachni/element/cookie.rb +35 -5
  55. data/lib/arachni/element/cookie/dom.rb +13 -4
  56. data/lib/arachni/element/{capabilities/auditable/dom.rb → dom.rb} +20 -68
  57. data/lib/arachni/element/dom/capabilities/auditable.rb +29 -0
  58. data/lib/arachni/element/dom/capabilities/inputtable.rb +27 -0
  59. data/lib/arachni/element/dom/capabilities/mutable.rb +21 -0
  60. data/lib/arachni/element/dom/capabilities/submittable.rb +52 -0
  61. data/lib/arachni/element/form.rb +12 -1
  62. data/lib/arachni/element/form/capabilities/mutable.rb +2 -1
  63. data/lib/arachni/element/form/capabilities/with_dom.rb +0 -1
  64. data/lib/arachni/element/form/dom.rb +9 -3
  65. data/lib/arachni/element/header.rb +14 -33
  66. data/lib/arachni/element/header/capabilities/inputtable.rb +29 -0
  67. data/lib/arachni/element/header/capabilities/mutable.rb +51 -0
  68. data/lib/arachni/element/input/dom.rb +71 -0
  69. data/lib/arachni/element/json.rb +2 -0
  70. data/lib/arachni/element/link.rb +3 -0
  71. data/lib/arachni/element/link/capabilities/with_dom.rb +0 -1
  72. data/lib/arachni/element/link/dom.rb +16 -3
  73. data/lib/arachni/element/link/dom/capabilities/submittable.rb +29 -0
  74. data/lib/arachni/element/link_template.rb +3 -5
  75. data/lib/arachni/element/link_template/capabilities/inputtable.rb +5 -0
  76. data/lib/arachni/element/link_template/capabilities/with_dom.rb +0 -1
  77. data/lib/arachni/element/link_template/dom.rb +16 -3
  78. data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +29 -0
  79. data/lib/arachni/element/server.rb +3 -5
  80. data/lib/arachni/element/ui_form.rb +106 -0
  81. data/lib/arachni/element/ui_form/dom.rb +107 -0
  82. data/lib/arachni/element/ui_input.rb +62 -0
  83. data/lib/arachni/element/xml.rb +2 -1
  84. data/lib/arachni/framework.rb +7 -5
  85. data/lib/arachni/framework/parts/audit.rb +0 -1
  86. data/lib/arachni/framework/parts/check.rb +1 -0
  87. data/lib/arachni/framework/parts/data.rb +4 -0
  88. data/lib/arachni/framework/parts/state.rb +0 -2
  89. data/lib/arachni/http/client.rb +17 -6
  90. data/lib/arachni/http/proxy_server.rb +52 -5
  91. data/lib/arachni/http/request.rb +1 -1
  92. data/lib/arachni/issue.rb +34 -179
  93. data/lib/arachni/issue/severity.rb +2 -0
  94. data/lib/arachni/option_groups/audit.rb +22 -2
  95. data/lib/arachni/option_groups/browser_cluster.rb +15 -0
  96. data/lib/arachni/page.rb +3 -2
  97. data/lib/arachni/parser.rb +24 -5
  98. data/lib/arachni/platform/manager.rb +1 -2
  99. data/lib/arachni/rpc/server/framework.rb +3 -4
  100. data/lib/arachni/rpc/server/framework/multi_instance.rb +2 -1
  101. data/lib/arachni/session.rb +1 -1
  102. data/lib/arachni/trainer.rb +4 -7
  103. data/lib/arachni/watir/element.rb +12 -1
  104. data/lib/version +1 -1
  105. data/spec/arachni/browser/element_locator_spec.rb +43 -43
  106. data/spec/arachni/browser/javascript/dom_monitor_spec.rb +44 -44
  107. data/spec/arachni/browser/javascript/proxy/stub_spec.rb +17 -14
  108. data/spec/arachni/browser/javascript/proxy_spec.rb +24 -24
  109. data/spec/arachni/browser/javascript/taint_tracer/frame/called_function_spec.rb +11 -11
  110. data/spec/arachni/browser/javascript/taint_tracer/frame_spec.rb +7 -7
  111. data/spec/arachni/browser/javascript/taint_tracer/sink/data_flow_spec.rb +13 -13
  112. data/spec/arachni/browser/javascript/taint_tracer/sink/execution_flow_spec.rb +7 -7
  113. data/spec/arachni/browser/javascript/taint_tracer_spec.rb +568 -558
  114. data/spec/arachni/browser/javascript_spec.rb +73 -63
  115. data/spec/arachni/browser_cluster/job/result_spec.rb +3 -3
  116. data/spec/arachni/browser_cluster/job_spec.rb +68 -48
  117. data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger/result_spec.rb +2 -2
  118. data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger_spec.rb +5 -4
  119. data/spec/arachni/browser_cluster/jobs/resource_exploration/result_spec.rb +2 -2
  120. data/spec/arachni/browser_cluster/jobs/resource_exploration_spec.rb +5 -5
  121. data/spec/arachni/browser_cluster/worker_spec.rb +87 -70
  122. data/spec/arachni/browser_cluster_spec.rb +64 -39
  123. data/spec/arachni/browser_spec.rb +692 -527
  124. data/spec/arachni/check/auditor_spec.rb +177 -147
  125. data/spec/arachni/check/base_spec.rb +33 -33
  126. data/spec/arachni/check/manager_spec.rb +15 -15
  127. data/spec/arachni/component/base_spec.rb +8 -8
  128. data/spec/arachni/component/manager_spec.rb +100 -99
  129. data/spec/arachni/component/options/address_spec.rb +3 -3
  130. data/spec/arachni/component/options/base_spec.rb +7 -7
  131. data/spec/arachni/component/options/bool_spec.rb +9 -9
  132. data/spec/arachni/component/options/float_spec.rb +6 -6
  133. data/spec/arachni/component/options/int_spec.rb +5 -5
  134. data/spec/arachni/component/options/multiple_choice_spec.rb +12 -12
  135. data/spec/arachni/component/options/object_spec.rb +2 -2
  136. data/spec/arachni/component/options/path_spec.rb +3 -3
  137. data/spec/arachni/component/options/port_spec.rb +5 -5
  138. data/spec/arachni/component/options/string_spec.rb +3 -3
  139. data/spec/arachni/component/options/url_spec.rb +4 -4
  140. data/spec/arachni/component/utilities_spec.rb +2 -2
  141. data/spec/arachni/data/framework/rpc_spec.rb +10 -9
  142. data/spec/arachni/data/framework_spec.rb +65 -46
  143. data/spec/arachni/data/issues_spec.rb +39 -77
  144. data/spec/arachni/data/plugins_spec.rb +11 -11
  145. data/spec/arachni/data/session_spec.rb +6 -6
  146. data/spec/arachni/data_spec.rb +8 -8
  147. data/spec/arachni/element/body_spec.rb +10 -10
  148. data/spec/arachni/element/capabilities/analyzable/differential_spec.rb +39 -21
  149. data/spec/arachni/element/capabilities/analyzable/{taint_spec.rb → signature_spec.rb} +63 -63
  150. data/spec/arachni/element/capabilities/analyzable/timeout_spec.rb +51 -51
  151. data/spec/arachni/element/capabilities/with_scope/scope_spec.rb +5 -5
  152. data/spec/arachni/element/cookie/dom_spec.rb +37 -18
  153. data/spec/arachni/element/cookie_spec.rb +206 -139
  154. data/spec/arachni/element/form/dom_spec.rb +36 -19
  155. data/spec/arachni/element/form_spec.rb +210 -187
  156. data/spec/arachni/element/generic_dom_spec.rb +14 -14
  157. data/spec/arachni/element/header_spec.rb +35 -17
  158. data/spec/arachni/element/json_spec.rb +53 -31
  159. data/spec/arachni/element/link/dom_spec.rb +46 -28
  160. data/spec/arachni/element/link_spec.rb +58 -40
  161. data/spec/arachni/element/link_template/dom_spec.rb +47 -29
  162. data/spec/arachni/element/link_template_spec.rb +79 -61
  163. data/spec/arachni/element/path_spec.rb +1 -1
  164. data/spec/arachni/element/server_spec.rb +33 -32
  165. data/spec/arachni/element/ui_form/ui_form_dom_spec.rb +164 -0
  166. data/spec/arachni/element/ui_form_spec.rb +242 -0
  167. data/spec/arachni/element/ui_input/dom_spec.rb +157 -0
  168. data/spec/arachni/element/ui_input_spec.rb +136 -0
  169. data/spec/arachni/element/xml_spec.rb +42 -24
  170. data/spec/arachni/element_filter_spec.rb +49 -48
  171. data/spec/arachni/error_spec.rb +3 -3
  172. data/spec/arachni/framework/parts/audit_spec.rb +64 -63
  173. data/spec/arachni/framework/parts/browser_spec.rb +16 -16
  174. data/spec/arachni/framework/parts/check_spec.rb +3 -3
  175. data/spec/arachni/framework/parts/data_spec.rb +48 -48
  176. data/spec/arachni/framework/parts/platform_spec.rb +3 -3
  177. data/spec/arachni/framework/parts/plugin_spec.rb +7 -6
  178. data/spec/arachni/framework/parts/report_spec.rb +7 -7
  179. data/spec/arachni/framework/parts/scope_spec.rb +16 -16
  180. data/spec/arachni/framework/parts/state_spec.rb +68 -69
  181. data/spec/arachni/framework_spec.rb +39 -31
  182. data/spec/arachni/http/client/dynamic_404_handlers_spec.rb +32 -32
  183. data/spec/arachni/http/client_spec.rb +219 -208
  184. data/spec/arachni/http/cookie_jar_spec.rb +72 -72
  185. data/spec/arachni/http/headers_spec.rb +14 -14
  186. data/spec/arachni/http/proxy_server_spec.rb +43 -42
  187. data/spec/arachni/http/request_spec.rb +105 -103
  188. data/spec/arachni/http/response/scope_spec.rb +24 -24
  189. data/spec/arachni/http/response_spec.rb +50 -49
  190. data/spec/arachni/issue/severity_spec.rb +10 -9
  191. data/spec/arachni/issue_spec.rb +71 -369
  192. data/spec/arachni/option_groups/audit_spec.rb +114 -114
  193. data/spec/arachni/option_groups/browser_cluster_spec.rb +20 -3
  194. data/spec/arachni/option_groups/datastore_spec.rb +6 -6
  195. data/spec/arachni/option_groups/dispatcher_spec.rb +19 -19
  196. data/spec/arachni/option_groups/http_spec.rb +11 -11
  197. data/spec/arachni/option_groups/input_spec.rb +31 -27
  198. data/spec/arachni/option_groups/output_spec.rb +2 -2
  199. data/spec/arachni/option_groups/paths_spec.rb +17 -17
  200. data/spec/arachni/option_groups/rpc_spec.rb +2 -2
  201. data/spec/arachni/option_groups/scope_spec.rb +40 -40
  202. data/spec/arachni/option_groups/session_spec.rb +6 -5
  203. data/spec/arachni/option_groups/snapshot_spec.rb +4 -4
  204. data/spec/arachni/options_spec.rb +46 -45
  205. data/spec/arachni/page/dom/transition_spec.rb +74 -72
  206. data/spec/arachni/page/dom_spec.rb +35 -35
  207. data/spec/arachni/page/scope_spec.rb +15 -15
  208. data/spec/arachni/page_spec.rb +217 -217
  209. data/spec/arachni/parser_spec.rb +106 -104
  210. data/spec/arachni/platform/fingerprinter_spec.rb +17 -14
  211. data/spec/arachni/platform/list_spec.rb +33 -33
  212. data/spec/arachni/platform/manager_spec.rb +67 -64
  213. data/spec/arachni/plugin/base_spec.rb +10 -10
  214. data/spec/arachni/plugin/manager_spec.rb +38 -37
  215. data/spec/arachni/report_spec.rb +43 -40
  216. data/spec/arachni/reporter/base_spec.rb +15 -15
  217. data/spec/arachni/reporter/manager_spec.rb +4 -4
  218. data/spec/arachni/reporter/options_spec.rb +6 -6
  219. data/spec/arachni/rpc/client/base_spec.rb +6 -6
  220. data/spec/arachni/rpc/client/dispatcher_spec.rb +2 -2
  221. data/spec/arachni/rpc/client/instance_spec.rb +6 -6
  222. data/spec/arachni/rpc/server/active_options_spec.rb +11 -8
  223. data/spec/arachni/rpc/server/base_spec.rb +5 -5
  224. data/spec/arachni/rpc/server/checks/manager_spec.rb +8 -8
  225. data/spec/arachni/rpc/server/dispatcher/node_spec.rb +37 -37
  226. data/spec/arachni/rpc/server/dispatcher/service_spec.rb +15 -14
  227. data/spec/arachni/rpc/server/dispatcher_spec.rb +36 -35
  228. data/spec/arachni/rpc/server/framework/distributor_spec.rb +36 -36
  229. data/spec/arachni/rpc/server/framework_multi_spec.rb +340 -336
  230. data/spec/arachni/rpc/server/framework_spec.rb +90 -85
  231. data/spec/arachni/rpc/server/instance_spec.rb +126 -107
  232. data/spec/arachni/rpc/server/output_spec.rb +1 -1
  233. data/spec/arachni/rpc/server/plugin/manager_spec.rb +6 -6
  234. data/spec/arachni/ruby/array_spec.rb +42 -42
  235. data/spec/arachni/ruby/hash_spec.rb +20 -18
  236. data/spec/arachni/ruby/io_spec.rb +2 -2
  237. data/spec/arachni/ruby/object_spec.rb +1 -1
  238. data/spec/arachni/ruby/set_spec.rb +3 -3
  239. data/spec/arachni/ruby/string_spec.rb +30 -30
  240. data/spec/arachni/ruby/webrick_spec.rb +2 -2
  241. data/spec/arachni/scope_spec.rb +1 -1
  242. data/spec/arachni/session_spec.rb +67 -64
  243. data/spec/arachni/snapshot_spec.rb +15 -15
  244. data/spec/arachni/state/audit_spec.rb +11 -11
  245. data/spec/arachni/state/element_filter_spec.rb +6 -6
  246. data/spec/arachni/state/framework/rpc_spec.rb +12 -12
  247. data/spec/arachni/state/framework_spec.rb +125 -121
  248. data/spec/arachni/state/http_spec.rb +7 -7
  249. data/spec/arachni/state/options_spec.rb +7 -7
  250. data/spec/arachni/state/plugins_spec.rb +8 -8
  251. data/spec/arachni/state_spec.rb +10 -10
  252. data/spec/arachni/support/buffer/autoflush_spec.rb +16 -16
  253. data/spec/arachni/support/buffer/base_spec.rb +39 -39
  254. data/spec/arachni/support/cache/least_cost_replacement_spec.rb +18 -18
  255. data/spec/arachni/support/cache/least_recently_pushed_spec.rb +24 -24
  256. data/spec/arachni/support/cache/least_recently_used_spec.rb +20 -20
  257. data/spec/arachni/support/cache/preference_spec.rb +4 -4
  258. data/spec/arachni/support/cache/random_replacement_spec.rb +8 -8
  259. data/spec/arachni/support/crypto/rsa_aes_cbc_spec.rb +1 -1
  260. data/spec/arachni/support/database/hash_spec.rb +44 -43
  261. data/spec/arachni/support/database/queue_spec.rb +27 -27
  262. data/spec/arachni/support/lookup/hash_set_spec.rb +8 -8
  263. data/spec/arachni/support/lookup/moolb_spec.rb +3 -3
  264. data/spec/arachni/support/mixins/observable_spec.rb +6 -6
  265. data/spec/arachni/support/signature_spec.rb +19 -19
  266. data/spec/arachni/trainer_spec.rb +39 -39
  267. data/spec/arachni/typhoeus/hydra_spec.rb +2 -2
  268. data/spec/arachni/uri/scope_spec.rb +66 -66
  269. data/spec/arachni/uri_spec.rb +107 -105
  270. data/spec/arachni/utilities_spec.rb +40 -40
  271. data/spec/components/checks/active/csrf_spec.rb +8 -8
  272. data/spec/components/checks/active/no_sql_injection_spec.rb +1 -1
  273. data/spec/components/checks/active/sql_injection_spec.rb +16 -16
  274. data/spec/components/checks/active/trainer_spec.rb +4 -4
  275. data/spec/components/checks/active/unvalidated_redirect_dom_spec.rb +4 -2
  276. data/spec/components/checks/active/xpath_injection_spec.rb +1 -1
  277. data/spec/components/checks/active/xss_dom_script_context_spec.rb +51 -21
  278. data/spec/components/checks/active/xss_dom_spec.rb +46 -24
  279. data/spec/components/checks/passive/allowed_methods_spec.rb +1 -1
  280. data/spec/components/checks/passive/grep/cookie_set_for_parent_domain_spec.rb +1 -1
  281. data/spec/components/checks/passive/grep/hsts_spec.rb +2 -2
  282. data/spec/components/checks/passive/grep/http_only_cookies_spec.rb +1 -1
  283. data/spec/components/checks/passive/grep/insecure_cookies_spec.rb +1 -1
  284. data/spec/components/checks/passive/grep/insecure_cors_policy_spec.rb +2 -2
  285. data/spec/components/checks/passive/grep/password_autocomplete_spec.rb +1 -1
  286. data/spec/components/checks/passive/grep/private_ip_spec.rb +3 -3
  287. data/spec/components/checks/passive/grep/unencrypted_password_forms_spec.rb +1 -1
  288. data/spec/components/checks/passive/grep/x_frame_options_spec.rb +2 -2
  289. data/spec/components/checks/passive/interesting_responses_spec.rb +2 -2
  290. data/spec/components/checks/passive/webdav_spec.rb +1 -1
  291. data/spec/components/checks/passive/xst_spec.rb +1 -1
  292. data/spec/components/fingerprinters/servers/apache_spec.rb +2 -2
  293. data/spec/components/path_extractors/comments_spec.rb +5 -1
  294. data/spec/components/path_extractors/scripts_spec.rb +5 -2
  295. data/spec/components/plugins/autologin_spec.rb +22 -22
  296. data/spec/components/plugins/autothrottle_spec.rb +6 -5
  297. data/spec/components/plugins/content_types_spec.rb +4 -4
  298. data/spec/components/plugins/cookie_collector_spec.rb +5 -5
  299. data/spec/components/plugins/exec_spec.rb +12 -12
  300. data/spec/components/plugins/form_dicattack_spec.rb +3 -3
  301. data/spec/components/plugins/headers_collector_spec.rb +8 -8
  302. data/spec/components/plugins/healthmap_spec.rb +3 -3
  303. data/spec/components/plugins/http_dicattack_spec.rb +3 -3
  304. data/spec/components/plugins/login_script_spec.rb +79 -22
  305. data/spec/components/plugins/meta/remedies/discovery_spec.rb +3 -2
  306. data/spec/components/plugins/meta/remedies/timing_attacks_spec.rb +3 -3
  307. data/spec/components/plugins/meta/uniformity_spec.rb +2 -2
  308. data/spec/components/plugins/restrict_to_dom_state_spec.rb +1 -1
  309. data/spec/components/plugins/script_spec.rb +1 -1
  310. data/spec/components/plugins/uncommon_headers_spec.rb +2 -2
  311. data/spec/components/plugins/vector_collector_spec.rb +2 -2
  312. data/spec/components/plugins/vector_feed_spec.rb +40 -40
  313. data/spec/components/plugins/waf_detector_spec.rb +6 -6
  314. data/spec/components/reporters/json_spec.rb +4 -4
  315. data/spec/components/reporters/marshal_spec.rb +2 -2
  316. data/spec/components/reporters/yaml_spec.rb +3 -2
  317. data/spec/external/wavsep/active/sqli_spec.rb +1 -3
  318. data/spec/spec_helper.rb +4 -0
  319. data/spec/support/factories/element/ui_form.rb +14 -0
  320. data/spec/support/factories/element/ui_input.rb +13 -0
  321. data/spec/support/factories/issue.rb +0 -13
  322. data/spec/support/fixtures/report.afr +0 -0
  323. data/spec/support/fixtures/{taint_check/taint.rb → signature_check/signature.rb} +2 -2
  324. data/spec/support/helpers/browser_cluster/jobs/taint_tracer.rb +11 -11
  325. data/spec/support/helpers/framework.rb +1 -1
  326. data/spec/support/helpers/pages.rb +2 -2
  327. data/spec/support/servers/arachni/browser.rb +139 -0
  328. data/spec/support/servers/arachni/browser/javascript/taint_tracer.rb +40 -0
  329. data/spec/support/servers/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +0 -0
  330. data/spec/support/servers/arachni/element/input/input_dom.rb +102 -0
  331. data/spec/support/servers/arachni/element/ui_form/ui_form_dom.rb +238 -0
  332. data/spec/support/servers/checks/active/trainer_check.rb +7 -7
  333. data/spec/support/servers/checks/active/unvalidated_redirect_dom.rb +22 -6
  334. data/spec/support/servers/checks/active/xss_dom.rb +50 -0
  335. data/spec/support/servers/checks/active/xss_dom_script_context.rb +53 -0
  336. data/spec/support/shared/browser/javascript/taint_tracer/sink/base.rb +6 -6
  337. data/spec/support/shared/check.rb +10 -12
  338. data/spec/support/shared/component/options/base.rb +24 -24
  339. data/spec/support/shared/element/base.rb +25 -25
  340. data/spec/support/shared/element/capabilities/auditable.rb +116 -140
  341. data/spec/support/shared/element/capabilities/dom_only.rb +65 -0
  342. data/spec/support/shared/element/capabilities/inputtable.rb +71 -86
  343. data/spec/support/shared/element/capabilities/mutable.rb +122 -111
  344. data/spec/support/shared/element/capabilities/refreshable.rb +10 -10
  345. data/spec/support/shared/element/capabilities/{submitable.rb → submittable.rb} +26 -26
  346. data/spec/support/shared/element/capabilities/with_auditor.rb +10 -10
  347. data/spec/support/shared/element/capabilities/with_dom.rb +8 -8
  348. data/spec/support/shared/element/capabilities/with_node.rb +4 -6
  349. data/spec/support/shared/element/capabilities/with_scope.rb +2 -2
  350. data/spec/support/shared/element/capabilities/with_source.rb +6 -8
  351. data/spec/support/shared/element/dom.rb +144 -0
  352. data/spec/support/shared/element/dom/auditable.rb +42 -0
  353. data/spec/support/shared/element/dom/inputtable.rb +5 -0
  354. data/spec/support/shared/element/dom/mutable.rb +3 -0
  355. data/spec/support/shared/element/dom/submittable.rb +119 -0
  356. data/spec/support/shared/external/wavsep.rb +3 -3
  357. data/spec/support/shared/fingerprinter.rb +2 -2
  358. data/spec/support/shared/framework.rb +1 -1
  359. data/spec/support/shared/http/message.rb +9 -9
  360. data/spec/support/shared/option_group.rb +17 -17
  361. data/spec/support/shared/path_extractor.rb +1 -1
  362. data/spec/support/shared/plugin.rb +2 -2
  363. data/spec/support/shared/support/cache.rb +57 -57
  364. data/spec/support/shared/support/lookup.rb +25 -25
  365. data/ui/cli/framework.rb +22 -11
  366. data/ui/cli/framework/option_parser.rb +15 -0
  367. data/ui/cli/option_parser.rb +8 -1
  368. data/ui/cli/output.rb +2 -1
  369. metadata +54 -20
  370. data/components/checks/active/xss_dom_inputs.rb +0 -236
  371. data/spec/components/checks/active/xss_dom_inputs_spec.rb +0 -30
  372. data/spec/support/servers/checks/active/xss_dom_inputs.rb +0 -59
  373. 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.should be_empty
33
+ expect(subject.forms).to be_empty
34
34
  subject.update_forms form
35
- subject.forms.should be_any
36
- subject.forms.should include form.id
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.should be_kind_of Arachni::Support::LookUp::HashSet
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.should be_empty
46
+ expect(subject.links).to be_empty
47
47
  subject.update_links link
48
- subject.links.should be_any
49
- subject.links.should include link.id
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.should be_kind_of Arachni::Support::LookUp::HashSet
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.should be_empty
59
+ expect(subject.cookies).to be_empty
60
60
  subject.update_cookies cookie
61
- subject.cookies.should be_any
62
- subject.cookies.should include cookie.id
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.should be_kind_of Arachni::Support::LookUp::HashSet
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.should include link
78
- subject.should include form
79
- subject.should include cookie
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.should_not include link
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.should be_empty
93
+ expect(subject.forms).to be_empty
94
94
  subject.update_forms form
95
- subject.forms.should be_any
96
- subject.forms_include?( form ).should be_true
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 ).should be_false
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.should be_empty
110
+ expect(subject.links).to be_empty
111
111
  subject.update_links link
112
- subject.links.should be_any
113
- subject.links_include?( link ).should be_true
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 ).should be_false
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.should be_empty
127
+ expect(subject.cookies).to be_empty
128
128
  subject.update_cookies cookie
129
- subject.cookies.should be_any
130
- subject.cookies_include?( cookie ).should be_true
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 ).should be_false
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.should include element
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 ).should == (page.forms | page.cookies).size
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 ).should == 0
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.should_not include :links
168
+ expect(page.cache).not_to include :links
169
169
  page.links
170
- page.cache[:links].should == page.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.should include element
175
+ expect(subject).to include element
176
176
  end
177
177
 
178
178
  (page.forms | page.cookies).each do |element|
179
- subject.should_not include element
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 ).should == page.links.size
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.should be_any
192
- subject.update_from_page_cache( page ).should ==
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
- subject.update_from_page_cache( page ).should == 0
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 ).should be_true
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 ).should == 1
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 ).should == 0
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 ).should be_true
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 ).should == 1
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 ).should == 0
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 ).should be_true
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 ).should == 1
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 ).should == 0
258
+ expect(subject.update_cookies( page.cookies )).to eq(0)
258
259
  end
259
260
  end
260
261
  end
@@ -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).should be_true
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.should be_true
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.should be_true
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 :taint
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.should == [@url + '/binary'].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 :taint
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.should be_empty
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 :taint
41
+ f.checks.load :signature
42
42
 
43
43
  f.run
44
44
 
45
- f.report.sitemap.should include "#{@url}/some/stuff"
46
- f.report.sitemap.should include "#{@url}/more/stuff"
47
- f.report.sitemap.size.should > 3
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 :taint
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.should == f.options.scope.restrict_paths.
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 :taint
76
+ subject.checks.load :signature
77
77
  subject.run
78
- subject.failures.should be_any
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 :taint
87
+ subject.checks.load :signature
88
88
  subject.run
89
- subject.failures.should be_any
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 :taint
97
+ subject.checks.load :signature
98
98
  subject.run
99
- subject.failures.should be_empty
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 ).should be_true
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 :taint
115
+ subject.checks.load :signature
116
116
  subject.run
117
- subject.failures.should be_empty
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 :taint
125
+ subject.checks.load :signature
126
126
  subject.run
127
- subject.failures.should be_any
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.should be_true
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.should be_true
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 :taint
161
+ subject.checks.load :signature
162
162
 
163
- subject.sitemap.should be_empty
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.should include @url + '/link/#/stuff'
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.should ==
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 :taint
197
- subject.audit_page( Arachni::Page.from_url( @url + '/link' ) ).should be_true
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' ) ).should be_false
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 :taint
213
+ f.checks.load :signature
213
214
 
214
- f.page_queue_total_size.should == 0
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.should > 0
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.should == 0
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.should == 5
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 :taint
246
+ f.checks.load :signature
246
247
  f.options.scope.dom_depth_limit = 1
247
- f.url_queue_total_size.should == 0
248
- f.audit_page( Arachni::Page.from_url( @url + '/with_javascript' ) ).should be_true
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.should == 5
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 :taint
256
+ f.checks.load :signature
256
257
  f.options.scope.dom_depth_limit = 1
257
- f.url_queue_total_size.should == 0
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 ).should be_true
263
+ expect(f.audit_page( page )).to be_truthy
263
264
  f.run
264
- f.url_queue_total_size.should == 1
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 :taint
282
+ f.checks.load :signature
282
283
 
283
284
  f.options.scope.dom_depth_limit = 10
284
- f.audit_page( page ).should be_true
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 ).should be_false
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 :taint
299
+ subject.checks.load :signature
299
300
 
300
301
  subject.audit_page( Arachni::Page.from_url( @url + '/link' ) )
301
- subject.report.issues.size.should == 0
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' ) ).should be_false
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 :taint
323
- subject.checks[:taint].platforms << :unix
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.should be_any
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 :taint
337
- subject.checks[:taint].platforms << :unix
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.should be_empty
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 :taint
351
- subject.checks[:taint].platforms << :unix
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.should be_any
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.stub(:has_timeout_candidates?){ true }
362
+ allow(Arachni::Check::Auditor).to receive(:has_timeout_candidates?){ true }
362
363
 
363
- Arachni::Check::Auditor.should receive(:timeout_audit_run)
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].any_instance.stub(:run) { raise }
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.should == %w(http://localhost/test3 http://localhost/test2)
391
+ expect(responses).to eq(%w(http://localhost/test3 http://localhost/test2))
391
392
  end
392
393
  end
393
394
  end