aikido-zen 1.0.2.beta.1-x86_64-mingw-64 → 1.0.2.beta.2-x86_64-mingw-64

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: 87a850ae8220f054a061b224178e250c7f8e8c734f8c3a4451a62f7ebf464377
4
- data.tar.gz: c3801386633cec931748c69ba7f66ad219e21329c59ce7486585cc324a8b7125
3
+ metadata.gz: df08748f71489b839ce1f792902314b6584d7262c306e9db836bcc977549223f
4
+ data.tar.gz: bb19e98304fbfc5b4676e9472dba44ed68517921c2bce17e79a8136d4d2da800
5
5
  SHA512:
6
- metadata.gz: ff8359526cba8c500244203a3d979592813140a2685c58f81702dd89fa80faed85d43f6e76f765db1aad48b27733fc4f79cfdd51bfb97f79b5dffd7e060b1888
7
- data.tar.gz: e707a8623f2081c11031e47e1b22ba35d503ca29dfee2ea234e3379d1cbac194cc6147de5bc30a99f5534f0cfa170aea4ab9038510826c09ed3a36e7aab7415e
6
+ metadata.gz: 120676b9f0f20fd1876ef61e6e74b8c62366707ecce112427f930f9b2753cbd17af5190d3fd037708c0dc80fb8c280755502b8fafbb6f08340b815dce1af56be
7
+ data.tar.gz: e78d3459416dc19e6cd5e0a9e6a0f2545a5101ec92975d64273ec455601697fc717dd3248648274dce7031d58fe80a0ad05d8ca45331723ddcf4800f38303b26
data/docs/proxy.md ADDED
@@ -0,0 +1,10 @@
1
+ # Proxy settings
2
+
3
+ We'll automatically use the `HTTP_X_FORWARDED_FOR` header to determine the client's IP address when behind a trusted proxy.
4
+
5
+ If you need to use a different header to determine the client's IP address, you can set the `AIKIDO_CLIENT_IP_HEADER` environment variable to the name of that header. This will override the default `HTTP_X_FORWARDED_FOR` header.
6
+
7
+ ```bash
8
+ # For Fly.io Platform
9
+ AIKIDO_CLIENT_IP_HEADER=HTTP_FLY_CLIENT_IP bin/rails server
10
+ ```
data/docs/rails.md CHANGED
@@ -66,7 +66,7 @@ Rails.application.config.zen.api_timeouts = 20
66
66
  You can access the configuration object both as `Aikido::Zen.config` or
67
67
  `Rails.configuration.zen`.
68
68
 
69
- See our [configuration guide](docs/config.md) for more details.
69
+ See our [configuration guide](./config.md) for more details.
70
70
 
71
71
  ## Using Rails encrypted credentials
72
72
 
@@ -61,7 +61,7 @@ module Aikido::Zen
61
61
  # @return [Logger]
62
62
  attr_reader :logger
63
63
 
64
- # @return [string] Path of the socket where the detached agent will listen.
64
+ # @return [String] Path of the socket where the detached agent will listen.
65
65
  # By default, is stored under the root application path with file name
66
66
  # `aikido-detached-agent.sock`
67
67
  attr_accessor :detached_agent_socket_path
@@ -150,6 +150,9 @@ module Aikido::Zen
150
150
  # allow known hosts that should be able to resolve to the IMDS service.
151
151
  attr_accessor :imds_allowed_hosts
152
152
 
153
+ # @return [String] environment specific HTTP header providing the client IP.
154
+ attr_accessor :client_ip_header
155
+
153
156
  def initialize
154
157
  self.disabled = read_boolean_from_env(ENV.fetch("AIKIDO_DISABLED", false))
155
158
  self.blocking_mode = read_boolean_from_env(ENV.fetch("AIKIDO_BLOCK", false))
@@ -163,8 +166,9 @@ module Aikido::Zen
163
166
  self.json_decoder = DEFAULT_JSON_DECODER
164
167
  self.debugging = read_boolean_from_env(ENV.fetch("AIKIDO_DEBUG", false))
165
168
  self.logger = Logger.new($stdout, progname: "aikido", level: debugging ? Logger::DEBUG : Logger::INFO)
166
- self.max_performance_samples = 5000
167
169
  self.detached_agent_socket_path = ENV.fetch("AIKIDO_DETACHED_AGENT_SOCKET_PATH", DEFAULT_DETACHED_AGENT_SOCKET_PATH)
170
+ self.client_ip_header = ENV.fetch("AIKIDO_CLIENT_IP_HEADER", nil)
171
+ self.max_performance_samples = 5000
168
172
  self.max_compressed_stats = 100
169
173
  self.max_outbound_connections = 200
170
174
  self.max_users_tracked = 1000
@@ -27,7 +27,7 @@ module Aikido::Zen
27
27
  {
28
28
  payload: value.to_s,
29
29
  source: SOURCE_SERIALIZATIONS[source],
30
- pathToPayload: path.to_s
30
+ path: path.to_s
31
31
  }
32
32
  end
33
33
 
@@ -17,8 +17,9 @@ module Aikido::Zen
17
17
  # @see Aikido::Zen.track_user
18
18
  attr_accessor :actor
19
19
 
20
- def initialize(delegate, framework:, router:)
20
+ def initialize(delegate, config = Aikido::Zen.config, framework:, router:)
21
21
  super(delegate)
22
+ @config = config
22
23
  @framework = framework
23
24
  @router = router
24
25
  @body_read = false
@@ -40,6 +41,24 @@ module Aikido::Zen
40
41
  @schema ||= Aikido::Zen::Request::Schema.build
41
42
  end
42
43
 
44
+ # @api private
45
+ #
46
+ # @return [String] the IP address of the client making the request.
47
+ def client_ip
48
+ return @client_ip if @client_ip
49
+
50
+ if @config.client_ip_header
51
+ value = env[@config.client_ip_header]
52
+ if Resolv::AddressRegex.match?(value)
53
+ @client_ip = value
54
+ else
55
+ @config.logger.warn("Invalid IP address in custom client IP header `#{@config.client_ip_header}`: `#{value}`")
56
+ end
57
+ end
58
+
59
+ @client_ip ||= respond_to?(:remote_ip) ? remote_ip : ip
60
+ end
61
+
43
62
  # Map the CGI-style env Hash into "pretty-looking" headers, preserving the
44
63
  # values as-is. For example, HTTP_ACCEPT turns into "Accept", CONTENT_TYPE
45
64
  # turns into "Content-Type", and HTTP_X_FORWARDED_FOR turns into
@@ -87,7 +106,7 @@ module Aikido::Zen
87
106
  {
88
107
  method: request_method.downcase,
89
108
  url: url,
90
- ipAddress: ip,
109
+ ipAddress: client_ip,
91
110
  userAgent: user_agent,
92
111
  headers: normalized_headers.reject { |_, val| val.to_s.empty? },
93
112
  body: truncated_body,
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Aikido
4
4
  module Zen
5
- VERSION = "1.0.2.beta.1"
5
+ VERSION = "1.0.2.beta.2"
6
6
 
7
7
  # The version of libzen_internals that we build against.
8
8
  LIBZEN_VERSION = "0.1.39"
data/tasklib/libzen.rake CHANGED
@@ -76,6 +76,7 @@ LIBZENS = [
76
76
  LibZen.new("arm64-darwin.dylib", "libzen_internals_aarch64-apple-darwin.dylib"),
77
77
  LibZen.new("arm64-linux.so", "libzen_internals_aarch64-unknown-linux-gnu.so"),
78
78
  LibZen.new("arm64-linux-musl.so", "libzen_internals_aarch64-unknown-linux-musl.so"),
79
+ LibZen.new("aarch64-linux.so", "libzen_internals_aarch64-unknown-linux-gnu.so"),
79
80
  LibZen.new("x86_64-darwin.dylib", "libzen_internals_x86_64-apple-darwin.dylib"),
80
81
  LibZen.new("x86_64-linux.so", "libzen_internals_x86_64-unknown-linux-gnu.so"),
81
82
  LibZen.new("x86_64-linux-musl.so", "libzen_internals_x86_64-unknown-linux-musl.so"),
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aikido-zen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2.beta.1
4
+ version: 1.0.2.beta.2
5
5
  platform: x86_64-mingw-64
6
6
  authors:
7
7
  - Aikido Security
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-08-27 00:00:00.000000000 Z
11
+ date: 2025-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -74,6 +74,7 @@ files:
74
74
  - benchmarks/rails7.1_sql_injection.js
75
75
  - docs/banner.svg
76
76
  - docs/config.md
77
+ - docs/proxy.md
77
78
  - docs/rails.md
78
79
  - lib/aikido-zen.rb
79
80
  - lib/aikido/zen.rb