Codebase list ruby-cms-scanner / 60cb01d
Import upstream version 0.12.1+git20201117.6d32a65 Kali Janitor 3 years ago
13 changed file(s) with 38 addition(s) and 21 deletion(s). Raw diff Collapse all Expand all
77 - 'example/**/*'
88 Layout/LineLength:
99 Max: 120
10 Lint/ConstantDefinitionInBlock:
11 Enabled: false
12 Lint/FloatComparison:
13 Exclude:
14 - spec/app/models/version_spec.rb
15 Lint/MissingSuper:
16 Enabled: false
1017 Lint/UriEscapeUnescape:
1118 Enabled: false
19 Lint/UselessMethodDefinition:
20 Exclude:
21 - spec/lib/finders/same_type_finder_spec.rb
22 - spec/lib/finders/unique_finder_spec.rb
1223 Metrics/AbcSize:
13 Max: 25
24 Max: 28
1425 Metrics/BlockLength:
1526 Exclude:
1627 - 'spec/**/*'
2435 Max: 9
2536 Style/ClassVars:
2637 Enabled: false
38 Style/CombinableLoops:
39 Exclude:
40 - spec/lib/controllers_spec.rb
2741 Style/Documentation:
2842 Enabled: false
2943 Style/FormatStringToken:
3131
3232 s.add_development_dependency 'bundler', '>= 1.6'
3333 s.add_development_dependency 'rake', '~> 13.0'
34 s.add_development_dependency 'rspec', '~> 3.9.0'
34 s.add_development_dependency 'rspec', '~> 3.10.0'
3535 s.add_development_dependency 'rspec-its', '~> 1.3.0'
36 s.add_development_dependency 'rubocop', '~> 0.88.0'
37 s.add_development_dependency 'rubocop-performance', '~> 1.7.0'
38 s.add_development_dependency 'simplecov', '~> 0.18.2'
36 s.add_development_dependency 'rubocop', '~> 1.3.0'
37 s.add_development_dependency 'rubocop-performance', '~> 1.9.0'
38 s.add_development_dependency 'simplecov', '~> 0.19.0'
3939 s.add_development_dependency 'simplecov-lcov', '~> 0.8.0'
40 s.add_development_dependency 'webmock', '~> 3.8.0'
40 s.add_development_dependency 'webmock', '~> 3.10.0'
4141 end
5858 #
5959 # @return [ String ] The expiration file path associated to the key
6060 def entry_expiration_path(key)
61 entry_path(key) + '.expiration'
61 "#{entry_path(key)}.expiration"
6262 end
6363
6464 private
5656 # @param [String, Class ] klass
5757 # @return [ String ]
5858 def found_by(klass = self.class)
59 labels = %w[aggressive passive]
60
5961 caller_locations.each do |call|
6062 label = call.label
6163
62 next unless %w[aggressive passive].include? label
64 next unless labels.include? label
6365
6466 title = klass.to_s.demodulize.gsub(/(\d+)[a-z]+/i, '_\0').titleize(keep_id_suffix: true)
6567
77 e = abs.zero? ? abs : (Math.log(abs) / Math.log(1024)).floor
88 s = format('%<s>.3f', s: (abs.to_f / 1024**e))
99
10 s.sub(/\.?0*$/, ' ' + units[e])
10 s.sub(/\.?0*$/, " #{units[e]}")
1111 end
1212 end
5959
6060 domains.map! { |d| Regexp.escape(d.delete_suffix('/')).gsub('\*', '.*').gsub('/', '\\\\\?/') }
6161
62 domains[0].gsub!(Regexp.escape(uri.host), Regexp.escape(uri.host) + '(?::\\d+)?') if uri.port
62 domains[0].gsub!(Regexp.escape(uri.host), "#{Regexp.escape(uri.host)}(?::\\d+)?") if uri.port
6363
6464 @scope_url_pattern = %r{https?:\\?/\\?/(?:#{domains.join('|')})\\?/?}i
6565 end
104104 next unless attr_value && !attr_value.empty?
105105
106106 node_uri = begin
107 uri.join(attr_value.strip)
108 rescue StandardError
109 # Skip potential malformed URLs etc.
110 next
111 end
107 uri.join(attr_value.strip)
108 rescue StandardError
109 # Skip potential malformed URLs etc.
110 next
111 end
112112
113113 next unless node_uri.host
114114
6161
6262 # @return [ String ] The URL of an unlikely existant page
6363 def error_404_url
64 @error_404_url ||= uri.join(Digest::MD5.hexdigest(rand(999_999).to_s)[0..6] + '.html').to_s
64 @error_404_url ||= uri.join("#{Digest::MD5.hexdigest(rand(999_999).to_s)[0..6]}.html").to_s
6565 end
6666
6767 # Checks if the remote website is up.
33 subject(:finder) { described_class.new(target) }
44 let(:target) { CMSScanner::Target.new(url) }
55 let(:url) { 'http://example.com/' }
6 let(:file_url) { url + 'fantastico_fileslist.txt' }
6 let(:file_url) { "#{url}fantastico_fileslist.txt" }
77 let(:fixtures) { FIXTURES_FINDERS.join('interesting_findings', 'fantastico_fileslist') }
88
99 before { expect(finder.target).to receive(:head_or_get_params).and_return(method: :head) }
33 subject(:finder) { described_class.new(target) }
44 let(:target) { CMSScanner::Target.new(url) }
55 let(:url) { 'http://example.com/' }
6 let(:robots_url) { url + 'robots.txt' }
6 let(:robots_url) { "#{url}robots.txt" }
77 let(:fixtures) { FIXTURES_FINDERS.join('interesting_findings', 'robots_txt') }
88
99 before { expect(finder.target).to receive(:head_or_get_params).and_return(method: :head) }
33 subject(:finder) { described_class.new(target) }
44 let(:target) { CMSScanner::Target.new(url) }
55 let(:url) { 'http://example.com/' }
6 let(:file_url) { url + 'searchreplacedb2.php' }
6 let(:file_url) { "#{url}searchreplacedb2.php" }
77 let(:fixtures) { FIXTURES_FINDERS.join('interesting_findings', 'search_replace_db_2') }
88
99 before { expect(finder.target).to receive(:head_or_get_params).and_return(method: :head) }
33 subject(:finder) { described_class.new(target) }
44 let(:target) { CMSScanner::Target.new(url) }
55 let(:url) { 'http://e.org/' }
6 let(:xml_rpc_url) { url + 'xmlrpc.php' }
6 let(:xml_rpc_url) { "#{url}xmlrpc.php" }
77 let(:fixtures) { FIXTURES_FINDERS.join('interesting_findings', 'xml_rpc') }
88
99 describe '#potential_urls' do
3939
4040 context 'when :mixed mode' do
4141 let(:mode) { :mixed }
42 let(:modes) { %i[passive aggressive] }
4243
4344 it 'calls :passive then :aggressive on each finder' do
4445 finders.each do |finder|
45 %i[passive aggressive].each do |method|
46 modes.each do |method|
4647 expect(finder).to receive(method).with(hash_including(found: [])).ordered
4748 end
4849 end