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
@@ -35,10 +35,7 @@ module Stratagem::Model::Component
35
35
  self.new(path, parse_tree, klass)
36
36
  }
37
37
  rescue
38
- puts "error loading #{path}"
39
- puts $!.message
40
- puts $!.backtrace
41
- logger.fatal "Unable to load parse tree for #{path}"
38
+ logger.error($!)
42
39
  []
43
40
  end
44
41
  end
@@ -52,10 +52,9 @@ module Stratagem::Model::Component
52
52
  def export
53
53
  {
54
54
  :external_id => self.object_id,
55
- :component_type => :controller,
56
55
  :path => @path ? @path.gsub(RAILS_ROOT+'/', '') : nil,
57
56
  :class_name => klass.name,
58
- :invalid_routes => @invalid_routes
57
+ # :invalid_routes => @invalid_routes
59
58
  }
60
59
  end
61
60
 
@@ -131,21 +131,21 @@ module Stratagem::Model::Component
131
131
  adapters = stratagem? ? klass.stratagem.callbacks.map {|c| c.class.name } : []
132
132
  {
133
133
  :external_id => self.object_id,
134
- :component_type => :model,
135
- :path => @path.gsub(RAILS_ROOT+'/', ''),
136
- :class_name => @klass.name,
137
- :superclass => @klass.methods.include?(:superclass) ? @klass.superclass.name : nil,
138
- :included_modules => @klass.included_modules.map {|m| m.name},
139
- :attributes => @model_attributes,
140
- :foreign_keys => @model_foreign_keys,
141
- :assignable_attributes => @model_assignable_attributes,
142
- :internal_attributes => @model_internal_attributes,
143
- :accessible_attributes => @model_accessible_attributes,
144
- :whitelists_attributes => stratagem? ? @klass.stratagem.whitelists_attributes? : nil,
145
- :blacklists_attributes => stratagem? ? @klass.stratagem.blacklists_attributes? : nil,
146
- :instance_methods => @model_instance_methods,
147
- :relations => relations.map {|r| r.export },
148
- :adapters => adapters
134
+
135
+ :model_path => @path.gsub(RAILS_ROOT+'/', ''),
136
+ :model_class_name => @klass.name,
137
+ :model_superclass => @klass.methods.include?(:superclass) ? @klass.superclass.name : nil,
138
+ :model_included_modules => @klass.included_modules.map {|m| m.name},
139
+ :model_attributes => @model_attributes,
140
+ :model_foreign_keys => @model_foreign_keys,
141
+ :model_assignable_attributes => @model_assignable_attributes,
142
+ :model_internal_attributes => @model_internal_attributes,
143
+ :model_accessible_attributes => @model_accessible_attributes,
144
+ :model_whitelists_attributes => stratagem? ? @klass.stratagem.whitelists_attributes? : nil,
145
+ :model_blacklists_attributes => stratagem? ? @klass.stratagem.blacklists_attributes? : nil,
146
+ :model_instance_methods => @model_instance_methods,
147
+
148
+ :relations_attributes => relations.map {|r| r.export },
149
149
  }
150
150
  end
151
151
 
@@ -1,5 +1,6 @@
1
1
  module Stratagem::Model::Component
2
2
  class Route < Base
3
+ attr_accessor :invalid
3
4
  attr_reader :route, :segment_keys, :path, :verb, :controller_name, :controller_path, :action_name
4
5
 
5
6
  def initialize(route)
@@ -29,7 +30,7 @@ module Stratagem::Model::Component
29
30
  begin
30
31
  route.set.recognize_path(path, :method => request_method) == route.requirements
31
32
  rescue ActionController::RoutingError
32
- puts "ERROR: #{$!.message}"
33
+ puts "ROUTE ERROR: #{$!.message}"
33
34
  end
34
35
  elsif (Stratagem.rails_2?)
35
36
  route.recognize(path, {:method => request_method})
@@ -65,11 +66,11 @@ module Stratagem::Model::Component
65
66
  def export
66
67
  {
67
68
  :external_id => self.object_id,
68
- :component_type => :route,
69
69
  :path => path,
70
70
  :verb => verb,
71
71
  :controller_external_id => controller ? controller.object_id : nil,
72
72
  :action => action_name,
73
+ :valid_route => invalid.nil? ? true : !invalid
73
74
  }
74
75
  end
75
76
  end
@@ -33,7 +33,6 @@ module Stratagem::Model::Component
33
33
  begin
34
34
  {
35
35
  :external_id => self.object_id,
36
- :component_type => :view,
37
36
  :path => @path,
38
37
  :render_path => @render_path,
39
38
  # :forms => forms.map {|form| form.export }
@@ -0,0 +1,60 @@
1
+ module Stratagem::Model::Containers
2
+ class Base
3
+ include Enumerable
4
+
5
+ attr_reader :invalid, :missing, :parse_trees, :components, :errors
6
+
7
+ def initialize(app_model)
8
+ @app_model = app_model
9
+ @components = Set.new()
10
+ @parse_trees = {}
11
+ @invalid = []
12
+ @missing = {}
13
+ end
14
+
15
+ def export(options=nil)
16
+ @invalid.each {|i| i.invalid = true }
17
+ components = @components.to_a.map {|c| c.export }.compact
18
+ components += @invalid.to_a.map {|c| c.export }.compact
19
+ components
20
+ end
21
+
22
+ def find
23
+ @components.find{|component| yield component }
24
+ end
25
+
26
+ def clear
27
+ @components.clear
28
+ end
29
+
30
+ def size
31
+ @components.size
32
+ end
33
+
34
+ def -(other)
35
+ @components-other
36
+ end
37
+
38
+ def each
39
+ @components.each {|e| yield e }
40
+ end
41
+
42
+ def map
43
+ @components.map {|e| yield e }
44
+ end
45
+
46
+ def << (component)
47
+ if (component.kind_of?(Array))
48
+ component.each {|e|
49
+ @components << e
50
+ e.app_model = @app_model if e.methods_include?(:app_model=)
51
+ }
52
+ elsif (component.kind_of?(Exception))
53
+ errors << component
54
+ else
55
+ @components << component
56
+ component.app_model = @app_model if component.methods_include?(:app_model=)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ module Stratagem::Model::Containers
2
+ class Gem
3
+ include Enumerable
4
+
5
+ def initialize(app_model)
6
+ @app_model = app_model
7
+ @gems = ::Gem.loaded_specs
8
+ end
9
+
10
+ def names
11
+ @gems.map {|g| g[0] }
12
+ end
13
+
14
+ def export(options=nil)
15
+ @gems.map {|g|
16
+ name, spec = g
17
+ [name, {:version => spec.version.version}]
18
+ }
19
+ end
20
+
21
+ def each
22
+ @gems.each {|spec| yield spec }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ module Stratagem::Model::Containers
2
+ class Plugin < Base
3
+ def names
4
+ components.map {|plugin| plugin.name }
5
+ end
6
+
7
+ def export(options=nil)
8
+ names
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ module Stratagem::Model::Containers
2
+ class Route < Base
3
+ def recognize(page, method = :get)
4
+ path = nil
5
+ if (page.kind_of?(Stratagem::Crawler::SiteModel::Page))
6
+ method = page.method
7
+ path = page.path
8
+ else
9
+ path = page
10
+ end
11
+
12
+ unless path.nil?
13
+ self.find {|r| r.responds_to?(path, method) }
14
+ else
15
+ nil
16
+ end
17
+ end
18
+ end
19
+ end
@@ -8,10 +8,10 @@ module Stratagem::Model
8
8
  class_names.map {|name|
9
9
  clazz = Kernel
10
10
  begin
11
- name.split('::').each {|part| clazz = clazz.const_get(part) }
12
- clazz
11
+ name.constantize
13
12
  rescue
14
- $!
13
+ p $!
14
+ nil
15
15
  end
16
16
  }
17
17
  end
@@ -118,7 +118,6 @@ module Stratagem
118
118
  # configure the route
119
119
  configure_route(route_container, controller_container)
120
120
  rescue
121
- log "\tinvalid route #{route.to_s} - #{$!.message}"
122
121
  @model.routes.invalid << Stratagem::Model::Component::Route.new(route)
123
122
  end
124
123
  }
@@ -152,11 +151,9 @@ module Stratagem
152
151
  else
153
152
  # if the controller does not contain the indicated method
154
153
  # then check for a template that may be rendered anyway
155
- log "\tinvalid route #{route_container.route.to_s}"
156
154
  unless @model.views.find {|v| v.render_path == "#{route_container.controller_path}/#{route_container.action_name.to_s}" }
157
- # route is invalid
155
+ # route is potentially invalid
158
156
  @model.routes.invalid << Stratagem::Model::Component::Route.new(route_container.route)
159
- log "\tinvalid route #{route_container.route.to_s}"
160
157
  end
161
158
  end
162
159
  end
@@ -0,0 +1,15 @@
1
+ if (Stratagem.rails_version < 300)
2
+ class RackRailsCookieHeaderHack
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ status, headers, body = @app.call(env)
9
+ headers['Set-Cookie'] = headers['Set-Cookie'].first
10
+ [status, headers, body]
11
+ end
12
+ end
13
+
14
+ ActionController::Dispatcher.middleware.insert_before(ActionController::Base.session_store, RackRailsCookieHeaderHack)
15
+ end
@@ -5,7 +5,7 @@ module Stratagem
5
5
  def initialize(application_model)
6
6
  @application_model = application_model
7
7
  end
8
-
8
+
9
9
  def run
10
10
  crawler_session(@application_model) do
11
11
  log "crawling site"
@@ -13,8 +13,8 @@ module Stratagem
13
13
  crawl
14
14
  print
15
15
  end
16
-
17
- users.each do |user|
16
+
17
+ users.slice(0,10).each do |user|
18
18
  page_set("user_#{user.id}") do |pages|
19
19
  authenticate(user) do
20
20
  puts "authenticated with #{user.stratagem.mock_attributes.inspect}"
@@ -34,8 +34,9 @@ module Stratagem
34
34
  end
35
35
 
36
36
  def export
37
+ puts "\tmapping #{site_models.size} page sets"
37
38
  {
38
- :page_sets => site_models.map {|site_model| site_model.export }
39
+ :page_sets_attributes => site_models.map {|site_model| site_model.export }
39
40
  }
40
41
  end
41
42
 
@@ -1,8 +1,9 @@
1
1
  module Stratagem
2
2
  class Snapshot
3
- attr_reader :project_name, :timestamp, :model, :scanner
3
+ attr_reader :project_name, :timestamp, :model
4
4
 
5
5
  def self.create(project_name)
6
+ # Build the meta-model
6
7
  logger.phase('modeling_application')
7
8
  model = Stratagem::ModelBuilder.new.run
8
9
 
@@ -10,10 +11,8 @@ module Stratagem
10
11
  logger.phase('traversing_site')
11
12
  model.crawler = Stratagem::SiteCrawler.new(model).run
12
13
 
13
- logger.phase('vulnerability_scanning')
14
- scanner = Stratagem::Scanner.new(model).run
15
-
16
- snapshot = self.new(project_name, Time.now, model, scanner)
14
+ # Return the snapshot
15
+ self.new(project_name, Time.now, model)
17
16
  end
18
17
 
19
18
  def self.logger
@@ -22,11 +21,10 @@ module Stratagem
22
21
 
23
22
  protected
24
23
 
25
- def initialize(project_name, timestamp, model, scanner)
24
+ def initialize(project_name, timestamp, model)
26
25
  @project_name = project_name
27
26
  @timestamp = timestamp
28
27
  @model = model
29
- @scanner = scanner
30
28
  end
31
29
  end
32
30
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Stratagem::Configuration do
4
+ describe :configure do
5
+ before do
6
+ Stratagem.configure do |config|
7
+ @config = config
8
+ end
9
+ end
10
+
11
+ describe :authenticated_with do
12
+ before do
13
+ @config.authenticate_with do |user|
14
+ @user = user
15
+ user.credentials(:username => "username", :password => "password")
16
+ end
17
+ end
18
+
19
+ it "should yield the configuration object" do
20
+ @user.should be_kind_of Stratagem::Configuration::AuthAuth
21
+ end
22
+
23
+ it "has a username" do
24
+ @user.authentication_parameters[:username].should == 'username'
25
+ end
26
+
27
+ it "has a password" do
28
+ @user.authentication_parameters[:password].should == 'password'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -2,26 +2,23 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{stratagem}
5
- s.version = "0.2.3"
5
+ s.version = "0.2.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Charles Grimes"]
9
- s.date = %q{2010-10-20}
10
- s.default_executable = %q{stratagem}
9
+ s.date = %q{2011-03-07}
11
10
  s.description = %q{Intuitive security analysis for your Rails applications}
12
11
  s.email = %q{cj@stratagemapp.com}
13
- s.executables = ["stratagem"]
14
- s.extra_rdoc_files = ["LICENSE", "bin/stratagem", "lib/bootstrap.rb", "lib/generators/stratagem/install/USAGE", "lib/generators/stratagem/install/install_base.rb", "lib/generators/stratagem/install/install_generator.rb", "lib/stratagem.rb", "lib/stratagem/authentication.rb", "lib/stratagem/auto_mock.rb", "lib/stratagem/auto_mock/aquifer.rb", "lib/stratagem/auto_mock/factory.rb", "lib/stratagem/auto_mock/value_generator.rb", "lib/stratagem/blocker.rb", "lib/stratagem/client.rb", "lib/stratagem/command.rb", "lib/stratagem/commands.rb", "lib/stratagem/commands/analyze.rb", "lib/stratagem/commands/base.rb", "lib/stratagem/commands/devel_mock.rb", "lib/stratagem/crawler.rb", "lib/stratagem/crawler/authentication.rb", "lib/stratagem/crawler/form.rb", "lib/stratagem/crawler/html_utils.rb", "lib/stratagem/crawler/parameter_resolver.rb", "lib/stratagem/crawler/route_invoker.rb", "lib/stratagem/crawler/session.rb", "lib/stratagem/crawler/site_model.rb", "lib/stratagem/crawler/trace_utils.rb", "lib/stratagem/extensions.rb", "lib/stratagem/extensions/class.rb", "lib/stratagem/extensions/hash.rb", "lib/stratagem/extensions/module.rb", "lib/stratagem/extensions/net.rb", "lib/stratagem/extensions/object.rb", "lib/stratagem/extensions/red_parse.rb", "lib/stratagem/extensions/string.rb", "lib/stratagem/extensions/trace_compression.rb", "lib/stratagem/instrumentation.rb", "lib/stratagem/instrumentation/method_invocation.rb", "lib/stratagem/instrumentation/models.rb", "lib/stratagem/instrumentation/models/annotations.rb", "lib/stratagem/instrumentation/models/association.rb", "lib/stratagem/instrumentation/models/authentication.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/detect.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/metadata.rb", "lib/stratagem/instrumentation/models/authentication/devise/detect.rb", "lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/devise/metadata.rb", "lib/stratagem/instrumentation/models/authentication/metadata.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/detect.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/metadata.rb", "lib/stratagem/instrumentation/models/detect.rb", "lib/stratagem/instrumentation/models/metadata.rb", "lib/stratagem/instrumentation/models/mocking.rb", "lib/stratagem/instrumentation/models/persistence.rb", "lib/stratagem/instrumentation/models/persistence/active_record/detect.rb", "lib/stratagem/instrumentation/models/persistence/active_record/extensions.rb", "lib/stratagem/instrumentation/models/persistence/active_record/metadata.rb", "lib/stratagem/instrumentation/models/persistence/active_record/tracing.rb", "lib/stratagem/instrumentation/models/persistence/common/detect.rb", "lib/stratagem/instrumentation/models/persistence/common/extensions.rb", "lib/stratagem/instrumentation/models/persistence/common/metadata.rb", "lib/stratagem/instrumentation/models/persistence/common/tracing.rb", "lib/stratagem/instrumentation/models/support_libraries.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/metadata.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb", "lib/stratagem/instrumentation/models/tracing.rb", "lib/stratagem/instrumentation/rails.rb", "lib/stratagem/instrumentation/rails2/action_controller.rb", "lib/stratagem/instrumentation/rails2/action_mailer.rb", "lib/stratagem/instrumentation/rails3/parameters.rb", "lib/stratagem/instrumentation/request_forgery_protection.rb", "lib/stratagem/interface/browser.rb", "lib/stratagem/interface/public/images/backgrounds/content.png", "lib/stratagem/interface/public/images/backgrounds/shadow.png", "lib/stratagem/interface/public/javascripts/jquery-1.4.2.min.js", "lib/stratagem/interface/public/javascripts/stratagem.js", "lib/stratagem/interface/public/javascripts/stratagem_debug.js", "lib/stratagem/interface/public/stylesheets/960.css", "lib/stratagem/interface/public/stylesheets/reset.css", "lib/stratagem/interface/public/stylesheets/stratagem.css", "lib/stratagem/interface/public/stylesheets/stratagem_debug.css", "lib/stratagem/interface/views/debug.haml", "lib/stratagem/interface/views/index.haml", "lib/stratagem/labs/auto_mock.rb", "lib/stratagem/labs/crawler.rb", "lib/stratagem/logger.rb", "lib/stratagem/model.rb", "lib/stratagem/model/application.rb", "lib/stratagem/model/components/base.rb", "lib/stratagem/model/components/controller.rb", "lib/stratagem/model/components/model.rb", "lib/stratagem/model/components/reference.rb", "lib/stratagem/model/components/route.rb", "lib/stratagem/model/components/static_file.rb", "lib/stratagem/model/components/view.rb", "lib/stratagem/model/parse_util.rb", "lib/stratagem/model_builder.rb", "lib/stratagem/recipes/deploy.rb", "lib/stratagem/scan.rb", "lib/stratagem/scan/checks/capistrano/secure_deploy.rb", "lib/stratagem/scan/checks/email_address.rb", "lib/stratagem/scan/checks/error_pages.rb", "lib/stratagem/scan/result.rb", "lib/stratagem/scanner.rb", "lib/stratagem/site_crawler.rb", "lib/stratagem/snapshot.rb"]
15
- s.files = ["LICENSE", "Manifest", "Rakefile", "bin/stratagem", "generators/stratagem/stratagem_generator.rb", "init.rb", "lib/bootstrap.rb", "lib/generators/stratagem/install/USAGE", "lib/generators/stratagem/install/install_base.rb", "lib/generators/stratagem/install/install_generator.rb", "lib/stratagem.rb", "lib/stratagem/authentication.rb", "lib/stratagem/auto_mock.rb", "lib/stratagem/auto_mock/aquifer.rb", "lib/stratagem/auto_mock/factory.rb", "lib/stratagem/auto_mock/value_generator.rb", "lib/stratagem/blocker.rb", "lib/stratagem/client.rb", "lib/stratagem/command.rb", "lib/stratagem/commands.rb", "lib/stratagem/commands/analyze.rb", "lib/stratagem/commands/base.rb", "lib/stratagem/commands/devel_mock.rb", "lib/stratagem/crawler.rb", "lib/stratagem/crawler/authentication.rb", "lib/stratagem/crawler/form.rb", "lib/stratagem/crawler/html_utils.rb", "lib/stratagem/crawler/parameter_resolver.rb", "lib/stratagem/crawler/route_invoker.rb", "lib/stratagem/crawler/session.rb", "lib/stratagem/crawler/site_model.rb", "lib/stratagem/crawler/trace_utils.rb", "lib/stratagem/extensions.rb", "lib/stratagem/extensions/class.rb", "lib/stratagem/extensions/hash.rb", "lib/stratagem/extensions/module.rb", "lib/stratagem/extensions/net.rb", "lib/stratagem/extensions/object.rb", "lib/stratagem/extensions/red_parse.rb", "lib/stratagem/extensions/string.rb", "lib/stratagem/extensions/trace_compression.rb", "lib/stratagem/instrumentation.rb", "lib/stratagem/instrumentation/method_invocation.rb", "lib/stratagem/instrumentation/models.rb", "lib/stratagem/instrumentation/models/annotations.rb", "lib/stratagem/instrumentation/models/association.rb", "lib/stratagem/instrumentation/models/authentication.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/detect.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/metadata.rb", "lib/stratagem/instrumentation/models/authentication/devise/detect.rb", "lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/devise/metadata.rb", "lib/stratagem/instrumentation/models/authentication/metadata.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/detect.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/metadata.rb", "lib/stratagem/instrumentation/models/detect.rb", "lib/stratagem/instrumentation/models/metadata.rb", "lib/stratagem/instrumentation/models/mocking.rb", "lib/stratagem/instrumentation/models/persistence.rb", "lib/stratagem/instrumentation/models/persistence/active_record/detect.rb", "lib/stratagem/instrumentation/models/persistence/active_record/extensions.rb", "lib/stratagem/instrumentation/models/persistence/active_record/metadata.rb", "lib/stratagem/instrumentation/models/persistence/active_record/tracing.rb", "lib/stratagem/instrumentation/models/persistence/common/detect.rb", "lib/stratagem/instrumentation/models/persistence/common/extensions.rb", "lib/stratagem/instrumentation/models/persistence/common/metadata.rb", "lib/stratagem/instrumentation/models/persistence/common/tracing.rb", "lib/stratagem/instrumentation/models/support_libraries.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/metadata.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb", "lib/stratagem/instrumentation/models/tracing.rb", "lib/stratagem/instrumentation/rails.rb", "lib/stratagem/instrumentation/rails2/action_controller.rb", "lib/stratagem/instrumentation/rails2/action_mailer.rb", "lib/stratagem/instrumentation/rails3/parameters.rb", "lib/stratagem/instrumentation/request_forgery_protection.rb", "lib/stratagem/interface/browser.rb", "lib/stratagem/interface/public/images/backgrounds/content.png", "lib/stratagem/interface/public/images/backgrounds/shadow.png", "lib/stratagem/interface/public/javascripts/jquery-1.4.2.min.js", "lib/stratagem/interface/public/javascripts/stratagem.js", "lib/stratagem/interface/public/javascripts/stratagem_debug.js", "lib/stratagem/interface/public/stylesheets/960.css", "lib/stratagem/interface/public/stylesheets/reset.css", "lib/stratagem/interface/public/stylesheets/stratagem.css", "lib/stratagem/interface/public/stylesheets/stratagem_debug.css", "lib/stratagem/interface/views/debug.haml", "lib/stratagem/interface/views/index.haml", "lib/stratagem/labs/auto_mock.rb", "lib/stratagem/labs/crawler.rb", "lib/stratagem/logger.rb", "lib/stratagem/model.rb", "lib/stratagem/model/application.rb", "lib/stratagem/model/components/base.rb", "lib/stratagem/model/components/controller.rb", "lib/stratagem/model/components/model.rb", "lib/stratagem/model/components/reference.rb", "lib/stratagem/model/components/route.rb", "lib/stratagem/model/components/static_file.rb", "lib/stratagem/model/components/view.rb", "lib/stratagem/model/parse_util.rb", "lib/stratagem/model_builder.rb", "lib/stratagem/recipes/deploy.rb", "lib/stratagem/scan.rb", "lib/stratagem/scan/checks/capistrano/secure_deploy.rb", "lib/stratagem/scan/checks/email_address.rb", "lib/stratagem/scan/checks/error_pages.rb", "lib/stratagem/scan/result.rb", "lib/stratagem/scanner.rb", "lib/stratagem/site_crawler.rb", "lib/stratagem/snapshot.rb", "templates/install/environments/stratagem.rb.erb", "templates/install/tasks/stratagem.rake", "stratagem.gemspec"]
12
+ s.extra_rdoc_files = ["LICENSE", "lib/bootstrap.rb", "lib/generators/stratagem/install/USAGE", "lib/generators/stratagem/install/install_base.rb", "lib/generators/stratagem/install/install_generator.rb", "lib/stratagem.rb", "lib/stratagem/authentication.rb", "lib/stratagem/auto_mock.rb", "lib/stratagem/auto_mock/aquifer.rb", "lib/stratagem/auto_mock/factory.rb", "lib/stratagem/auto_mock/user_loader.rb", "lib/stratagem/auto_mock/value_generator.rb", "lib/stratagem/blocker.rb", "lib/stratagem/client.rb", "lib/stratagem/command.rb", "lib/stratagem/commands.rb", "lib/stratagem/commands/analyze.rb", "lib/stratagem/commands/base.rb", "lib/stratagem/commands/devel_mock.rb", "lib/stratagem/configuration/auth_auth.rb", "lib/stratagem/configuration/core.rb", "lib/stratagem/crawler.rb", "lib/stratagem/crawler/authentication.rb", "lib/stratagem/crawler/authentication/automated.rb", "lib/stratagem/crawler/authentication/base.rb", "lib/stratagem/crawler/authentication/configured.rb", "lib/stratagem/crawler/form.rb", "lib/stratagem/crawler/html_utils.rb", "lib/stratagem/crawler/parameter_resolver.rb", "lib/stratagem/crawler/route_invoker.rb", "lib/stratagem/crawler/session.rb", "lib/stratagem/crawler/site_model.rb", "lib/stratagem/crawler/site_model/edge.rb", "lib/stratagem/crawler/site_model/page.rb", "lib/stratagem/crawler/site_model/page_set.rb", "lib/stratagem/crawler/trace_utils.rb", "lib/stratagem/extensions.rb", "lib/stratagem/extensions/class.rb", "lib/stratagem/extensions/hash.rb", "lib/stratagem/extensions/module.rb", "lib/stratagem/extensions/net.rb", "lib/stratagem/extensions/object.rb", "lib/stratagem/extensions/red_parse.rb", "lib/stratagem/extensions/string.rb", "lib/stratagem/extensions/trace_compression.rb", "lib/stratagem/instrumentation.rb", "lib/stratagem/instrumentation/method_invocation.rb", "lib/stratagem/instrumentation/models.rb", "lib/stratagem/instrumentation/models/annotations.rb", "lib/stratagem/instrumentation/models/association.rb", "lib/stratagem/instrumentation/models/authentication.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/detect.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/metadata.rb", "lib/stratagem/instrumentation/models/authentication/devise/detect.rb", "lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/devise/metadata.rb", "lib/stratagem/instrumentation/models/authentication/metadata.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/detect.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/metadata.rb", "lib/stratagem/instrumentation/models/detect.rb", "lib/stratagem/instrumentation/models/metadata.rb", "lib/stratagem/instrumentation/models/mocking.rb", "lib/stratagem/instrumentation/models/persistence.rb", "lib/stratagem/instrumentation/models/persistence/active_record/detect.rb", "lib/stratagem/instrumentation/models/persistence/active_record/extensions.rb", "lib/stratagem/instrumentation/models/persistence/active_record/metadata.rb", "lib/stratagem/instrumentation/models/persistence/active_record/tracing.rb", "lib/stratagem/instrumentation/models/persistence/common/detect.rb", "lib/stratagem/instrumentation/models/persistence/common/extensions.rb", "lib/stratagem/instrumentation/models/persistence/common/metadata.rb", "lib/stratagem/instrumentation/models/persistence/common/tracing.rb", "lib/stratagem/instrumentation/models/support_libraries.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/metadata.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb", "lib/stratagem/instrumentation/models/tracing.rb", "lib/stratagem/instrumentation/rails.rb", "lib/stratagem/instrumentation/rails2/action_controller.rb", "lib/stratagem/instrumentation/rails2/action_mailer.rb", "lib/stratagem/instrumentation/rails3/parameters.rb", "lib/stratagem/instrumentation/request_forgery_protection.rb", "lib/stratagem/interface/browser.rb", "lib/stratagem/interface/public/images/backgrounds/content.png", "lib/stratagem/interface/public/images/backgrounds/shadow.png", "lib/stratagem/interface/public/javascripts/jquery-1.4.2.min.js", "lib/stratagem/interface/public/javascripts/stratagem.js", "lib/stratagem/interface/public/javascripts/stratagem_debug.js", "lib/stratagem/interface/public/stylesheets/960.css", "lib/stratagem/interface/public/stylesheets/reset.css", "lib/stratagem/interface/public/stylesheets/stratagem.css", "lib/stratagem/interface/public/stylesheets/stratagem_debug.css", "lib/stratagem/interface/views/debug.haml", "lib/stratagem/interface/views/index.haml", "lib/stratagem/labs/auto_mock.rb", "lib/stratagem/labs/crawler.rb", "lib/stratagem/logger.rb", "lib/stratagem/model.rb", "lib/stratagem/model/application.rb", "lib/stratagem/model/components/base.rb", "lib/stratagem/model/components/controller.rb", "lib/stratagem/model/components/model.rb", "lib/stratagem/model/components/reference.rb", "lib/stratagem/model/components/route.rb", "lib/stratagem/model/components/static_file.rb", "lib/stratagem/model/components/view.rb", "lib/stratagem/model/containers/base.rb", "lib/stratagem/model/containers/gem.rb", "lib/stratagem/model/containers/plugin.rb", "lib/stratagem/model/containers/route.rb", "lib/stratagem/model/parse_util.rb", "lib/stratagem/model_builder.rb", "lib/stratagem/rack_hack.rb", "lib/stratagem/recipes/deploy.rb", "lib/stratagem/scan/checks/capistrano/secure_deploy.rb", "lib/stratagem/site_crawler.rb", "lib/stratagem/snapshot.rb"]
13
+ s.files = ["LICENSE", "Manifest", "Rakefile", "generators/stratagem/stratagem_generator.rb", "init.rb", "lib/bootstrap.rb", "lib/generators/stratagem/install/USAGE", "lib/generators/stratagem/install/install_base.rb", "lib/generators/stratagem/install/install_generator.rb", "lib/stratagem.rb", "lib/stratagem/authentication.rb", "lib/stratagem/auto_mock.rb", "lib/stratagem/auto_mock/aquifer.rb", "lib/stratagem/auto_mock/factory.rb", "lib/stratagem/auto_mock/user_loader.rb", "lib/stratagem/auto_mock/value_generator.rb", "lib/stratagem/blocker.rb", "lib/stratagem/client.rb", "lib/stratagem/command.rb", "lib/stratagem/commands.rb", "lib/stratagem/commands/analyze.rb", "lib/stratagem/commands/base.rb", "lib/stratagem/commands/devel_mock.rb", "lib/stratagem/configuration/auth_auth.rb", "lib/stratagem/configuration/core.rb", "lib/stratagem/crawler.rb", "lib/stratagem/crawler/authentication.rb", "lib/stratagem/crawler/authentication/automated.rb", "lib/stratagem/crawler/authentication/base.rb", "lib/stratagem/crawler/authentication/configured.rb", "lib/stratagem/crawler/form.rb", "lib/stratagem/crawler/html_utils.rb", "lib/stratagem/crawler/parameter_resolver.rb", "lib/stratagem/crawler/route_invoker.rb", "lib/stratagem/crawler/session.rb", "lib/stratagem/crawler/site_model.rb", "lib/stratagem/crawler/site_model/edge.rb", "lib/stratagem/crawler/site_model/page.rb", "lib/stratagem/crawler/site_model/page_set.rb", "lib/stratagem/crawler/trace_utils.rb", "lib/stratagem/extensions.rb", "lib/stratagem/extensions/class.rb", "lib/stratagem/extensions/hash.rb", "lib/stratagem/extensions/module.rb", "lib/stratagem/extensions/net.rb", "lib/stratagem/extensions/object.rb", "lib/stratagem/extensions/red_parse.rb", "lib/stratagem/extensions/string.rb", "lib/stratagem/extensions/trace_compression.rb", "lib/stratagem/instrumentation.rb", "lib/stratagem/instrumentation/method_invocation.rb", "lib/stratagem/instrumentation/models.rb", "lib/stratagem/instrumentation/models/annotations.rb", "lib/stratagem/instrumentation/models/association.rb", "lib/stratagem/instrumentation/models/authentication.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/detect.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/authlogic/metadata.rb", "lib/stratagem/instrumentation/models/authentication/devise/detect.rb", "lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/devise/metadata.rb", "lib/stratagem/instrumentation/models/authentication/metadata.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/detect.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/instrumentation.rb", "lib/stratagem/instrumentation/models/authentication/restful_authentication/metadata.rb", "lib/stratagem/instrumentation/models/detect.rb", "lib/stratagem/instrumentation/models/metadata.rb", "lib/stratagem/instrumentation/models/mocking.rb", "lib/stratagem/instrumentation/models/persistence.rb", "lib/stratagem/instrumentation/models/persistence/active_record/detect.rb", "lib/stratagem/instrumentation/models/persistence/active_record/extensions.rb", "lib/stratagem/instrumentation/models/persistence/active_record/metadata.rb", "lib/stratagem/instrumentation/models/persistence/active_record/tracing.rb", "lib/stratagem/instrumentation/models/persistence/common/detect.rb", "lib/stratagem/instrumentation/models/persistence/common/extensions.rb", "lib/stratagem/instrumentation/models/persistence/common/metadata.rb", "lib/stratagem/instrumentation/models/persistence/common/tracing.rb", "lib/stratagem/instrumentation/models/support_libraries.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/friendly_id/metadata.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb", "lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb", "lib/stratagem/instrumentation/models/tracing.rb", "lib/stratagem/instrumentation/rails.rb", "lib/stratagem/instrumentation/rails2/action_controller.rb", "lib/stratagem/instrumentation/rails2/action_mailer.rb", "lib/stratagem/instrumentation/rails3/parameters.rb", "lib/stratagem/instrumentation/request_forgery_protection.rb", "lib/stratagem/interface/browser.rb", "lib/stratagem/interface/public/images/backgrounds/content.png", "lib/stratagem/interface/public/images/backgrounds/shadow.png", "lib/stratagem/interface/public/javascripts/jquery-1.4.2.min.js", "lib/stratagem/interface/public/javascripts/stratagem.js", "lib/stratagem/interface/public/javascripts/stratagem_debug.js", "lib/stratagem/interface/public/stylesheets/960.css", "lib/stratagem/interface/public/stylesheets/reset.css", "lib/stratagem/interface/public/stylesheets/stratagem.css", "lib/stratagem/interface/public/stylesheets/stratagem_debug.css", "lib/stratagem/interface/views/debug.haml", "lib/stratagem/interface/views/index.haml", "lib/stratagem/labs/auto_mock.rb", "lib/stratagem/labs/crawler.rb", "lib/stratagem/logger.rb", "lib/stratagem/model.rb", "lib/stratagem/model/application.rb", "lib/stratagem/model/components/base.rb", "lib/stratagem/model/components/controller.rb", "lib/stratagem/model/components/model.rb", "lib/stratagem/model/components/reference.rb", "lib/stratagem/model/components/route.rb", "lib/stratagem/model/components/static_file.rb", "lib/stratagem/model/components/view.rb", "lib/stratagem/model/containers/base.rb", "lib/stratagem/model/containers/gem.rb", "lib/stratagem/model/containers/plugin.rb", "lib/stratagem/model/containers/route.rb", "lib/stratagem/model/parse_util.rb", "lib/stratagem/model_builder.rb", "lib/stratagem/rack_hack.rb", "lib/stratagem/recipes/deploy.rb", "lib/stratagem/scan/checks/capistrano/secure_deploy.rb", "lib/stratagem/site_crawler.rb", "lib/stratagem/snapshot.rb", "spec/stratagem/configuration_spec.rb", "templates/install/environments/stratagem.rb.erb", "templates/install/script/stratagem", "templates/install/tasks/stratagem.rake", "stratagem.gemspec"]
16
14
  s.homepage = %q{http://www.stratagemapp.com}
17
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Stratagem"]
18
16
  s.require_paths = ["lib"]
19
17
  s.rubyforge_project = %q{stratagem}
20
- s.rubygems_version = %q{1.3.7}
18
+ s.rubygems_version = %q{1.5.0}
21
19
  s.summary = %q{Intuitive security analysis for your Rails applications}
22
20
 
23
21
  if s.respond_to? :specification_version then
24
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
22
  s.specification_version = 3
26
23
 
27
24
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -1,7 +1,7 @@
1
1
  # this file is automatically generated by StrataGem.
2
2
 
3
3
  <% if Rails.version =~ /^3/ -%>
4
- <%= Rails.application.class.name -%>.configure do |config|
4
+ <%= Rails.application.class.name -%>.configure do
5
5
  <% end -%>
6
6
 
7
7
  config.cache_classes = true
@@ -9,8 +9,37 @@ config.whiny_nils = true
9
9
  config.action_controller.consider_all_requests_local = true
10
10
  config.action_controller.perform_caching = false
11
11
  config.action_controller.allow_forgery_protection = true
12
- config.action_mailer.delivery_method = :test
12
+ config.action_mailer.delivery_method = :test
13
+ config.action_mailer.perform_deliveries = false
13
14
 
14
15
  <% if Rails.version =~ /^3/ -%>
15
16
  end
16
17
  <% end -%>
18
+
19
+ Stratagem.prescan do
20
+ # Put any code here that should be run before scanning the web application
21
+ # example: running fixtures to populate the database with test data
22
+ end
23
+
24
+ Stratagem.configure do |stratagem|
25
+ stratagem.use_transactional_crawling = true # wrap page sets in a transaction
26
+ stratagem.use_automatic_mocking = false # experimental and not recommended for large apps
27
+ # when automatic mocking is disabled, the database
28
+ # specified in database.yml must be populated
29
+ # with sample data
30
+
31
+ # repeat this block multiple times to scan the app as different users
32
+ # multiple users are required in order to test for logical view / modify vulnerabilities
33
+ stratagem.authenticate_with do |user|
34
+ user.model = 'User' # default value
35
+ user.credentials(:email => 'user1@example.com', :password => 'password')
36
+ user.authorized_to_view_others_data = false # default value false - can a user can view information created / intended for another user?
37
+ user.authorized_to_modify_others_data = false # default value false - can a user can modify information created / intended for another user?
38
+ user.authorized_to_upload_files = true # default value true - can a user upload files?
39
+ end
40
+
41
+ stratagem.authenticate_with do |user|
42
+ user.credentials(:email => 'user2@example.com', :password => 'password')
43
+ end
44
+ end
45
+