rack-shield 1.1.1 → 1.2.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
  SHA256:
3
- metadata.gz: fea3d5844980d07e59e42929d6d0679bd4cd636fb5eb9444d02d4a3729710bf1
4
- data.tar.gz: ea7b2700a32bcdd687aed84b4cf815302bff6f4570b9aed2b9a84a42bf7698e3
3
+ metadata.gz: 8853aad4ab5646f5a5477f712fe297f005660958e15358144fc175d4f1497215
4
+ data.tar.gz: 23cf1ec7e0b8d547ccbaf66a63bcb8f8914677a70b1377b8ca4c4ba3894f8d56
5
5
  SHA512:
6
- metadata.gz: e76a82a335a7eaddd9d0cb5f9724f1c0bd722a2f11cf6b3d08f382d16c2cf704753455e9ffb0d9bd199bc6963ba28d59dda2c7878b608a7171e97349c647498c
7
- data.tar.gz: 1f72b350d9c692f8f8f3909d15321848ee21d6f57ddfcc65e2314df8a12f0cf96d1d0b139a3dcada02a5b1f6847c380743f5ef8e7cfa5fae98c4e9c62b8c5f69
6
+ metadata.gz: ddcbe97f5e6f3ba3ba3d50be2b60c248ac1c2e5c730744e498e7b7f6093d4f5adbc7b3c87bdae15569184387c6ef6afaf098752482d869b6842aaaf32eba8360
7
+ data.tar.gz: e558e60a3711893170dc994a9ec6d7c31b871f4237ba8ba7779cec44cc65ed8dd198579f2729e8e438948cbe5c953adba3c521adb70ecea999d22a4ec010567f
data/README.md CHANGED
@@ -37,10 +37,10 @@ Adding to path matchers:
37
37
 
38
38
  ```ruby
39
39
  # Regexp will be matched
40
- Rack::Shield.evil_paths << /\.sql\z/
40
+ Rack::Shield.paths << /\.sql\z/
41
41
 
42
42
  # String will be checked for inclusion
43
- Rack::Shield.evil_paths << '/wp-admin'
43
+ Rack::Shield.paths << '/wp-admin'
44
44
  ```
45
45
  Defaults are defined in `Rack::Shield::DEFAULT_EVIL_PATHS`.
46
46
 
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module Shield
3
- VERSION = '1.1.1'
3
+ VERSION = '1.2.0'
4
4
  end
5
5
  end
data/lib/rack/shield.rb CHANGED
@@ -8,7 +8,7 @@ require_relative 'shield/request_ext'
8
8
  module Rack
9
9
  module Shield
10
10
  DEFAULT_PATHS = [/\/wp-(includes|content|admin|json|config)/,
11
- /\.(php|cgi|asp|aspx|shtml|log|(my)?sql(\.tar)?(\.t?(gz|zip))?|cfm|py|lasso|e?rb|pl|jsp|do|action|sh)\z/i,
11
+ /\.(php|cgi|asp|aspx|shtml|log|(my)?sql(\.tar)?(\.t?(gz|zip))?|cfm|py|lasso|e?rb|pl|jsp|do|action|sh|dll)\z/i,
12
12
  'cgi-bin',
13
13
  'phpmyadmin',
14
14
  '/pma/',
@@ -42,12 +42,18 @@ module Rack
42
42
  'deployment-config.json',
43
43
  'ftpsync.settings',
44
44
  '/_profiler/latest',
45
- '/_ignition/execute-solution',
45
+ '/_ignition/',
46
46
  '/_wpeprivate/',
47
47
  '/Config/SaveUploadedHotspotLogoFile',
48
48
  'ALFA_DATA',
49
49
  'cgialfa',
50
50
  'alfacgiapi',
51
+ '/+CSCOT+/',
52
+ '/api/v2/cmdb/system',
53
+ 'com.vmware.vsan.client.services',
54
+ '/aspnet-ajax/',
55
+ '/Portal.mwsl',
56
+ '/adminer',
51
57
  /\A\/"/,
52
58
  /\/\.(hg|git|svn|bzr|htaccess|ftpconfig|vscode|remote-sync|aws|env|DS_Store)/,
53
59
  /\/old\/?\z/,
@@ -70,17 +76,16 @@ module Rack
70
76
  '<php>',
71
77
  'onload=confirm',
72
78
  'HelloThinkCMF',
73
- 'XDEBUG_SESSION_START',
74
- ]
75
-
79
+ 'XDEBUG_SESSION_START']
80
+
81
+ DEFAULT_BODIES = []
82
+
76
83
  class << self
77
84
 
78
- attr_accessor :paths, :queries, :checks, :responder
85
+ attr_accessor :paths, :queries, :bodies, :checks, :responder
79
86
 
80
87
  def evil?(req)
81
- (req.path && paths.any? { |matcher| match?(req.path, matcher) }) ||
82
- (req.query_string && queries.any? { |matcher| match?(req.query_string, matcher) }) ||
83
- (checks.any? { |matcher| match?(req, matcher) })
88
+ evil_paths?(req) || evil_queries?(req) || evil_checks?(req) || evil_bodies?(req)
84
89
  end
85
90
 
86
91
  def template
@@ -96,10 +101,30 @@ module Rack
96
101
  when Proc then matcher.call(obj)
97
102
  end
98
103
  end
104
+
105
+ def evil_paths?(req)
106
+ req.path && paths.any? { |matcher| match?(req.path, matcher) }
107
+ end
108
+
109
+ def evil_queries?(req)
110
+ req.query_string && queries.any? { |matcher| match?(req.query_string, matcher) }
111
+ end
112
+
113
+ def evil_checks?(req)
114
+ checks.any? { |matcher| match?(req, matcher) }
115
+ end
116
+
117
+ def evil_bodies?(req)
118
+ return false unless req.post? || req.put? || req.patch?
119
+ return false unless body = req.raw_post_data
120
+ return false if body.empty?
121
+ bodies.any? { |matcher| match?(body, matcher) }
122
+ end
99
123
  end
100
124
 
101
125
  self.paths = DEFAULT_PATHS.dup
102
126
  self.queries = DEFAULT_QUERIES.dup
127
+ self.bodies = DEFAULT_BODIES.dup
103
128
  self.checks = []
104
129
  self.responder = Responder
105
130
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-shield
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias Grosser
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-19 00:00:00.000000000 Z
11
+ date: 2023-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack-attack
@@ -44,7 +44,7 @@ homepage: https://github.com/mtgrosser/rack-shield
44
44
  licenses:
45
45
  - MIT
46
46
  metadata: {}
47
- post_install_message:
47
+ post_install_message:
48
48
  rdoc_options: []
49
49
  require_paths:
50
50
  - lib
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  version: '0'
61
61
  requirements: []
62
62
  rubygems_version: 3.1.4
63
- signing_key:
63
+ signing_key:
64
64
  specification_version: 4
65
65
  summary: Block and unblock evil requests
66
66
  test_files: []