sensitive_data_filter 0.2.4 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5bcd42d1f6150631ffd7b6396c6b55f3fe2d7e0
4
- data.tar.gz: bdc00c28890a73bdfc0ce27dfff8cafb844f9e61
3
+ metadata.gz: e31778956e211080b72def2da410aa33a3f93b86
4
+ data.tar.gz: 8234e02dc9e1e69663cd72aa65fb854a5471f0f7
5
5
  SHA512:
6
- metadata.gz: 3a45d2aa68ce255f7efd545318650c1b3007dda3aa38ec7503233678bcd79a54826188615a222703dbb548179fd341c2cc0f73c12519d174bb04f3186f271eba
7
- data.tar.gz: e13bea99f41ed5a23c64643f8e75d64e11748a27bebee2575e3172fe7e022ea0aecb4da4d5c110103fc30cdfe88a1aa0e59288e7fbeef597e3f24e98a2c8a0b6
6
+ metadata.gz: 4317e1dcf196f132905332abd27ce1227656294edf9b721d6b577d6bab6156860ae687c1aefbbfa122da49245c64aa344841e10f61554027c7ec2a4eacdefd87
7
+ data.tar.gz: e1f221ad6fc0fb2bf57d36d6b0652de4f410e3ff587f5cb73069b0fa0eac85b21f8343a2e721541d5137abf2527010001bffab58c1c6cbe34f247874a9ae74cf
data/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
  This changelog adheres to [Keep a CHANGELOG](http://keepachangelog.com/).
5
5
 
6
+ ## [0.3.0] - 2016-12-28
7
+ ### Changed
8
+ - Allows whitelisting hash values based on the key
9
+ - Updates README for usage with Rails middleware stack
10
+
11
+ ### Added
12
+ - Adds `original_env` and `filtered_env` properties to occurrence
13
+
6
14
  ## [0.2.4] - 2016-12-22
7
15
  ### Changed
8
16
  - Does not match credit cards numbers that are part of alphanumerical strings
@@ -14,7 +22,6 @@ This changelog adheres to [Keep a CHANGELOG](http://keepachangelog.com/).
14
22
  ### Changed
15
23
  - Does not match credit cards numbers that are part of longer numbers
16
24
 
17
-
18
25
  ## [0.2.2] - 2016-12-21
19
26
  ### Fixed
20
27
  - Implements stricter credit cards pattern matching
data/README.md CHANGED
@@ -28,7 +28,7 @@ Or install it yourself as:
28
28
 
29
29
  ### Enable the middleware
30
30
 
31
- Insert the middleware in the stack before any parameter parsing is performed
31
+ Insert the middleware in the stack before any parameter parsing is performed.
32
32
 
33
33
  E.g. for Rails, add the following in application.rb
34
34
 
@@ -37,6 +37,21 @@ E.g. for Rails, add the following in application.rb
37
37
  config.middleware.insert_before 'ActionDispatch::ParamsParser', SensitiveDataFilter::Middleware::Filter
38
38
  ```
39
39
 
40
+ To ensure that no sensitive data is accessed at any level of the stack, insert the middleware at the top of the stack.
41
+
42
+ E.g.
43
+
44
+ ```ruby
45
+ # --- Sensitive Data Filtering ---
46
+ config.middleware.insert_before 0, SensitiveDataFilter::Middleware::Filter
47
+ ```
48
+
49
+ #### Important note for Rails
50
+
51
+ Rails logs the URI of the request in ``Rails::Rack::Logger``. At this point of the stack, Rails generally has not yet set the session in the env.
52
+ If you insert the sensitive data filtering middleware before this middleware you will prevent sensitive data from appearing in the logs,
53
+ but you will not have access to the session via the occurrence or the env in the occurrence handling block.
54
+
40
55
  ### Configuration
41
56
 
42
57
  ```ruby
@@ -46,6 +61,7 @@ SensitiveDataFilter.config do |config|
46
61
  # Report occurrence
47
62
  end
48
63
  config.whitelist pattern1, pattern2 # Allows specifying patterns to whitelist matches
64
+ config.whitelist_key key_pattern1, key_pattern2 # Allows specifying patterns to whitelist hash values based on their keys
49
65
  config.register_parser('yaml', -> params { YAML.load params }, -> params { YAML.dump params })
50
66
  end
51
67
  ```
@@ -63,6 +79,8 @@ An occurrence object has the following properties:
63
79
  * session: the session properties for the request
64
80
  * matches: the matched sensitive data
65
81
  * matches_count: the number of matches per data type, e.g. { 'CreditCard' => 1 }
82
+ * original_env: the original unfiltered Rack env
83
+ * filtered_env: the filtered Rack env which will be passed down the middleware stack
66
84
 
67
85
  It also exposes `to_h` and `to_s` methods for hash and string representation respectively.
68
86
  Please note that these representations omit sensitive data,
@@ -91,6 +109,9 @@ filtered_body_params = if @occurrence.filtered_body_params.is_a? Hash
91
109
  A list of whitelisting patterns can be passed to `config.whitelist`.
92
110
  Any sensitive data match which also matches any of these patterns will be ignored.
93
111
 
112
+ A list of whitelisting patterns can be passed to `config.whitelist_key`.
113
+ When scanning and matching hashes, any value whose key matches any of these patterns will be ignored.
114
+
94
115
  #### Parameter Parsing
95
116
 
96
117
  Parsers for parameters encoded for a specific content type can be defined.
@@ -20,6 +20,10 @@ module SensitiveDataFilter
20
20
  config.whitelist_patterns.any? { |pattern| value.match pattern }
21
21
  end
22
22
 
23
+ def self.whitelisted_key?(key)
24
+ config.whitelist_key_patterns.any? { |pattern| key.match pattern }
25
+ end
26
+
23
27
  class Config
24
28
  DEFAULT_TYPES = %i(credit_card).freeze
25
29
 
@@ -45,6 +49,14 @@ module SensitiveDataFilter
45
49
  @whitelist_patterns ||= []
46
50
  end
47
51
 
52
+ def whitelist_key(*patterns)
53
+ @whitelist_key_patterns = patterns
54
+ end
55
+
56
+ def whitelist_key_patterns
57
+ @whitelist_key_patterns ||= []
58
+ end
59
+
48
60
  def register_parser(content_type, parser, unparser)
49
61
  SensitiveDataFilter::Middleware::ParameterParser
50
62
  .register_parser(content_type, parser, unparser)
@@ -12,7 +12,13 @@ module SensitiveDataFilter
12
12
  end
13
13
 
14
14
  module_function def mask_hash(hash)
15
- hash.map { |key, value| [mask(key), mask(value)] }.to_h
15
+ hash.map { |key, value| mask_key_value(key, value) }.to_h
16
+ end
17
+
18
+ module_function def mask_key_value(key, value)
19
+ masked_key = mask(key)
20
+ return [masked_key, value] if SensitiveDataFilter.whitelisted_key? key
21
+ [masked_key, mask(value)]
16
22
  end
17
23
  end
18
24
  end
@@ -35,6 +35,14 @@ module SensitiveDataFilter
35
35
  @filtered_env_parser.body_params
36
36
  end
37
37
 
38
+ def original_env
39
+ @original_env_parser.env
40
+ end
41
+
42
+ def filtered_env
43
+ @filtered_env_parser.env
44
+ end
45
+
38
46
  def_delegators :@filtered_env_parser, :request_method, :url, :content_type, :session
39
47
 
40
48
  def matches_count
@@ -17,7 +17,13 @@ module SensitiveDataFilter
17
17
  end
18
18
 
19
19
  def self.scan_hash(hash)
20
- hash.map { |key, value| scan(key).collate(scan(value)) }.inject(:collate) || {}
20
+ hash.map { |key, value| scan_key_value(key, value) }.inject(:collate) || {}
21
+ end
22
+
23
+ def self.scan_key_value(key, value)
24
+ key_scan = scan(key)
25
+ return key_scan if SensitiveDataFilter.whitelisted_key? key
26
+ key_scan.collate(scan(value))
21
27
  end
22
28
 
23
29
  def self.whitelist(matches)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module SensitiveDataFilter
3
- VERSION = '0.2.4'
3
+ VERSION = '0.3.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensitive_data_filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Berardi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-12-22 00:00:00.000000000 Z
12
+ date: 2016-12-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack