diff --git a/spec/beef/core/filter/browser_spec.rb b/spec/beef/core/filter/browser_spec.rb new file mode 100644 index 000000000..62ade11fa --- /dev/null +++ b/spec/beef/core/filter/browser_spec.rb @@ -0,0 +1,70 @@ +RSpec.describe BeEF::Filters do + describe '.is_valid_browsername?' do + it 'validates browser names' do + expect(BeEF::Filters.is_valid_browsername?('FF')).to be(true) + expect(BeEF::Filters.is_valid_browsername?('IE')).to be(true) + expect(BeEF::Filters.is_valid_browsername?('CH')).to be(true) + expect(BeEF::Filters.is_valid_browsername?('TOOLONG')).to be(false) + expect(BeEF::Filters.is_valid_browsername?('')).to be(false) + end + end + + describe '.is_valid_osname?' do + it 'validates OS names' do + expect(BeEF::Filters.is_valid_osname?('Windows XP')).to be(true) + expect(BeEF::Filters.is_valid_osname?('A')).to be(false) # too short + expect(BeEF::Filters.is_valid_osname?('')).to be(false) + end + end + + describe '.is_valid_hwname?' do + it 'validates hardware names' do + expect(BeEF::Filters.is_valid_hwname?('iPhone')).to be(true) + expect(BeEF::Filters.is_valid_hwname?('A')).to be(false) # too short + expect(BeEF::Filters.is_valid_hwname?('')).to be(false) + end + end + + describe '.is_valid_browserversion?' do + it 'validates browser versions' do + expect(BeEF::Filters.is_valid_browserversion?('1.0')).to be(true) + expect(BeEF::Filters.is_valid_browserversion?('1.2.3.4')).to be(true) + expect(BeEF::Filters.is_valid_browserversion?('UNKNOWN')).to be(true) + expect(BeEF::Filters.is_valid_browserversion?('ALL')).to be(true) + expect(BeEF::Filters.is_valid_browserversion?('invalid')).to be(false) + end + end + + describe '.is_valid_osversion?' do + it 'validates OS versions' do + expect(BeEF::Filters.is_valid_osversion?('10.0')).to be(true) + expect(BeEF::Filters.is_valid_osversion?('UNKNOWN')).to be(true) + expect(BeEF::Filters.is_valid_osversion?('ALL')).to be(true) + expect(BeEF::Filters.is_valid_osversion?('invalid!')).to be(false) + end + end + + describe '.is_valid_browserstring?' do + it 'validates browser/UA strings' do + expect(BeEF::Filters.is_valid_browserstring?('Mozilla/5.0')).to be(true) + expect(BeEF::Filters.is_valid_browserstring?('A' * 300)).to be(true) + expect(BeEF::Filters.is_valid_browserstring?('A' * 301)).to be(false) + end + end + + describe '.is_valid_cookies?' do + it 'validates cookie strings' do + expect(BeEF::Filters.is_valid_cookies?('session=abc123')).to be(true) + expect(BeEF::Filters.is_valid_cookies?('A' * 2000)).to be(true) + expect(BeEF::Filters.is_valid_cookies?('A' * 2001)).to be(false) + end + end + + describe '.is_valid_browser_plugins?' do + it 'validates browser plugin strings' do + expect(BeEF::Filters.is_valid_browser_plugins?('Flash, Java')).to be(true) + expect(BeEF::Filters.is_valid_browser_plugins?('A' * 1000)).to be(true) + expect(BeEF::Filters.is_valid_browser_plugins?('A' * 1001)).to be(false) + end + end +end diff --git a/spec/beef/core/filter/command_spec.rb b/spec/beef/core/filter/command_spec.rb new file mode 100644 index 000000000..fd2793b21 --- /dev/null +++ b/spec/beef/core/filter/command_spec.rb @@ -0,0 +1,51 @@ +RSpec.describe BeEF::Filters do + describe '.is_valid_path_info?' do + it 'validates path info' do + expect(BeEF::Filters.is_valid_path_info?('/path/to/resource')).to be(true) + expect(BeEF::Filters.is_valid_path_info?("\x00")).to be(false) + expect(BeEF::Filters.is_valid_path_info?(nil)).to be(false) + end + end + + describe '.is_valid_hook_session_id?' do + it 'validates hook session IDs' do + expect(BeEF::Filters.is_valid_hook_session_id?('abc123')).to be(true) + expect(BeEF::Filters.is_valid_hook_session_id?('')).to be(false) + expect(BeEF::Filters.is_valid_hook_session_id?(nil)).to be(false) + end + end + + describe '.is_valid_command_module_datastore_key?' do + it 'validates datastore keys' do + expect(BeEF::Filters.is_valid_command_module_datastore_key?('test_key')).to be(true) + expect(BeEF::Filters.is_valid_command_module_datastore_key?('')).to be(false) + end + end + + describe '.is_valid_command_module_datastore_param?' do + it 'validates datastore params' do + expect(BeEF::Filters.is_valid_command_module_datastore_param?('test_value')).to be(true) + expect(BeEF::Filters.is_valid_command_module_datastore_param?("\x00")).to be(false) + end + end + + describe '.has_valid_key_chars?' do + it 'validates key characters' do + expect(BeEF::Filters.has_valid_key_chars?('test_key')).to be(true) + expect(BeEF::Filters.has_valid_key_chars?('')).to be(false) + end + end + + describe '.has_valid_param_chars?' do + it 'false' do + chars = [nil, '', '+'] + chars.each do |c| + expect(BeEF::Filters.has_valid_param_chars?(c)).to be(false) + end + end + + it 'true' do + expect(BeEF::Filters.has_valid_param_chars?('A')).to be(true) + end + end +end diff --git a/spec/beef/core/filter/http_spec.rb b/spec/beef/core/filter/http_spec.rb new file mode 100644 index 000000000..299449387 --- /dev/null +++ b/spec/beef/core/filter/http_spec.rb @@ -0,0 +1,44 @@ +RSpec.describe BeEF::Filters do + describe '.is_valid_hostname?' do + it 'validates hostnames correctly' do + expect(BeEF::Filters.is_valid_hostname?('example.com')).to be(true) + expect(BeEF::Filters.is_valid_hostname?('sub.example.com')).to be(true) + expect(BeEF::Filters.is_valid_hostname?('a' * 256)).to be(false) # too long + expect(BeEF::Filters.is_valid_hostname?('')).to be(false) + expect(BeEF::Filters.is_valid_hostname?(nil)).to be(false) + end + end + + describe '.is_valid_verb?' do + it 'validates HTTP verbs' do + %w[HEAD GET POST OPTIONS PUT DELETE].each do |verb| + expect(BeEF::Filters.is_valid_verb?(verb)).to be(true) + end + expect(BeEF::Filters.is_valid_verb?('INVALID')).to be(false) + end + end + + describe '.is_valid_url?' do + it 'validates URLs' do + expect(BeEF::Filters.is_valid_url?(nil)).to be(false) + expect(BeEF::Filters.is_valid_url?('http://example.com')).to be(true) + end + end + + describe '.is_valid_http_version?' do + it 'validates HTTP versions' do + expect(BeEF::Filters.is_valid_http_version?('HTTP/1.0')).to be(true) + expect(BeEF::Filters.is_valid_http_version?('HTTP/1.1')).to be(true) + expect(BeEF::Filters.is_valid_http_version?('HTTP/2.0')).to be(false) + end + end + + describe '.is_valid_host_str?' do + it 'validates host header strings' do + expect(BeEF::Filters.is_valid_host_str?('Host:')).to be(true) + host_str = "Host:\r".dup + expect(BeEF::Filters.is_valid_host_str?(host_str)).to be(true) + expect(BeEF::Filters.is_valid_host_str?('Invalid')).to be(false) + end + end +end diff --git a/spec/beef/core/filter/page_spec.rb b/spec/beef/core/filter/page_spec.rb new file mode 100644 index 000000000..a0e64fd2a --- /dev/null +++ b/spec/beef/core/filter/page_spec.rb @@ -0,0 +1,18 @@ +RSpec.describe BeEF::Filters do + describe '.is_valid_pagetitle?' do + it 'validates page titles' do + expect(BeEF::Filters.is_valid_pagetitle?('Test Page')).to be(true) + expect(BeEF::Filters.is_valid_pagetitle?('A' * 500)).to be(true) + expect(BeEF::Filters.is_valid_pagetitle?('A' * 501)).to be(false) + expect(BeEF::Filters.is_valid_pagetitle?("\x00")).to be(false) + end + end + + describe '.is_valid_pagereferrer?' do + it 'validates page referrers' do + expect(BeEF::Filters.is_valid_pagereferrer?('http://example.com')).to be(true) + expect(BeEF::Filters.is_valid_pagereferrer?('A' * 350)).to be(true) + expect(BeEF::Filters.is_valid_pagereferrer?('A' * 351)).to be(false) + end + end +end