stratagem 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/Manifest +16 -6
  2. data/Rakefile +8 -1
  3. data/lib/generators/stratagem/install/install_base.rb +13 -3
  4. data/lib/generators/stratagem/install/install_generator.rb +1 -1
  5. data/lib/stratagem.rb +42 -18
  6. data/lib/stratagem/authentication.rb +2 -5
  7. data/lib/stratagem/auto_mock.rb +1 -0
  8. data/lib/stratagem/auto_mock/aquifer.rb +49 -26
  9. data/lib/stratagem/auto_mock/factory.rb +1 -6
  10. data/lib/stratagem/auto_mock/user_loader.rb +38 -0
  11. data/lib/stratagem/client.rb +15 -4
  12. data/lib/stratagem/configuration/auth_auth.rb +19 -0
  13. data/lib/stratagem/configuration/core.rb +20 -0
  14. data/lib/stratagem/crawler/authentication.rb +17 -12
  15. data/lib/stratagem/crawler/authentication/automated.rb +40 -0
  16. data/lib/stratagem/crawler/authentication/base.rb +140 -0
  17. data/lib/stratagem/crawler/authentication/configured.rb +27 -0
  18. data/lib/stratagem/crawler/parameter_resolver.rb +12 -8
  19. data/lib/stratagem/crawler/route_invoker.rb +10 -13
  20. data/lib/stratagem/crawler/session.rb +14 -2
  21. data/lib/stratagem/crawler/site_model.rb +4 -173
  22. data/lib/stratagem/crawler/site_model/edge.rb +20 -0
  23. data/lib/stratagem/crawler/site_model/page.rb +121 -0
  24. data/lib/stratagem/crawler/site_model/page_set.rb +58 -0
  25. data/lib/stratagem/instrumentation/models.rb +3 -14
  26. data/lib/stratagem/instrumentation/models/annotations.rb +39 -5
  27. data/lib/stratagem/instrumentation/models/authentication.rb +0 -1
  28. data/lib/stratagem/instrumentation/models/authentication/authlogic/detect.rb +1 -0
  29. data/lib/stratagem/instrumentation/models/authentication/devise/detect.rb +1 -1
  30. data/lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb +0 -4
  31. data/lib/stratagem/instrumentation/models/metadata.rb +23 -1
  32. data/lib/stratagem/instrumentation/models/persistence.rb +3 -4
  33. data/lib/stratagem/instrumentation/models/persistence/active_record/metadata.rb +2 -2
  34. data/lib/stratagem/interface/browser.rb +9 -3
  35. data/lib/stratagem/interface/public/javascripts/stratagem.js +14 -12
  36. data/lib/stratagem/interface/views/index.haml +3 -3
  37. data/lib/stratagem/logger.rb +28 -2
  38. data/lib/stratagem/model.rb +6 -0
  39. data/lib/stratagem/model/application.rb +21 -134
  40. data/lib/stratagem/model/components/base.rb +1 -4
  41. data/lib/stratagem/model/components/controller.rb +1 -2
  42. data/lib/stratagem/model/components/model.rb +15 -15
  43. data/lib/stratagem/model/components/route.rb +3 -2
  44. data/lib/stratagem/model/components/view.rb +0 -1
  45. data/lib/stratagem/model/containers/base.rb +60 -0
  46. data/lib/stratagem/model/containers/gem.rb +25 -0
  47. data/lib/stratagem/model/containers/plugin.rb +11 -0
  48. data/lib/stratagem/model/containers/route.rb +19 -0
  49. data/lib/stratagem/model/parse_util.rb +3 -3
  50. data/lib/stratagem/model_builder.rb +1 -4
  51. data/lib/stratagem/rack_hack.rb +15 -0
  52. data/lib/stratagem/site_crawler.rb +5 -4
  53. data/lib/stratagem/snapshot.rb +5 -7
  54. data/spec/stratagem/configuration_spec.rb +32 -0
  55. data/stratagem.gemspec +5 -8
  56. data/templates/install/environments/stratagem.rb.erb +31 -2
  57. data/templates/install/script/stratagem +16 -0
  58. data/templates/install/tasks/stratagem.rake +2 -2
  59. metadata +36 -65
  60. data/bin/stratagem +0 -58
  61. data/lib/stratagem/scan.rb +0 -19
  62. data/lib/stratagem/scan/checks/email_address.rb +0 -15
  63. data/lib/stratagem/scan/checks/error_pages.rb +0 -25
  64. data/lib/stratagem/scan/result.rb +0 -45
  65. data/lib/stratagem/scanner.rb +0 -32
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ENV["RAILS_ENV"] ||= 'stratagem'
4
+ ENV["local"] = 'true' if ARGV.include?('local')
5
+
6
+ application = File.expand_path('../../config/application', __FILE__)
7
+ if (File.exists?(application))
8
+ require application
9
+ else
10
+ require File.expand_path('../../config/environment', __FILE__)
11
+ end
12
+
13
+ require 'stratagem'
14
+
15
+ Stratagem.init
16
+ Stratagem::Command.run('analyze')
@@ -20,7 +20,7 @@ namespace :stratagem do
20
20
 
21
21
  task :console => :setup do
22
22
  Stratagem.load_dependencies
23
- puts "loading console"
24
- require 'commands/console'
23
+ require 'rails/commands/console'
24
+ Rails::Console.start(Rails::Application)
25
25
  end
26
26
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stratagem
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 2
8
- - 3
9
- version: 0.2.3
4
+ prerelease:
5
+ version: 0.2.4
10
6
  platform: ruby
11
7
  authors:
12
8
  - Charles Grimes
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-10-20 00:00:00 -06:00
13
+ date: 2011-03-07 00:00:00 -07:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -25,10 +21,6 @@ dependencies:
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 3
31
- - 5
32
24
  version: 0.3.5
33
25
  type: :runtime
34
26
  version_requirements: *id001
@@ -40,10 +32,6 @@ dependencies:
40
32
  requirements:
41
33
  - - ">="
42
34
  - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- - 8
46
- - 4
47
35
  version: 0.8.4
48
36
  type: :runtime
49
37
  version_requirements: *id002
@@ -55,10 +43,6 @@ dependencies:
55
43
  requirements:
56
44
  - - ">="
57
45
  - !ruby/object:Gem::Version
58
- segments:
59
- - 3
60
- - 0
61
- - 0
62
46
  version: 3.0.0
63
47
  type: :runtime
64
48
  version_requirements: *id003
@@ -70,10 +54,6 @@ dependencies:
70
54
  requirements:
71
55
  - - ">="
72
56
  - !ruby/object:Gem::Version
73
- segments:
74
- - 1
75
- - 4
76
- - 3
77
57
  version: 1.4.3
78
58
  type: :runtime
79
59
  version_requirements: *id004
@@ -85,9 +65,6 @@ dependencies:
85
65
  requirements:
86
66
  - - ">="
87
67
  - !ruby/object:Gem::Version
88
- segments:
89
- - 1
90
- - 0
91
68
  version: "1.0"
92
69
  type: :runtime
93
70
  version_requirements: *id005
@@ -99,10 +76,6 @@ dependencies:
99
76
  requirements:
100
77
  - - ">="
101
78
  - !ruby/object:Gem::Version
102
- segments:
103
- - 0
104
- - 3
105
- - 5
106
79
  version: 0.3.5
107
80
  type: :development
108
81
  version_requirements: *id006
@@ -114,10 +87,6 @@ dependencies:
114
87
  requirements:
115
88
  - - ">="
116
89
  - !ruby/object:Gem::Version
117
- segments:
118
- - 0
119
- - 8
120
- - 4
121
90
  version: 0.8.4
122
91
  type: :development
123
92
  version_requirements: *id007
@@ -129,9 +98,6 @@ dependencies:
129
98
  requirements:
130
99
  - - ">="
131
100
  - !ruby/object:Gem::Version
132
- segments:
133
- - 1
134
- - 0
135
101
  version: "1.0"
136
102
  type: :development
137
103
  version_requirements: *id008
@@ -143,10 +109,6 @@ dependencies:
143
109
  requirements:
144
110
  - - ">="
145
111
  - !ruby/object:Gem::Version
146
- segments:
147
- - 3
148
- - 0
149
- - 0
150
112
  version: 3.0.0
151
113
  type: :development
152
114
  version_requirements: *id009
@@ -158,22 +120,17 @@ dependencies:
158
120
  requirements:
159
121
  - - ">="
160
122
  - !ruby/object:Gem::Version
161
- segments:
162
- - 0
163
- - 4
164
- - 3
165
123
  version: 0.4.3
166
124
  type: :development
167
125
  version_requirements: *id010
168
126
  description: Intuitive security analysis for your Rails applications
169
127
  email: cj@stratagemapp.com
170
- executables:
171
- - stratagem
128
+ executables: []
129
+
172
130
  extensions: []
173
131
 
174
132
  extra_rdoc_files:
175
133
  - LICENSE
176
- - bin/stratagem
177
134
  - lib/bootstrap.rb
178
135
  - lib/generators/stratagem/install/USAGE
179
136
  - lib/generators/stratagem/install/install_base.rb
@@ -183,6 +140,7 @@ extra_rdoc_files:
183
140
  - lib/stratagem/auto_mock.rb
184
141
  - lib/stratagem/auto_mock/aquifer.rb
185
142
  - lib/stratagem/auto_mock/factory.rb
143
+ - lib/stratagem/auto_mock/user_loader.rb
186
144
  - lib/stratagem/auto_mock/value_generator.rb
187
145
  - lib/stratagem/blocker.rb
188
146
  - lib/stratagem/client.rb
@@ -191,14 +149,22 @@ extra_rdoc_files:
191
149
  - lib/stratagem/commands/analyze.rb
192
150
  - lib/stratagem/commands/base.rb
193
151
  - lib/stratagem/commands/devel_mock.rb
152
+ - lib/stratagem/configuration/auth_auth.rb
153
+ - lib/stratagem/configuration/core.rb
194
154
  - lib/stratagem/crawler.rb
195
155
  - lib/stratagem/crawler/authentication.rb
156
+ - lib/stratagem/crawler/authentication/automated.rb
157
+ - lib/stratagem/crawler/authentication/base.rb
158
+ - lib/stratagem/crawler/authentication/configured.rb
196
159
  - lib/stratagem/crawler/form.rb
197
160
  - lib/stratagem/crawler/html_utils.rb
198
161
  - lib/stratagem/crawler/parameter_resolver.rb
199
162
  - lib/stratagem/crawler/route_invoker.rb
200
163
  - lib/stratagem/crawler/session.rb
201
164
  - lib/stratagem/crawler/site_model.rb
165
+ - lib/stratagem/crawler/site_model/edge.rb
166
+ - lib/stratagem/crawler/site_model/page.rb
167
+ - lib/stratagem/crawler/site_model/page_set.rb
202
168
  - lib/stratagem/crawler/trace_utils.rb
203
169
  - lib/stratagem/extensions.rb
204
170
  - lib/stratagem/extensions/class.rb
@@ -272,22 +238,21 @@ extra_rdoc_files:
272
238
  - lib/stratagem/model/components/route.rb
273
239
  - lib/stratagem/model/components/static_file.rb
274
240
  - lib/stratagem/model/components/view.rb
241
+ - lib/stratagem/model/containers/base.rb
242
+ - lib/stratagem/model/containers/gem.rb
243
+ - lib/stratagem/model/containers/plugin.rb
244
+ - lib/stratagem/model/containers/route.rb
275
245
  - lib/stratagem/model/parse_util.rb
276
246
  - lib/stratagem/model_builder.rb
247
+ - lib/stratagem/rack_hack.rb
277
248
  - lib/stratagem/recipes/deploy.rb
278
- - lib/stratagem/scan.rb
279
249
  - lib/stratagem/scan/checks/capistrano/secure_deploy.rb
280
- - lib/stratagem/scan/checks/email_address.rb
281
- - lib/stratagem/scan/checks/error_pages.rb
282
- - lib/stratagem/scan/result.rb
283
- - lib/stratagem/scanner.rb
284
250
  - lib/stratagem/site_crawler.rb
285
251
  - lib/stratagem/snapshot.rb
286
252
  files:
287
253
  - LICENSE
288
254
  - Manifest
289
255
  - Rakefile
290
- - bin/stratagem
291
256
  - generators/stratagem/stratagem_generator.rb
292
257
  - init.rb
293
258
  - lib/bootstrap.rb
@@ -299,6 +264,7 @@ files:
299
264
  - lib/stratagem/auto_mock.rb
300
265
  - lib/stratagem/auto_mock/aquifer.rb
301
266
  - lib/stratagem/auto_mock/factory.rb
267
+ - lib/stratagem/auto_mock/user_loader.rb
302
268
  - lib/stratagem/auto_mock/value_generator.rb
303
269
  - lib/stratagem/blocker.rb
304
270
  - lib/stratagem/client.rb
@@ -307,14 +273,22 @@ files:
307
273
  - lib/stratagem/commands/analyze.rb
308
274
  - lib/stratagem/commands/base.rb
309
275
  - lib/stratagem/commands/devel_mock.rb
276
+ - lib/stratagem/configuration/auth_auth.rb
277
+ - lib/stratagem/configuration/core.rb
310
278
  - lib/stratagem/crawler.rb
311
279
  - lib/stratagem/crawler/authentication.rb
280
+ - lib/stratagem/crawler/authentication/automated.rb
281
+ - lib/stratagem/crawler/authentication/base.rb
282
+ - lib/stratagem/crawler/authentication/configured.rb
312
283
  - lib/stratagem/crawler/form.rb
313
284
  - lib/stratagem/crawler/html_utils.rb
314
285
  - lib/stratagem/crawler/parameter_resolver.rb
315
286
  - lib/stratagem/crawler/route_invoker.rb
316
287
  - lib/stratagem/crawler/session.rb
317
288
  - lib/stratagem/crawler/site_model.rb
289
+ - lib/stratagem/crawler/site_model/edge.rb
290
+ - lib/stratagem/crawler/site_model/page.rb
291
+ - lib/stratagem/crawler/site_model/page_set.rb
318
292
  - lib/stratagem/crawler/trace_utils.rb
319
293
  - lib/stratagem/extensions.rb
320
294
  - lib/stratagem/extensions/class.rb
@@ -388,18 +362,20 @@ files:
388
362
  - lib/stratagem/model/components/route.rb
389
363
  - lib/stratagem/model/components/static_file.rb
390
364
  - lib/stratagem/model/components/view.rb
365
+ - lib/stratagem/model/containers/base.rb
366
+ - lib/stratagem/model/containers/gem.rb
367
+ - lib/stratagem/model/containers/plugin.rb
368
+ - lib/stratagem/model/containers/route.rb
391
369
  - lib/stratagem/model/parse_util.rb
392
370
  - lib/stratagem/model_builder.rb
371
+ - lib/stratagem/rack_hack.rb
393
372
  - lib/stratagem/recipes/deploy.rb
394
- - lib/stratagem/scan.rb
395
373
  - lib/stratagem/scan/checks/capistrano/secure_deploy.rb
396
- - lib/stratagem/scan/checks/email_address.rb
397
- - lib/stratagem/scan/checks/error_pages.rb
398
- - lib/stratagem/scan/result.rb
399
- - lib/stratagem/scanner.rb
400
374
  - lib/stratagem/site_crawler.rb
401
375
  - lib/stratagem/snapshot.rb
376
+ - spec/stratagem/configuration_spec.rb
402
377
  - templates/install/environments/stratagem.rb.erb
378
+ - templates/install/script/stratagem
403
379
  - templates/install/tasks/stratagem.rake
404
380
  - stratagem.gemspec
405
381
  has_rdoc: true
@@ -419,22 +395,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
419
395
  requirements:
420
396
  - - ">="
421
397
  - !ruby/object:Gem::Version
422
- segments:
423
- - 0
424
398
  version: "0"
425
399
  required_rubygems_version: !ruby/object:Gem::Requirement
426
400
  none: false
427
401
  requirements:
428
402
  - - ">="
429
403
  - !ruby/object:Gem::Version
430
- segments:
431
- - 1
432
- - 2
433
404
  version: "1.2"
434
405
  requirements: []
435
406
 
436
407
  rubyforge_project: stratagem
437
- rubygems_version: 1.3.7
408
+ rubygems_version: 1.5.0
438
409
  signing_key:
439
410
  specification_version: 3
440
411
  summary: Intuitive security analysis for your Rails applications
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
-
4
- # ENV['RAILS_ENV'] = 'test'
5
- # ENV['RACK_ENV'] = 'test'
6
- #
7
- # application_file = File.join(Dir.pwd, 'config', 'application')
8
- # if (File.exists?(application_file+'.rb'))
9
- # require File.join(Dir.pwd, 'config', 'boot')
10
- # require application_file
11
- # require 'active_record'
12
- # else
13
- # puts "loading environment"
14
- # # require File.join(Dir.pwd, 'config', 'boot')
15
- # # puts "loading environment"
16
- # require 'config/environment'
17
- # end
18
- #
19
- #
20
- # Stratagem.init
21
- # Stratagem::Command.run(ARGV[0])
22
-
23
- # begin
24
- # # rails 2
25
- # require 'bootstrap'
26
- # rescue Exception
27
- # # rails 3
28
- # end
29
- #
30
- # require 'config/environment'
31
- #
32
- # p ActiveRecord::Base
33
- #
34
- # Stratagem::init_system
35
- # Stratagem::Command.run(ARGV[0])
36
- #
37
-
38
- #!/usr/bin/env ruby
39
-
40
- # RAILS_ENV='test'
41
- #
42
- # require 'rubygems'
43
- # require 'stratagem'
44
- #
45
- # require File.join(Dir.pwd, 'config', 'boot')
46
- # begin
47
- # # rails 2
48
- # require 'bootstrap'
49
- # rescue Exception
50
- # # rails 3
51
- # require File.join(Dir.pwd, 'config', 'application')
52
- # end
53
- #
54
- # require './config/environment'
55
- #
56
- # Stratagem::init
57
- #
58
- # Stratagem::Command.run(ARGV[0])
@@ -1,19 +0,0 @@
1
- module Stratagem::Scan
2
- end
3
-
4
- # require 'stratagem/scan/result'
5
- # require 'stratagem/scan/checks/base'
6
- # require 'stratagem/scan/checks/email_address'
7
- # require 'stratagem/scan/checks/error_pages'
8
- # require 'stratagem/scan/checks/routes'
9
- # require 'stratagem/scan/checks/filter_parameter_logging'
10
- # require 'stratagem/scan/checks/erb/xss_global'
11
- # require 'stratagem/scan/checks/ssl/secure_login_page'
12
- # require 'stratagem/scan/checks/ssl/secure_login_submit'
13
- # require 'stratagem/scan/checks/capistrano/secure_deploy'
14
- # require 'stratagem/scan/checks/active_record/base'
15
- # require 'stratagem/scan/checks/active_record/attr_accessible'
16
- # require 'stratagem/scan/checks/active_record/internal_attributes_exposed'
17
- # require 'stratagem/scan/checks/active_record/foreign_keys_exposed'
18
- # require 'stratagem/scan/checks/mongo_mapper/base'
19
- # require 'stratagem/scan/checks/mongo_mapper/foreign_keys_exposed'
@@ -1,15 +0,0 @@
1
- # Stratagem::Scan::Checks::EmailAddress
2
-
3
- module Stratagem::Scan::Checks
4
- class EmailAddress < Base
5
- include ViewBase
6
-
7
- Scanner = Regexp.compile(/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b/)
8
-
9
- def scan(view)
10
- view.scan(Scanner).uniq.each do |email|
11
- result(:concern_type => :warning, :unique => email, :payload => email)
12
- end
13
- end
14
- end
15
- end
@@ -1,25 +0,0 @@
1
- # Stratagem::Scan::Checks::ErrorPages
2
-
3
- module Stratagem::Scan::Checks
4
- class ErrorPages < Base
5
- include ViewBase
6
-
7
- Strings = {
8
- 404 => ['The page you were looking for doesn\'t exist.', 'You may have mistyped the address or the page may have moved.'],
9
- 500 => ['We\'re sorry, but something went wrong.', 'We\'ve been notified about this issue and we\'ll take a look at it shortly.']
10
- }
11
-
12
- def scan(view)
13
- Strings.each {|type, set|
14
- matched = true
15
- set.each {|s|
16
- unless view.include?(s)
17
- matched = false
18
- break
19
- end
20
- }
21
- result(:concern_type => :best_practice, :unique => type, :payload => type) if (matched)
22
- }
23
- end
24
- end
25
- end
@@ -1,45 +0,0 @@
1
- # Stratagem::Scan::Result
2
-
3
- module Stratagem::Scan
4
- # Each security check emits 1 or more result objects based on its findings
5
- # Payload is an arbitrary piece of data that the check produces. It must be able to be encoded to JSON
6
- # Unique is a value that identifies the check result within the namespace of the check
7
- class Result
8
- attr_accessor :unique, :check, :component, :payload, :line_number, :code, :passed, :concern_type, :confirmed, :solution_payload, :specialization
9
-
10
- # passed = true / false
11
- def initialize(args)
12
- args.each {|key,value| self.send("#{key}=", value) }
13
- end
14
-
15
- def export
16
- h = {
17
- :guid => guid,
18
- :check_name => check_name,
19
- :specialization => specialization,
20
- :component => component_name,
21
- :payload => payload,
22
- :line_number => line_number,
23
- :code => code,
24
- :concern_type => concern_type,
25
- :confirmed => confirmed || false,
26
- :solution_payload => solution_payload
27
- }
28
- h[:path] = component.path.gsub(RAILS_ROOT+'/', '') if component
29
- h
30
- end
31
-
32
- def component_name
33
- component ? component.name : nil
34
- end
35
-
36
- def check_name
37
- check ? check.name : nil
38
- end
39
-
40
- def guid
41
- "#{check_name.underscore}:#{(component_name || '').underscore}:#{unique.to_s.underscore}"
42
- end
43
- end
44
- end
45
-