brakeman 0.0.2

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 (47) hide show
  1. data/FEATURES +16 -0
  2. data/README.md +112 -0
  3. data/WARNING_TYPES +69 -0
  4. data/bin/brakeman +266 -0
  5. data/lib/checks.rb +67 -0
  6. data/lib/checks/base_check.rb +338 -0
  7. data/lib/checks/check_cross_site_scripting.rb +216 -0
  8. data/lib/checks/check_default_routes.rb +29 -0
  9. data/lib/checks/check_evaluation.rb +29 -0
  10. data/lib/checks/check_execute.rb +110 -0
  11. data/lib/checks/check_file_access.rb +46 -0
  12. data/lib/checks/check_forgery_setting.rb +25 -0
  13. data/lib/checks/check_mass_assignment.rb +72 -0
  14. data/lib/checks/check_model_attributes.rb +36 -0
  15. data/lib/checks/check_redirect.rb +98 -0
  16. data/lib/checks/check_render.rb +65 -0
  17. data/lib/checks/check_send_file.rb +15 -0
  18. data/lib/checks/check_session_settings.rb +36 -0
  19. data/lib/checks/check_sql.rb +124 -0
  20. data/lib/checks/check_validation_regex.rb +60 -0
  21. data/lib/format/style.css +105 -0
  22. data/lib/processor.rb +83 -0
  23. data/lib/processors/alias_processor.rb +384 -0
  24. data/lib/processors/base_processor.rb +235 -0
  25. data/lib/processors/config_processor.rb +146 -0
  26. data/lib/processors/controller_alias_processor.rb +222 -0
  27. data/lib/processors/controller_processor.rb +175 -0
  28. data/lib/processors/erb_template_processor.rb +84 -0
  29. data/lib/processors/erubis_template_processor.rb +62 -0
  30. data/lib/processors/haml_template_processor.rb +115 -0
  31. data/lib/processors/lib/find_call.rb +176 -0
  32. data/lib/processors/lib/find_model_call.rb +39 -0
  33. data/lib/processors/lib/processor_helper.rb +36 -0
  34. data/lib/processors/lib/render_helper.rb +118 -0
  35. data/lib/processors/library_processor.rb +117 -0
  36. data/lib/processors/model_processor.rb +125 -0
  37. data/lib/processors/output_processor.rb +204 -0
  38. data/lib/processors/params_processor.rb +77 -0
  39. data/lib/processors/route_processor.rb +338 -0
  40. data/lib/processors/template_alias_processor.rb +86 -0
  41. data/lib/processors/template_processor.rb +55 -0
  42. data/lib/report.rb +628 -0
  43. data/lib/scanner.rb +232 -0
  44. data/lib/tracker.rb +144 -0
  45. data/lib/util.rb +141 -0
  46. data/lib/warning.rb +97 -0
  47. metadata +191 -0
@@ -0,0 +1,97 @@
1
+ #The Warning class stores information about warnings
2
+ class Warning
3
+ attr_reader :called_from, :check, :class, :code, :confidence, :controller, :file, :line,
4
+ :message, :method, :model, :template, :warning_set, :warning_type
5
+
6
+ #+options[:result]+ can be a result Sexp from FindCall. Otherwise, it can be +nil+.
7
+ def initialize options = {}
8
+ @view_name = nil
9
+
10
+ [:called_from, :check, :class, :code, :confidence, :controller, :file, :line,
11
+ :message, :method, :model, :template, :warning_set, :warning_type].each do |option|
12
+
13
+ self.instance_variable_set("@#{option}", options[option])
14
+ end
15
+
16
+ result = options[:result]
17
+ if result
18
+ if result.length == 3 #template result
19
+ @template ||= result[1]
20
+ @code ||= result[2]
21
+ else
22
+ @class ||= result[1]
23
+ @method ||= result[2]
24
+ @code ||= result[3]
25
+ end
26
+ end
27
+
28
+ if @code and not @line and @code.respond_to? :line
29
+ @line = @code.line
30
+ end
31
+
32
+ unless @warning_set
33
+ if self.model
34
+ @warning_set = :model
35
+ elsif self.template
36
+ @warning_set = :template
37
+ @called_from = self.template[:caller]
38
+ elsif self.controller
39
+ @warning_set = :controller
40
+ else
41
+ @warning_set = :warning
42
+ end
43
+ end
44
+ end
45
+
46
+ #Returns name of a view, including where it was rendered from
47
+ def view_name
48
+ return @view_name if @view_name
49
+ if called_from
50
+ @view_name = "#{template[:name]} (#{called_from})"
51
+ else
52
+ @view_name = template[:name]
53
+ end
54
+ end
55
+
56
+ #Return String of the code output from the OutputProcessor and
57
+ #stripped of newlines
58
+ def format_code
59
+ OutputProcessor.new.format(self.code).gsub(/(\r|\n)+/, " ")
60
+ end
61
+
62
+ #Return formatted warning message
63
+ def format_message
64
+ message = self.message
65
+
66
+ if self.line
67
+ message << " near line #{self.line}"
68
+ end
69
+
70
+ if self.code
71
+ message << ": #{format_code}"
72
+ end
73
+
74
+ message
75
+ end
76
+
77
+ #Generates a hash suitable for inserting into a Ruport table
78
+ def to_row type = :warning
79
+ row = { "Confidence" => self.confidence,
80
+ "Warning Type" => self.warning_type.to_s,
81
+ "Message" => self.format_message }
82
+
83
+ case type
84
+ when :template
85
+ row["Template"] = self.view_name.to_s
86
+ when :model
87
+ row["Model"] = self.model.to_s
88
+ when :controller
89
+ row["Controller"] = self.controller.to_s
90
+ when :warning
91
+ row["Class"] = self.class.to_s
92
+ row["Method"] = self.method.to_s
93
+ end
94
+
95
+ row
96
+ end
97
+ end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brakeman
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Justin Collins
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-27 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: activesupport
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 2
32
+ - 2
33
+ - 2
34
+ version: 2.2.2
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: ruby2ruby
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 1
48
+ - 2
49
+ - 4
50
+ version: 1.2.4
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: ruport
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 9
62
+ segments:
63
+ - 1
64
+ - 6
65
+ - 3
66
+ version: 1.6.3
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: erubis
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 29
78
+ segments:
79
+ - 2
80
+ - 6
81
+ - 5
82
+ version: 2.6.5
83
+ type: :runtime
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: haml
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ hash: 31
94
+ segments:
95
+ - 3
96
+ - 0
97
+ - 12
98
+ version: 3.0.12
99
+ type: :runtime
100
+ version_requirements: *id005
101
+ description: Brakeman detects security vulnerabilities in Ruby on Rails applications via static analysis.
102
+ email:
103
+ executables:
104
+ - brakeman
105
+ extensions: []
106
+
107
+ extra_rdoc_files: []
108
+
109
+ files:
110
+ - bin/brakeman
111
+ - WARNING_TYPES
112
+ - FEATURES
113
+ - README.md
114
+ - lib/report.rb
115
+ - lib/processor.rb
116
+ - lib/tracker.rb
117
+ - lib/processors/controller_processor.rb
118
+ - lib/processors/route_processor.rb
119
+ - lib/processors/alias_processor.rb
120
+ - lib/processors/library_processor.rb
121
+ - lib/processors/params_processor.rb
122
+ - lib/processors/lib/render_helper.rb
123
+ - lib/processors/lib/find_call.rb
124
+ - lib/processors/lib/find_model_call.rb
125
+ - lib/processors/lib/processor_helper.rb
126
+ - lib/processors/erubis_template_processor.rb
127
+ - lib/processors/template_alias_processor.rb
128
+ - lib/processors/erb_template_processor.rb
129
+ - lib/processors/controller_alias_processor.rb
130
+ - lib/processors/config_processor.rb
131
+ - lib/processors/output_processor.rb
132
+ - lib/processors/base_processor.rb
133
+ - lib/processors/haml_template_processor.rb
134
+ - lib/processors/template_processor.rb
135
+ - lib/processors/model_processor.rb
136
+ - lib/warning.rb
137
+ - lib/checks/check_evaluation.rb
138
+ - lib/checks/check_session_settings.rb
139
+ - lib/checks/check_cross_site_scripting.rb
140
+ - lib/checks/check_send_file.rb
141
+ - lib/checks/check_mass_assignment.rb
142
+ - lib/checks/check_default_routes.rb
143
+ - lib/checks/check_model_attributes.rb
144
+ - lib/checks/check_file_access.rb
145
+ - lib/checks/check_render.rb
146
+ - lib/checks/check_forgery_setting.rb
147
+ - lib/checks/base_check.rb
148
+ - lib/checks/check_redirect.rb
149
+ - lib/checks/check_validation_regex.rb
150
+ - lib/checks/check_sql.rb
151
+ - lib/checks/check_execute.rb
152
+ - lib/util.rb
153
+ - lib/checks.rb
154
+ - lib/scanner.rb
155
+ - lib/format/style.css
156
+ has_rdoc: true
157
+ homepage: http://github.com/presidentbeef/brakeman
158
+ licenses: []
159
+
160
+ post_install_message:
161
+ rdoc_options: []
162
+
163
+ require_paths:
164
+ - lib
165
+ required_ruby_version: !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ hash: 3
171
+ segments:
172
+ - 0
173
+ version: "0"
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ none: false
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ hash: 3
180
+ segments:
181
+ - 0
182
+ version: "0"
183
+ requirements: []
184
+
185
+ rubyforge_project:
186
+ rubygems_version: 1.3.7
187
+ signing_key:
188
+ specification_version: 3
189
+ summary: Security vulnerability scanner for Ruby on Rails.
190
+ test_files: []
191
+