glib-web 5.1.3 → 5.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54f283b08cba85e7935323705254ff4c53831314f87a71661f11761d4be37544
4
- data.tar.gz: df856aaa88383c8e54384d8d0a6ed81536f5457efc0b523d1cf5dba0ef558a9b
3
+ metadata.gz: d834dc054cfc079edbcf57609a2d05b4ad8837a8abfea74f3d75d75d546235a6
4
+ data.tar.gz: 850b0614ff17f7b436c49593bcfc28d2559dcf19505b543093f498f1c255817f
5
5
  SHA512:
6
- metadata.gz: d4011507ec92ac5666c5af93ef6b7cca59444fdae226b20a805a2582e1710138b9839ed0f430ca585b7fb3f2120d1d541a0120c61655347defa7b90344d631eb
7
- data.tar.gz: 548c0fcd1edb93c05f846acf93114b818127ccb5e3e5c8f1c65dad2c195ba8e9b66ca12d2aef37344c622d321ad9b799d1794bcc9314f7f524db7840194f6ecf
6
+ metadata.gz: 859713dca4f2084b66389beadfcac6468d94b9d93006a1dedc7bf238eb68ce9e98ba1cbe89871e563a2e63c627624291778d811ae29c3f4a263badae8277adaf
7
+ data.tar.gz: 8c25c1f91953477464b2fd238c06c8ee8ddbb0d943ef2848c14b359a6ce137c79e35d7c4591812fe312785664a072cc101be04f6fd14f664a3ab108368a015d8
@@ -2,6 +2,13 @@ module Glib::Params
2
2
  module Allowlist
3
3
  extend ActiveSupport::Concern
4
4
 
5
+ # Raised when a MUTATING request submits a present-but-unrecognised value:
6
+ # real clients only submit values the UI offered, so a mismatch means a
7
+ # value was forgotten from the allow-list or the client is broken — both
8
+ # must surface (via the consumer's 500/reporting pipeline), not silently
9
+ # degrade into the wrong behavior.
10
+ class UnrecognizedValue < StandardError; end
11
+
5
12
  # Resolve a stringly-typed request param (or any boundary string) to one
6
13
  # symbol drawn from a closed allow-list (+allowed_symbols+), returning
7
14
  # +default+ when the value is missing, blank, or not recognised.
@@ -13,9 +20,15 @@ module Glib::Params
13
20
  # +allowed_symbols+ (or +default+), so attacker input can never create a new
14
21
  # symbol regardless of what is sent.
15
22
  #
16
- # nil / "" fall through to +default+ implicitly (no symbol's string form is
17
- # blank). Use it for any closed-vocabulary boundary input: interval
18
- # selectors, status filters, UTM tags, feature-flag names.
23
+ # Degrade-vs-raise is decided by the REQUEST METHOD:
24
+ # - GET/HEAD: unrecognised values quietly degrade to +default+ — crawlers
25
+ # and bots probe read endpoints with garbage, and a filter page must not
26
+ # 500 on `?mode=garbage`.
27
+ # - Mutating requests (POST/PATCH/PUT/DELETE): a PRESENT-but-unrecognised
28
+ # value raises UnrecognizedValue (see above) — this is how a forgotten
29
+ # allow-list entry announces itself instead of hiding.
30
+ # Blank/missing values fall through to +default+ quietly on EVERY method
31
+ # (forms legitimately post no value; no symbol's string form is blank).
19
32
  #
20
33
  # +allowed_symbols+ may also contain strings (e.g. a Rails enum's `.keys`)
21
34
  # — the matched entry is symbolized on the way out, so the return value is
@@ -23,7 +36,16 @@ module Glib::Params
23
36
  # developer-controlled list entry, never on +value+, so the DoS-safety
24
37
  # above is unaffected.
25
38
  def glib_allowlist_symbol_param(value, allowed_symbols, default:)
26
- allowed_symbols.find { |symbol| symbol.to_s == value.to_s }&.to_sym || default
39
+ match = allowed_symbols.find { |symbol| symbol.to_s == value.to_s }&.to_sym
40
+ return match if match
41
+
42
+ if value.present? && !request.get? && !request.head?
43
+ raise UnrecognizedValue,
44
+ "Unrecognised #{request.request_method} param value #{value.to_s.truncate(80).inspect} " \
45
+ "(allowed: #{allowed_symbols.map(&:to_sym).inspect})"
46
+ end
47
+
48
+ default
27
49
  end
28
50
  end
29
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glib-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.3
4
+ version: 5.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''