sqreen 1.18.3-java → 1.19.1-java
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 +4 -4
- data/CHANGELOG.md +28 -0
- data/lib/sqreen.rb +2 -0
- data/lib/sqreen/actions.rb +2 -0
- data/lib/sqreen/actions/actions_index.rb +16 -0
- data/lib/sqreen/actions/base.rb +4 -10
- data/lib/sqreen/actions/block_ip.rb +2 -0
- data/lib/sqreen/actions/block_user.rb +2 -0
- data/lib/sqreen/actions/ip_range_indexed_action_class.rb +4 -24
- data/lib/sqreen/actions/ip_ranges_index.rb +32 -11
- data/lib/sqreen/actions/redirect_ip.rb +2 -0
- data/lib/sqreen/actions/redirect_user.rb +2 -0
- data/lib/sqreen/actions/repository.rb +27 -8
- data/lib/sqreen/actions/unknown_action_type.rb +4 -0
- data/lib/sqreen/actions/user_action_class.rb +5 -30
- data/lib/sqreen/actions/users_index.rb +35 -0
- data/lib/sqreen/agent.rb +2 -1
- data/lib/sqreen/attack_blocked.rb +2 -0
- data/lib/sqreen/backport.rb +2 -0
- data/lib/sqreen/backport/clock_gettime.rb +74 -0
- data/lib/sqreen/backport/original_name.rb +2 -0
- data/lib/sqreen/binding_accessor.rb +2 -0
- data/lib/sqreen/binding_accessor/path_elem.rb +2 -0
- data/lib/sqreen/binding_accessor/transforms.rb +8 -1
- data/lib/sqreen/call_countable.rb +2 -0
- data/lib/sqreen/capped_queue.rb +2 -0
- data/lib/sqreen/cb.rb +2 -0
- data/lib/sqreen/cb_tree.rb +2 -0
- data/lib/sqreen/condition_evaluator.rb +2 -0
- data/lib/sqreen/conditionable.rb +2 -0
- data/lib/sqreen/configuration.rb +14 -0
- data/lib/sqreen/context.rb +2 -0
- data/lib/sqreen/default_cb.rb +2 -0
- data/lib/sqreen/deferred_logger.rb +2 -0
- data/lib/sqreen/deliveries.rb +2 -0
- data/lib/sqreen/deliveries/batch.rb +2 -0
- data/lib/sqreen/deliveries/simple.rb +2 -0
- data/lib/sqreen/dependency.rb +3 -1
- data/lib/sqreen/dependency/detector.rb +22 -14
- data/lib/sqreen/dependency/libsqreen.rb +4 -0
- data/lib/sqreen/dependency/new_relic.rb +2 -0
- data/lib/sqreen/dependency/rack.rb +10 -5
- data/lib/sqreen/dependency/rails.rb +4 -0
- data/lib/sqreen/dependency/sentry.rb +2 -0
- data/lib/sqreen/dependency/sinatra.rb +12 -1
- data/lib/sqreen/encoding_sanitizer.rb +2 -0
- data/lib/sqreen/error_handling_middleware.rb +2 -0
- data/lib/sqreen/event.rb +2 -0
- data/lib/sqreen/events/attack.rb +2 -0
- data/lib/sqreen/events/remote_exception.rb +2 -0
- data/lib/sqreen/events/request_record.rb +2 -0
- data/lib/sqreen/exception.rb +2 -0
- data/lib/sqreen/formatter_with_tid.rb +2 -0
- data/lib/sqreen/framework_cb.rb +2 -0
- data/lib/sqreen/frameworks.rb +2 -0
- data/lib/sqreen/frameworks/generic.rb +2 -0
- data/lib/sqreen/frameworks/rails.rb +1 -0
- data/lib/sqreen/frameworks/rails3.rb +2 -0
- data/lib/sqreen/frameworks/request_recorder.rb +2 -0
- data/lib/sqreen/frameworks/sinatra.rb +2 -0
- data/lib/sqreen/frameworks/sqreen_test.rb +2 -0
- data/lib/sqreen/graft.rb +12 -0
- data/lib/sqreen/graft/call.rb +150 -0
- data/lib/sqreen/{dependency → graft}/callback.rb +12 -4
- data/lib/sqreen/graft/hook.rb +316 -0
- data/lib/sqreen/{dependency → graft}/hook_point.rb +152 -33
- data/lib/sqreen/graft/hook_point_error.rb +10 -0
- data/lib/sqreen/invalid_signature_exception.rb +2 -0
- data/lib/sqreen/js.rb +2 -0
- data/lib/sqreen/js/call_context.rb +2 -0
- data/lib/sqreen/js/context_pool.rb +2 -0
- data/lib/sqreen/js/exec_js_runnable.rb +2 -0
- data/lib/sqreen/js/execjs_adapter.rb +2 -0
- data/lib/sqreen/js/executable_js.rb +2 -0
- data/lib/sqreen/js/js_service.rb +2 -0
- data/lib/sqreen/js/js_service_adapter.rb +2 -0
- data/lib/sqreen/js/mini_racer_adapter.rb +2 -0
- data/lib/sqreen/js/mini_racer_executable_js.rb +2 -0
- data/lib/sqreen/js/thread_local_exec_js_runnable.rb +2 -0
- data/lib/sqreen/legacy.rb +8 -0
- data/lib/sqreen/{instrumentation.rb → legacy/instrumentation.rb} +39 -10
- data/lib/sqreen/log.rb +2 -0
- data/lib/sqreen/log/loggable.rb +28 -0
- data/lib/sqreen/logger.rb +2 -0
- data/lib/sqreen/metrics.rb +2 -0
- data/lib/sqreen/metrics/average.rb +2 -0
- data/lib/sqreen/metrics/base.rb +2 -0
- data/lib/sqreen/metrics/binning.rb +2 -0
- data/lib/sqreen/metrics/collect.rb +2 -0
- data/lib/sqreen/metrics/sum.rb +2 -0
- data/lib/sqreen/metrics_store.rb +2 -0
- data/lib/sqreen/metrics_store/already_registered_metric.rb +2 -0
- data/lib/sqreen/metrics_store/unknown_metric.rb +2 -0
- data/lib/sqreen/metrics_store/unregistered_metric.rb +2 -0
- data/lib/sqreen/middleware.rb +2 -0
- data/lib/sqreen/mono_time.rb +2 -0
- data/lib/sqreen/node.rb +2 -0
- data/lib/sqreen/not_implemented_yet.rb +2 -0
- data/lib/sqreen/null_logger.rb +2 -0
- data/lib/sqreen/payload_creator.rb +2 -0
- data/lib/sqreen/payload_creator/header_section.rb +2 -0
- data/lib/sqreen/performance_notifications.rb +2 -0
- data/lib/sqreen/performance_notifications/binned_metrics.rb +2 -0
- data/lib/sqreen/performance_notifications/log.rb +2 -0
- data/lib/sqreen/performance_notifications/log_performance.rb +2 -0
- data/lib/sqreen/performance_notifications/metrics.rb +2 -0
- data/lib/sqreen/performance_notifications/newrelic.rb +2 -0
- data/lib/sqreen/prefix.rb +2 -0
- data/lib/sqreen/rails_middleware.rb +2 -0
- data/lib/sqreen/remote_command.rb +2 -0
- data/lib/sqreen/remote_command/failure_output.rb +5 -0
- data/lib/sqreen/rules.rb +2 -0
- data/lib/sqreen/rules/attrs.rb +2 -0
- data/lib/sqreen/rules/auth_track_cb.rb +2 -0
- data/lib/sqreen/rules/binding_accessor_matcher_cb.rb +2 -0
- data/lib/sqreen/rules/binding_accessor_metrics.rb +2 -0
- data/lib/sqreen/rules/blacklist_ips_cb.rb +2 -0
- data/lib/sqreen/rules/count_http_codes.rb +2 -0
- data/lib/sqreen/rules/crawler_user_agent_matches_cb.rb +2 -0
- data/lib/sqreen/rules/crawler_user_agent_matches_metrics_cb.rb +2 -0
- data/lib/sqreen/rules/custom_error_cb.rb +2 -0
- data/lib/sqreen/rules/devise_auth_track_cb.rb +2 -0
- data/lib/sqreen/rules/devise_signup_track_cb.rb +2 -0
- data/lib/sqreen/rules/execjs_cb.rb +2 -0
- data/lib/sqreen/rules/headers_insert_cb.rb +7 -0
- data/lib/sqreen/rules/matcher_rule.rb +2 -0
- data/lib/sqreen/rules/not_found_cb.rb +5 -0
- data/lib/sqreen/rules/rails_parameters_cb.rb +2 -0
- data/lib/sqreen/rules/record_request_context.rb +2 -0
- data/lib/sqreen/rules/regexp_rule_cb.rb +2 -0
- data/lib/sqreen/rules/rule_cb.rb +2 -0
- data/lib/sqreen/rules/run_req_start_actions.rb +3 -1
- data/lib/sqreen/rules/run_user_actions.rb +3 -1
- data/lib/sqreen/rules/shell_env_cb.rb +2 -0
- data/lib/sqreen/rules/signup_track_cb.rb +2 -0
- data/lib/sqreen/rules/update_request_context.rb +2 -0
- data/lib/sqreen/rules/url_matches_cb.rb +2 -0
- data/lib/sqreen/rules/user_agent_matches_cb.rb +2 -0
- data/lib/sqreen/rules/waf_cb.rb +31 -7
- data/lib/sqreen/rules/xss_cb.rb +2 -0
- data/lib/sqreen/run_when_called_cb.rb +2 -0
- data/lib/sqreen/runner.rb +25 -7
- data/lib/sqreen/runtime_infos.rb +2 -0
- data/lib/sqreen/safe_json.rb +2 -0
- data/lib/sqreen/sdk.rb +4 -0
- data/lib/sqreen/sensitive_data_redactor.rb +2 -0
- data/lib/sqreen/serializer.rb +2 -0
- data/lib/sqreen/session.rb +2 -0
- data/lib/sqreen/shared_storage.rb +2 -0
- data/lib/sqreen/shared_storage23.rb +2 -0
- data/lib/sqreen/shrink_wrap.rb +16 -0
- data/lib/sqreen/signature_verifier.rb +2 -0
- data/lib/sqreen/sinatra_middleware.rb +2 -0
- data/lib/sqreen/sqreen_signed_verifier.rb +2 -0
- data/lib/sqreen/token_invalid_exception.rb +2 -0
- data/lib/sqreen/token_not_found_exception.rb +2 -0
- data/lib/sqreen/trie.rb +2 -0
- data/lib/sqreen/unauthorized.rb +2 -0
- data/lib/sqreen/util.rb +5 -0
- data/lib/sqreen/util/capped_array.rb +2 -0
- data/lib/sqreen/util/capped_hash.rb +2 -0
- data/lib/sqreen/util/capped_string.rb +2 -0
- data/lib/sqreen/util/capper.rb +2 -0
- data/lib/sqreen/version.rb +3 -1
- data/lib/sqreen/waf_error.rb +2 -0
- data/lib/sqreen/weave.rb +12 -0
- data/lib/sqreen/weave/hardcoded.rb +19 -0
- data/lib/sqreen/weave/instrumentor.rb +48 -0
- data/lib/sqreen/weave/legacy.rb +12 -0
- data/lib/sqreen/weave/legacy/instrumentation.rb +406 -0
- data/lib/sqreen/web_server.rb +2 -0
- data/lib/sqreen/web_server/generic.rb +2 -0
- data/lib/sqreen/web_server/passenger.rb +2 -0
- data/lib/sqreen/web_server/puma.rb +2 -0
- data/lib/sqreen/web_server/rainbows.rb +2 -0
- data/lib/sqreen/web_server/thin.rb +2 -0
- data/lib/sqreen/web_server/unicorn.rb +2 -0
- data/lib/sqreen/web_server/webrick.rb +2 -0
- data/lib/sqreen/worker.rb +2 -0
- metadata +26 -7
- data/lib/sqreen/dependency/hook.rb +0 -102
data/lib/sqreen/rules/waf_cb.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# typed: ignore
|
|
2
|
+
|
|
1
3
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
2
4
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
3
5
|
|
|
@@ -9,11 +11,15 @@ require 'sqreen/safe_json'
|
|
|
9
11
|
require 'sqreen/exception'
|
|
10
12
|
require 'sqreen/util/capper'
|
|
11
13
|
require 'sqreen/dependency/libsqreen'
|
|
14
|
+
require 'sqreen/encoding_sanitizer'
|
|
12
15
|
|
|
13
16
|
module Sqreen
|
|
14
17
|
module Rules
|
|
15
18
|
class WAFCB < RuleCB
|
|
16
|
-
|
|
19
|
+
# 2^30 -1 or 2^62 -1
|
|
20
|
+
MAX_FIXNUM = 1.size == 4 ? 1_073_741_823 : 4_611_686_018_427_387_903
|
|
21
|
+
# will be converted to a long, so better not to overflow
|
|
22
|
+
INFINITE_BUDGET_US = MAX_FIXNUM
|
|
17
23
|
|
|
18
24
|
def self.libsqreen?
|
|
19
25
|
Sqreen::Dependency::LibSqreen.required?
|
|
@@ -23,7 +29,7 @@ module Sqreen
|
|
|
23
29
|
Sqreen::Dependency.const_exist?('LibSqreen::WAF')
|
|
24
30
|
end
|
|
25
31
|
|
|
26
|
-
attr_reader :binding_accessors, :
|
|
32
|
+
attr_reader :binding_accessors, :max_run_budget_us, :waf_rule_name
|
|
27
33
|
|
|
28
34
|
def initialize(*args)
|
|
29
35
|
super(*args)
|
|
@@ -52,12 +58,17 @@ module Sqreen
|
|
|
52
58
|
@binding_accessors = @data['values'].fetch('binding_accessors', []).each_with_object({}) do |e, h|
|
|
53
59
|
h[e] = BindingAccessor.new(e)
|
|
54
60
|
end
|
|
55
|
-
|
|
61
|
+
|
|
62
|
+
# 0 for using defaults (PW_RUN_TIMEOUT)
|
|
63
|
+
@max_run_budget_us = (@data['values'].fetch('budget_in_ms', 0) * 1000).to_i
|
|
64
|
+
@max_run_budget_us = INFINITE_BUDGET_US if @max_run_budget_us >= INFINITE_BUDGET_US
|
|
65
|
+
|
|
66
|
+
Sqreen.log.debug { "Max WAF run budget for #{@waf_rule_name} set to #{@max_run_budget_us} us" }
|
|
56
67
|
|
|
57
68
|
ObjectSpace.define_finalizer(self, WAFCB.finalizer(@waf_rule_name.dup))
|
|
58
69
|
end
|
|
59
70
|
|
|
60
|
-
def pre(instance, args,
|
|
71
|
+
def pre(instance, args, budget)
|
|
61
72
|
return unless WAFCB.libsqreen? && WAFCB.waf?
|
|
62
73
|
|
|
63
74
|
request = framework.request
|
|
@@ -65,12 +76,25 @@ module Sqreen
|
|
|
65
76
|
|
|
66
77
|
env = [binding, framework, instance, args]
|
|
67
78
|
|
|
79
|
+
start = Sqreen.time if budget
|
|
80
|
+
|
|
68
81
|
capper = Sqreen::Util::Capper.new(string_size_cap: 4096, size_cap: 150, depth_cap: 10)
|
|
69
82
|
waf_args = binding_accessors.each_with_object({}) do |(e, b), h|
|
|
70
83
|
h[e] = capper.call(b.resolve(*env))
|
|
71
84
|
end
|
|
72
85
|
waf_args = Sqreen::EncodingSanitizer.sanitize(waf_args)
|
|
73
|
-
|
|
86
|
+
|
|
87
|
+
if budget
|
|
88
|
+
rem_budget_s = budget - (Sqreen.time - start)
|
|
89
|
+
return advise_action(nil) if rem_budget_s <= 0.0
|
|
90
|
+
|
|
91
|
+
waf_gen_budget_us = [(rem_budget_s * 1_000_000).to_i, MAX_FIXNUM].min
|
|
92
|
+
else # no budget
|
|
93
|
+
waf_gen_budget_us = INFINITE_BUDGET_US
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
action, data = ::LibSqreen::WAF.run(waf_rule_name, waf_args,
|
|
97
|
+
waf_gen_budget_us, @max_run_budget_us)
|
|
74
98
|
|
|
75
99
|
case action
|
|
76
100
|
when :monitor
|
|
@@ -102,13 +126,13 @@ module Sqreen
|
|
|
102
126
|
lambda do |object_id|
|
|
103
127
|
return unless WAFCB.libsqreen?
|
|
104
128
|
|
|
105
|
-
::LibSqreen::WAF.delete(waf_rule_name
|
|
129
|
+
::LibSqreen::WAF.delete(waf_rule_name)
|
|
106
130
|
Sqreen.log.debug("WAF rule #{rule_name} deleted, from #<#{name}:0x#{object_id.to_s(16).rjust(16, '0')}>")
|
|
107
131
|
end
|
|
108
132
|
end
|
|
109
133
|
|
|
110
134
|
def record_exception(exception, infos = {}, at = Time.now.utc)
|
|
111
|
-
infos.merge!(exception_to_infos(exception))
|
|
135
|
+
infos.merge!(exception_to_infos(exception)) if exception.is_a?(Sqreen::WAFError)
|
|
112
136
|
super(exception, infos, at)
|
|
113
137
|
end
|
|
114
138
|
|
data/lib/sqreen/rules/xss_cb.rb
CHANGED
data/lib/sqreen/runner.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# typed: ignore
|
|
2
|
+
|
|
1
3
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
2
4
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
3
5
|
|
|
@@ -18,8 +20,9 @@ require 'sqreen/deliveries/simple'
|
|
|
18
20
|
require 'sqreen/deliveries/batch'
|
|
19
21
|
require 'sqreen/performance_notifications/metrics'
|
|
20
22
|
require 'sqreen/performance_notifications/binned_metrics'
|
|
21
|
-
require 'sqreen/instrumentation'
|
|
23
|
+
require 'sqreen/legacy/instrumentation'
|
|
22
24
|
require 'sqreen/call_countable'
|
|
25
|
+
require 'sqreen/weave/legacy/instrumentation'
|
|
23
26
|
|
|
24
27
|
module Sqreen
|
|
25
28
|
@features = {}
|
|
@@ -117,7 +120,16 @@ module Sqreen
|
|
|
117
120
|
register_exit_cb if set_at_exit
|
|
118
121
|
|
|
119
122
|
self.metrics_engine = MetricsStore.new
|
|
120
|
-
|
|
123
|
+
|
|
124
|
+
needs_weave = proc do
|
|
125
|
+
Gem::Specification.select { |s| s.name == 'scout_apm' && Gem::Requirement.new('>= 2.5.2').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
if @configuration.get(:weave) || needs_weave.call
|
|
129
|
+
@instrumenter = Sqreen::Weave::Legacy::Instrumentation.new(metrics_engine)
|
|
130
|
+
else
|
|
131
|
+
@instrumenter = Sqreen::Legacy::Instrumentation.new(metrics_engine)
|
|
132
|
+
end
|
|
121
133
|
|
|
122
134
|
Sqreen.log.debug "Using token #{@token}"
|
|
123
135
|
response = create_session(session_class)
|
|
@@ -235,7 +247,7 @@ module Sqreen
|
|
|
235
247
|
def remove_instrumentation(_context_infos = {})
|
|
236
248
|
Sqreen.log.debug 'Removing instrumentation'
|
|
237
249
|
instrumenter.remove_all_callbacks
|
|
238
|
-
Sqreen::Actions::Repository.
|
|
250
|
+
Sqreen::Actions::Repository.clear
|
|
239
251
|
Sqreen.log.debug 'Instrumentation removed'
|
|
240
252
|
true
|
|
241
253
|
end
|
|
@@ -244,7 +256,6 @@ module Sqreen
|
|
|
244
256
|
Sqreen.log.debug 'Reloading rules'
|
|
245
257
|
rulespack_id, rules = load_rules
|
|
246
258
|
instrumenter.remove_all_callbacks
|
|
247
|
-
Sqreen::Actions::Repository.instance.clear
|
|
248
259
|
|
|
249
260
|
@framework.instrument_when_ready!(instrumenter, rules)
|
|
250
261
|
Sqreen.log.debug 'Rules reloaded'
|
|
@@ -304,12 +315,18 @@ module Sqreen
|
|
|
304
315
|
Sqreen.update_features(features)
|
|
305
316
|
session.request_compression = features['request_compression'] if session
|
|
306
317
|
self.performance_metrics_period = features['performance_metrics_period']
|
|
318
|
+
|
|
319
|
+
unless @configuration.get(:weave)
|
|
320
|
+
|
|
307
321
|
config_binned_metrics(features['perf_level'] || DEFAULT_PERF_LEVEL,
|
|
308
322
|
features['perf_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_BASE,
|
|
309
323
|
features['perf_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_UNIT,
|
|
310
324
|
features['perf_pct_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_PCT_BASE,
|
|
311
325
|
features['perf_pct_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_PCT_UNIT,
|
|
312
326
|
)
|
|
327
|
+
|
|
328
|
+
end
|
|
329
|
+
|
|
313
330
|
self.call_counts_metrics_period = features['call_counts_metrics_period']
|
|
314
331
|
hd = features['heartbeat_delay'].to_i
|
|
315
332
|
self.heartbeat_delay = hd if hd > 0
|
|
@@ -456,13 +473,12 @@ module Sqreen
|
|
|
456
473
|
def load_actions(hashes)
|
|
457
474
|
unsupported = Set.new
|
|
458
475
|
|
|
459
|
-
|
|
460
|
-
repos.clear
|
|
476
|
+
new_repos = Sqreen::Actions::Repository.new
|
|
461
477
|
|
|
462
478
|
actions = hashes.map do |h|
|
|
463
479
|
begin
|
|
464
480
|
act = Sqreen::Actions.deserialize_action(h)
|
|
465
|
-
|
|
481
|
+
new_repos.add h['parameters'], act
|
|
466
482
|
act
|
|
467
483
|
rescue Sqreen::Actions::UnknownActionType => e
|
|
468
484
|
Sqreen.log.warn("Unsupported action type: #{e.action_type}")
|
|
@@ -476,6 +492,8 @@ module Sqreen
|
|
|
476
492
|
actions = actions.reject(&:nil?)
|
|
477
493
|
Sqreen.log.debug("Added #{actions.size} valid actions")
|
|
478
494
|
|
|
495
|
+
Sqreen::Actions::Repository.current = new_repos
|
|
496
|
+
|
|
479
497
|
unsupported
|
|
480
498
|
end
|
|
481
499
|
end
|
data/lib/sqreen/runtime_infos.rb
CHANGED
data/lib/sqreen/safe_json.rb
CHANGED
data/lib/sqreen/sdk.rb
CHANGED
data/lib/sqreen/serializer.rb
CHANGED
data/lib/sqreen/session.rb
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
module Sqreen
|
|
7
|
+
class ShrinkWrap
|
|
8
|
+
def initialize(app)
|
|
9
|
+
@app = app
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
@app.call(env)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/lib/sqreen/trie.rb
CHANGED
data/lib/sqreen/unauthorized.rb
CHANGED
data/lib/sqreen/util.rb
CHANGED
data/lib/sqreen/util/capper.rb
CHANGED
data/lib/sqreen/version.rb
CHANGED
data/lib/sqreen/waf_error.rb
CHANGED
data/lib/sqreen/weave.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/log/loggable'
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
module Weave
|
|
10
|
+
include Sqreen::Log::Loggable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/weave'
|
|
7
|
+
|
|
8
|
+
class Sqreen::Weave::Hardcoded
|
|
9
|
+
# [
|
|
10
|
+
# ### callback for performing sec responses based on ip
|
|
11
|
+
# ### init redefined to implement smartass way to hook it upon the
|
|
12
|
+
# ### framework's middleware #call
|
|
13
|
+
# Sqreen::Rules::RunReqStartActions.new(framework),
|
|
14
|
+
# ### callback for performing sec responses based on user
|
|
15
|
+
# Sqreen::Rules::RunUserActions.new(Sqreen, :identify, 0),
|
|
16
|
+
# ### callback for performing sec responses based on user
|
|
17
|
+
# Sqreen::Rules::RunUserActions.new(Sqreen, :auth_track, 1),
|
|
18
|
+
# ]
|
|
19
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/weave'
|
|
7
|
+
|
|
8
|
+
# rule loader: decouple from runner
|
|
9
|
+
# remote rules from back
|
|
10
|
+
# local rules from local files
|
|
11
|
+
# => rule list (what is a rule?)
|
|
12
|
+
# => to callback (what is a callback?)
|
|
13
|
+
# => to instrumentation (== attach callbacks to their targets using graft)
|
|
14
|
+
|
|
15
|
+
# make shit like instrument framework independent (block passing?)
|
|
16
|
+
# => too much things assume only one framework
|
|
17
|
+
# possible to do run req actions without hardcoded cbs?
|
|
18
|
+
# (data comes from actions command, native cb merely binds to middleware)
|
|
19
|
+
# can cb be a form of abstraction?
|
|
20
|
+
|
|
21
|
+
# rule sig: decouple/split
|
|
22
|
+
# - data signer/checker
|
|
23
|
+
# apply this to rule data
|
|
24
|
+
|
|
25
|
+
# whitelist is mixed in
|
|
26
|
+
|
|
27
|
+
# metrics
|
|
28
|
+
# three dedicated metrics: abstract and isolate
|
|
29
|
+
|
|
30
|
+
class Sqreen::Weave::Instrumentor
|
|
31
|
+
def initialize(metrics_engine)
|
|
32
|
+
### bail out if no metric engine
|
|
33
|
+
### init metric to count calls to sqreen
|
|
34
|
+
### init metric to count request whitelist matches (ip or path whitelist)
|
|
35
|
+
### init metric to count over budget hits
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def instrument!(rules, framework)
|
|
39
|
+
### set up rule signature verifier
|
|
40
|
+
### force clean instrumentation callback list
|
|
41
|
+
### for each rule description, transform into format for adding callback
|
|
42
|
+
### attach framework to callback
|
|
43
|
+
### install callback, observing priority
|
|
44
|
+
### for each hardcoded callback
|
|
45
|
+
### install hardcoded callbacks, observing priority
|
|
46
|
+
### globally declare instrumentation ready
|
|
47
|
+
end
|
|
48
|
+
end
|