brakeman-min 3.1.1 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +18 -0
  3. data/lib/brakeman.rb +17 -13
  4. data/lib/brakeman/checks/base_check.rb +2 -0
  5. data/lib/brakeman/checks/check_content_tag.rb +2 -2
  6. data/lib/brakeman/checks/check_cross_site_scripting.rb +6 -6
  7. data/lib/brakeman/checks/check_deserialize.rb +1 -1
  8. data/lib/brakeman/checks/check_evaluation.rb +1 -1
  9. data/lib/brakeman/checks/check_execute.rb +3 -5
  10. data/lib/brakeman/checks/check_file_access.rb +1 -1
  11. data/lib/brakeman/checks/check_forgery_setting.rb +2 -1
  12. data/lib/brakeman/checks/check_link_to.rb +2 -2
  13. data/lib/brakeman/checks/check_link_to_href.rb +10 -3
  14. data/lib/brakeman/checks/check_mass_assignment.rb +2 -4
  15. data/lib/brakeman/checks/check_model_attributes.rb +1 -0
  16. data/lib/brakeman/checks/check_model_serialize.rb +2 -1
  17. data/lib/brakeman/checks/check_number_to_currency.rb +0 -1
  18. data/lib/brakeman/checks/check_redirect.rb +1 -1
  19. data/lib/brakeman/checks/check_regex_dos.rb +1 -1
  20. data/lib/brakeman/checks/check_render.rb +1 -1
  21. data/lib/brakeman/checks/check_render_inline.rb +28 -16
  22. data/lib/brakeman/checks/check_select_tag.rb +1 -1
  23. data/lib/brakeman/checks/check_send.rb +1 -1
  24. data/lib/brakeman/checks/check_session_manipulation.rb +1 -1
  25. data/lib/brakeman/checks/check_simple_format.rb +1 -1
  26. data/lib/brakeman/checks/check_sql.rb +2 -2
  27. data/lib/brakeman/checks/check_symbol_dos.rb +1 -1
  28. data/lib/brakeman/checks/check_unsafe_reflection.rb +1 -1
  29. data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
  30. data/lib/brakeman/checks/check_weak_hash.rb +0 -1
  31. data/lib/brakeman/checks/check_without_protection.rb +1 -3
  32. data/lib/brakeman/processors/alias_processor.rb +11 -1
  33. data/lib/brakeman/processors/base_processor.rb +4 -1
  34. data/lib/brakeman/processors/controller_processor.rb +2 -0
  35. data/lib/brakeman/processors/haml_template_processor.rb +1 -1
  36. data/lib/brakeman/processors/lib/processor_helper.rb +13 -0
  37. data/lib/brakeman/processors/library_processor.rb +8 -0
  38. data/lib/brakeman/processors/model_processor.rb +2 -0
  39. data/lib/brakeman/report/report_html.rb +11 -1
  40. data/lib/brakeman/report/templates/controller_overview.html.erb +18 -14
  41. data/lib/brakeman/report/templates/controller_warnings.html.erb +18 -14
  42. data/lib/brakeman/report/templates/error_overview.html.erb +8 -4
  43. data/lib/brakeman/report/templates/header.html.erb +32 -18
  44. data/lib/brakeman/report/templates/ignored_warnings.html.erb +11 -7
  45. data/lib/brakeman/report/templates/model_warnings.html.erb +18 -14
  46. data/lib/brakeman/report/templates/overview.html.erb +32 -28
  47. data/lib/brakeman/report/templates/security_warnings.html.erb +18 -14
  48. data/lib/brakeman/report/templates/template_overview.html.erb +10 -6
  49. data/lib/brakeman/report/templates/view_warnings.html.erb +30 -26
  50. data/lib/brakeman/report/templates/warning_overview.html.erb +12 -8
  51. data/lib/brakeman/tracker/collection.rb +12 -0
  52. data/lib/brakeman/tracker/controller.rb +2 -2
  53. data/lib/brakeman/version.rb +1 -1
  54. data/lib/brakeman/warning.rb +29 -6
  55. data/lib/ruby_parser/bm_sexp.rb +18 -0
  56. metadata +16 -2
@@ -1,34 +1,38 @@
1
1
  <h2 id='summary'>Summary</h2>
2
2
  <table>
3
- <tr>
4
- <th>Scanned/Reported</th>
5
- <th>Total</th>
6
- </tr>
7
- <tr>
8
- <td>Controllers</td>
9
- <td><%= tracker.controllers.length %></td>
10
- </tr>
11
- <tr>
12
- <td>Models</td>
13
- <td><%= tracker.models.length - 1 %></td>
14
- </tr>
15
- <tr>
16
- <td>Templates</td>
17
- <td><%= number_of_templates %></td>
18
- </tr>
19
- <tr>
20
- <td>Errors</td>
21
- <td><%= tracker.errors.length %></td>
22
- </tr>
23
- <tr>
24
- <td>Security Warnings</td>
25
- <td><%= warnings %> <span class='high-confidence'>(<%= warnings_summary[:high_confidence] %>)</span></td>
26
- </tr>
3
+ <thead>
4
+ <tr>
5
+ <th>Scanned/Reported</th>
6
+ <th>Total</th>
7
+ </tr>
8
+ </thead>
9
+ <tbody>
10
+ <tr>
11
+ <td>Controllers</td>
12
+ <td><%= tracker.controllers.length %></td>
13
+ </tr>
14
+ <tr>
15
+ <td>Models</td>
16
+ <td><%= tracker.models.length - 1 %></td>
17
+ </tr>
18
+ <tr>
19
+ <td>Templates</td>
20
+ <td><%= number_of_templates %></td>
21
+ </tr>
22
+ <tr>
23
+ <td>Errors</td>
24
+ <td><%= tracker.errors.length %></td>
25
+ </tr>
26
+ <tr>
27
+ <td>Security Warnings</td>
28
+ <td><%= warnings %> <span class='high-confidence'>(<%= warnings_summary[:high_confidence] %>)</span></td>
29
+ </tr>
27
30
  <% if warnings_summary['Ignored Warnings'] %>
28
- <tr>
29
- <td>Ignored Warnings</td>
30
- <td><%= ignored_warnings %></td>
31
- </tr>
31
+ <tr>
32
+ <td>Ignored Warnings</td>
33
+ <td><%= ignored_warnings %></td>
34
+ </tr>
32
35
  <% end %>
36
+ </tbody>
33
37
  </table>
34
38
  <br>
@@ -1,19 +1,23 @@
1
1
  <h2>Security Warnings</h2>
2
2
  <table>
3
- <tr>
4
- <th>Confidence</th>
5
- <th>Class</th>
6
- <th>Method</th>
7
- <th>Warning Type</th>
8
- <th>Message</th>
9
- </tr>
3
+ <thead>
4
+ <tr>
5
+ <th>Confidence</th>
6
+ <th>Class</th>
7
+ <th>Method</th>
8
+ <th>Warning Type</th>
9
+ <th>Message</th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
10
13
  <% warnings.each do |warning| %>
11
- <tr>
12
- <td><%= warning['Confidence']%></td>
13
- <td><%= warning['Class']%></td>
14
- <td><%= warning['Method']%></td>
15
- <td><%= warning['Warning Type']%></td>
16
- <td><%= warning['Message']%></td>
17
- </tr>
14
+ <tr>
15
+ <td><%= warning['Confidence']%></td>
16
+ <td><%= warning['Class']%></td>
17
+ <td><%= warning['Method']%></td>
18
+ <td><%= warning['Warning Type']%></td>
19
+ <td><%= warning['Message']%></td>
20
+ </tr>
18
21
  <% end %>
22
+ </tbody>
19
23
  </table>
@@ -4,14 +4,18 @@
4
4
 
5
5
  <p><%= template[0] %></p>
6
6
  <table>
7
- <tr>
8
- <th>Output</th>
9
- </tr>
7
+ <thead>
8
+ <tr>
9
+ <th>Output</th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
10
13
  <% template[1].each do |call| %>
11
- <tr>
12
- <td><%= call %></td>
13
- </tr>
14
+ <tr>
15
+ <td><%= call %></td>
16
+ </tr>
14
17
  <% end %>
18
+ </tbody>
15
19
  </table>
16
20
 
17
21
  <% end %>
@@ -1,30 +1,34 @@
1
1
  <p>View Warnings</p>
2
2
  <table>
3
- <tr>
4
- <th>Confidence</th>
5
- <th>Template</th>
6
- <th>Warning Type</th>
7
- <th>Message</th>
8
- </tr>
9
- <% warnings.each_with_index do |warning, i| %>
10
- <tr>
11
- <td><%= warning['Confidence']%></td>
12
- <td>
13
- <% if warning['Called From'] and warning['Called From'].length > 1 %>
14
- <div class="template_name" onClick="toggle('callers<%= i %>')" >
15
- <div>
16
- <%= warning['Template'] %>
3
+ <thead>
4
+ <tr>
5
+ <th>Confidence</th>
6
+ <th>Template</th>
7
+ <th>Warning Type</th>
8
+ <th>Message</th>
9
+ </tr>
10
+ </thead>
11
+ <tbody>
12
+ <% warnings.each_with_index do |warning, i| %>
13
+ <tr>
14
+ <td><%= warning['Confidence']%></td>
15
+ <td>
16
+ <% if warning['Called From'] and warning['Called From'].length > 1 %>
17
+ <div class="template_name" onClick="toggle('callers<%= i %>')" >
18
+ <div>
19
+ <%= warning['Template'] %>
20
+ </div>
21
+ <div class="render_path" id="callers<%= i %>" >
22
+ <%= warning['Called From'].join(' &rarr; ') %> &rarr; <%= warning['Template Name'] %>
23
+ </div>
17
24
  </div>
18
- <div class="render_path" id="callers<%= i %>" >
19
- <%= warning['Called From'].join(' &rarr; ') %> &rarr; <%= warning['Template Name'] %>
20
- </div>
21
- </div>
22
- <% else %>
23
- <%= warning['Template']%>
24
- <% end %>
25
- </td>
26
- <td><%= warning['Warning Type']%></td>
27
- <td><%= warning['Message']%></td>
28
- </tr>
29
- <% end %>
25
+ <% else %>
26
+ <%= warning['Template']%>
27
+ <% end %>
28
+ </td>
29
+ <td><%= warning['Warning Type']%></td>
30
+ <td><%= warning['Message']%></td>
31
+ </tr>
32
+ <% end %>
33
+ </tbody>
30
34
  </table>
@@ -1,13 +1,17 @@
1
1
  <table>
2
- <tr>
3
- <th>Warning Type</th>
4
- <th>Total</th>
5
- </tr>
2
+ <thead>
3
+ <tr>
4
+ <th>Warning Type</th>
5
+ <th>Total</th>
6
+ </tr>
7
+ </thead>
8
+ <tbody>
6
9
  <% types.sort.each do |warning_type| %>
7
- <tr>
8
- <td><%= warning_type %></td>
9
- <td><%= warnings_summary[warning_type] %></td>
10
- </tr>
10
+ <tr>
11
+ <td><%= warning_type %></td>
12
+ <td><%= warnings_summary[warning_type] %></td>
13
+ </tr>
11
14
  <% end %>
15
+ </tbody>
12
16
  </table>
13
17
  <br>
@@ -70,6 +70,18 @@ module Brakeman
70
70
  @files.first
71
71
  end
72
72
 
73
+ def top_line
74
+ if sexp? @src[file]
75
+ @src[file].line
76
+ else
77
+ @src.each_value do |source|
78
+ if sexp? source
79
+ return source.line
80
+ end
81
+ end
82
+ end
83
+ end
84
+
73
85
  def methods_public
74
86
  @methods[:public]
75
87
  end
@@ -124,9 +124,9 @@ module Brakeman
124
124
  end
125
125
  end
126
126
 
127
- filter[:methods] = [args[0][1]]
127
+ filter[:methods] = []
128
128
 
129
- args[1..-1].each do |a|
129
+ args.each do |a|
130
130
  filter[:methods] << a[1] if a.node_type == :lit
131
131
  end
132
132
 
@@ -1,3 +1,3 @@
1
1
  module Brakeman
2
- Version = "3.1.1"
2
+ Version = "3.1.2"
3
3
  end
@@ -5,21 +5,39 @@ require 'brakeman/warning_codes'
5
5
  #The Warning class stores information about warnings
6
6
  class Brakeman::Warning
7
7
  attr_reader :called_from, :check, :class, :confidence, :controller,
8
- :line, :method, :model, :template, :user_input, :warning_code, :warning_set,
9
- :warning_type
8
+ :line, :method, :model, :template, :user_input, :user_input_type,
9
+ :warning_code, :warning_set, :warning_type
10
10
 
11
11
  attr_accessor :code, :context, :file, :message, :relative_path
12
12
 
13
13
  TEXT_CONFIDENCE = [ "High", "Medium", "Weak" ]
14
14
 
15
+ OPTIONS = {:called_from => :@called_from,
16
+ :check => :@check,
17
+ :class => :@class,
18
+ :code => :@code,
19
+ :confidence => :@confidence,
20
+ :controller => :@controller,
21
+ :file => :@file,
22
+ :gem_info => :@gem_info,
23
+ :line => :@line,
24
+ :link_path => :@link_path,
25
+ :message => :@message,
26
+ :method => :@method,
27
+ :model => :@model,
28
+ :relative_path => :@relative_path,
29
+ :template => :@template,
30
+ :user_input => :@user_input,
31
+ :warning_set => :@warning_set,
32
+ :warning_type => :@warning_type
33
+ }
34
+
15
35
  #+options[:result]+ can be a result from Tracker#find_call. Otherwise, it can be +nil+.
16
36
  def initialize options = {}
17
37
  @view_name = nil
18
38
 
19
- [:called_from, :check, :class, :code, :confidence, :controller, :file, :gem_info, :line, :link_path,
20
- :message, :method, :model, :relative_path, :template, :user_input, :warning_set, :warning_type].each do |option|
21
-
22
- self.instance_variable_set("@#{option}", options[option])
39
+ OPTIONS.each do |key, var|
40
+ self.instance_variable_set(var, options[key])
23
41
  end
24
42
 
25
43
  result = options[:result]
@@ -39,6 +57,11 @@ class Brakeman::Warning
39
57
  @method = :before_filter
40
58
  end
41
59
 
60
+ if @user_input.is_a? Brakeman::BaseCheck::Match
61
+ @user_input_type = @user_input.type
62
+ @user_input = @user_input.match
63
+ end
64
+
42
65
  if not @line
43
66
  if @user_input and @user_input.respond_to? :line
44
67
  @line = @user_input.line
@@ -554,6 +554,24 @@ class Sexp
554
554
 
555
555
  self[2]
556
556
  end
557
+
558
+ require 'set'
559
+ def inspect seen = Set.new
560
+ if seen.include? self.object_id
561
+ 's(...)'
562
+ else
563
+ seen << self.object_id
564
+ sexp_str = self.map do |x|
565
+ if x.is_a? Sexp
566
+ x.inspect seen
567
+ else
568
+ x.inspect
569
+ end
570
+ end.join(', ')
571
+
572
+ "s(#{sexp_str})"
573
+ end
574
+ end
557
575
  end
558
576
 
559
577
  #Invalidate hash cache if the Sexp changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brakeman-min
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Collins
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - brakeman-public_cert.pem
12
- date: 2015-09-23 00:00:00.000000000 Z
12
+ date: 2015-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-unit
@@ -73,6 +73,20 @@ dependencies:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.2'
76
+ - !ruby/object:Gem::Dependency
77
+ name: safe_yaml
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
76
90
  description: Brakeman detects security vulnerabilities in Ruby on Rails applications
77
91
  via static analysis. This version of the gem only requires the minimum number of
78
92
  dependencies. Use the 'brakeman' gem for a full install.