stratagem 0.2.3 → 0.2.4

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 (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
-