Module: Sqreen
- Defined in:
- lib/sqreen/js.rb,
lib/sqreen/cb.rb,
lib/sqreen/log.rb,
lib/sqreen/sdk.rb,
lib/sqreen/node.rb,
lib/sqreen/trie.rb,
lib/sqreen/util.rb,
lib/sqreen/agent.rb,
lib/sqreen/event.rb,
lib/sqreen/graft.rb,
lib/sqreen/rules.rb,
lib/sqreen/weave.rb,
lib/sqreen/legacy.rb,
lib/sqreen/logger.rb,
lib/sqreen/prefix.rb,
lib/sqreen/runner.rb,
lib/sqreen/worker.rb,
lib/sqreen/actions.rb,
lib/sqreen/cb_tree.rb,
lib/sqreen/context.rb,
lib/sqreen/session.rb,
lib/sqreen/version.rb,
lib/sqreen/ecosystem.rb,
lib/sqreen/exception.rb,
lib/sqreen/mono_time.rb,
lib/sqreen/safe_json.rb,
lib/sqreen/waf_error.rb,
lib/sqreen/default_cb.rb,
lib/sqreen/deliveries.rb,
lib/sqreen/dependency.rb,
lib/sqreen/frameworks.rb,
lib/sqreen/graft/call.rb,
lib/sqreen/graft/hook.rb,
lib/sqreen/middleware.rb,
lib/sqreen/serializer.rb,
lib/sqreen/web_server.rb,
lib/sqreen/deprecation.rb,
lib/sqreen/metrics/sum.rb,
lib/sqreen/null_logger.rb,
lib/sqreen/rules/attrs.rb,
lib/sqreen/shrink_wrap.rb,
lib/sqreen/actions/base.rb,
lib/sqreen/capped_queue.rb,
lib/sqreen/framework_cb.rb,
lib/sqreen/log/loggable.rb,
lib/sqreen/metrics/base.rb,
lib/sqreen/rules/waf_cb.rb,
lib/sqreen/rules/xss_cb.rb,
lib/sqreen/unauthorized.rb,
lib/sqreen/weave/legacy.rb,
lib/sqreen/agent_message.rb,
lib/sqreen/conditionable.rb,
lib/sqreen/configuration.rb,
lib/sqreen/events/attack.rb,
lib/sqreen/js/js_service.rb,
lib/sqreen/metrics_store.rb,
lib/sqreen/rules/rule_cb.rb,
lib/sqreen/runtime_infos.rb,
lib/sqreen/attack_blocked.rb,
lib/sqreen/call_countable.rb,
lib/sqreen/graft/callback.rb,
lib/sqreen/remote_command.rb,
lib/sqreen/shared_storage.rb,
lib/sqreen/deferred_logger.rb,
lib/sqreen/dependency/rack.rb,
lib/sqreen/js/call_context.rb,
lib/sqreen/js/context_pool.rb,
lib/sqreen/metrics/average.rb,
lib/sqreen/metrics/binning.rb,
lib/sqreen/metrics/collect.rb,
lib/sqreen/payload_creator.rb,
lib/sqreen/rules/execjs_cb.rb,
lib/sqreen/web_server/puma.rb,
lib/sqreen/web_server/thin.rb,
lib/sqreen/actions/block_ip.rb,
lib/sqreen/binding_accessor.rb,
lib/sqreen/deliveries/batch.rb,
lib/sqreen/dependency/rails.rb,
lib/sqreen/endpoint_testing.rb,
lib/sqreen/frameworks/rails.rb,
lib/sqreen/graft/hook_point.rb,
lib/sqreen/js/executable_js.rb,
lib/sqreen/rails_middleware.rb,
lib/sqreen/shared_storage23.rb,
lib/sqreen/aggregated_metric.rb,
lib/sqreen/deliveries/simple.rb,
lib/sqreen/dependency/sentry.rb,
lib/sqreen/frameworks/rails3.rb,
lib/sqreen/graft/hook.ruby_2.rb,
lib/sqreen/graft/hook.ruby_3.rb,
lib/sqreen/js/execjs_adapter.rb,
lib/sqreen/actions/block_user.rb,
lib/sqreen/actions/repository.rb,
lib/sqreen/dependency/sinatra.rb,
lib/sqreen/ecosystem/loggable.rb,
lib/sqreen/formatter_with_tid.rb,
lib/sqreen/frameworks/generic.rb,
lib/sqreen/frameworks/sinatra.rb,
lib/sqreen/rules/matcher_rule.rb,
lib/sqreen/rules/not_found_cb.rb,
lib/sqreen/rules/shell_env_cb.rb,
lib/sqreen/run_when_called_cb.rb,
lib/sqreen/signature_verifier.rb,
lib/sqreen/sinatra_middleware.rb,
lib/sqreen/web_server/generic.rb,
lib/sqreen/web_server/unicorn.rb,
lib/sqreen/web_server/webrick.rb,
lib/sqreen/actions/redirect_ip.rb,
lib/sqreen/actions/users_index.rb,
lib/sqreen/condition_evaluator.rb,
lib/sqreen/dependency/detector.rb,
lib/sqreen/js/exec_js_runnable.rb,
lib/sqreen/not_implemented_yet.rb,
lib/sqreen/rules/auth_track_cb.rb,
lib/sqreen/signals/conversions.rb,
lib/sqreen/web_server/rainbows.rb,
lib/sqreen/dependency/libsqreen.rb,
lib/sqreen/dependency/new_relic.rb,
lib/sqreen/ecosystem/module_api.rb,
lib/sqreen/rules/regexp_rule_cb.rb,
lib/sqreen/rules/url_matches_cb.rb,
lib/sqreen/web_server/passenger.rb,
lib/sqreen/actions/actions_index.rb,
lib/sqreen/actions/redirect_user.rb,
lib/sqreen/ecosystem_integration.rb,
lib/sqreen/events/request_record.rb,
lib/sqreen/js/js_service_adapter.rb,
lib/sqreen/js/mini_racer_adapter.rb,
lib/sqreen/legacy/waf_redactions.rb,
lib/sqreen/rules/custom_error_cb.rb,
lib/sqreen/rules/signup_track_cb.rb,
lib/sqreen/frameworks/sqreen_test.rb,
lib/sqreen/graft/hook_point_error.rb,
lib/sqreen/legacy/instrumentation.rb,
lib/sqreen/rules/blacklist_ips_cb.rb,
lib/sqreen/rules/count_http_codes.rb,
lib/sqreen/rules/run_user_actions.rb,
lib/sqreen/sqreen_signed_verifier.rb,
lib/sqreen/actions/ip_ranges_index.rb,
lib/sqreen/ecosystem/http/net_http.rb,
lib/sqreen/ecosystem/messaging/sqs.rb,
lib/sqreen/events/remote_exception.rb,
lib/sqreen/graft/hook_point.ruby_2.rb,
lib/sqreen/graft/hook_point.ruby_3.rb,
lib/sqreen/rules/headers_insert_cb.rb,
lib/sqreen/sensitive_data_redactor.rb,
lib/sqreen/token_invalid_exception.rb,
lib/sqreen/ecosystem/dispatch_table.rb,
lib/sqreen/ecosystem/tracing_broker.rb,
lib/sqreen/actions/user_action_class.rb,
lib/sqreen/ecosystem/databases/mongo.rb,
lib/sqreen/ecosystem/databases/mysql.rb,
lib/sqreen/ecosystem/databases/redis.rb,
lib/sqreen/ecosystem/messaging/bunny.rb,
lib/sqreen/ecosystem/messaging/kafka.rb,
lib/sqreen/ecosystem/module_registry.rb,
lib/sqreen/ecosystem/tracing/sampler.rb,
lib/sqreen/error_handling_middleware.rb,
lib/sqreen/performance_notifications.rb,
lib/sqreen/rules/rails_parameters_cb.rb,
lib/sqreen/token_not_found_exception.rb,
lib/sqreen/binding_accessor/path_elem.rb,
lib/sqreen/ecosystem/tracing_id_setup.rb,
lib/sqreen/rules/devise_auth_track_cb.rb,
lib/sqreen/actions/unknown_action_type.rb,
lib/sqreen/binding_accessor/transforms.rb,
lib/sqreen/ecosystem/http/rack_request.rb,
lib/sqreen/ecosystem/messaging/kinesis.rb,
lib/sqreen/frameworks/request_recorder.rb,
lib/sqreen/invalid_signature_exception.rb,
lib/sqreen/js/mini_racer_executable_js.rb,
lib/sqreen/rules/run_req_start_actions.rb,
lib/sqreen/rules/user_agent_matches_cb.rb,
lib/sqreen/ecosystem/databases/postgres.rb,
lib/sqreen/ecosystem/module_api/tracing.rb,
lib/sqreen/metrics_store/unknown_metric.rb,
lib/sqreen/rules/devise_signup_track_cb.rb,
lib/sqreen/rules/record_request_context.rb,
lib/sqreen/rules/update_request_context.rb,
lib/sqreen/signals/http_trace_redaction.rb,
lib/sqreen/ecosystem/exception_reporting.rb,
lib/sqreen/ecosystem/transaction_storage.rb,
lib/sqreen/performance_notifications/log.rb,
lib/sqreen/remote_command/failure_output.rb,
lib/sqreen/kit/signals/specialized/attack.rb,
lib/sqreen/payload_creator/header_section.rb,
lib/sqreen/rules/binding_accessor_metrics.rb,
lib/sqreen/ecosystem/tracing/modules/client.rb,
lib/sqreen/ecosystem/tracing/modules/server.rb,
lib/sqreen/js/thread_local_exec_js_runnable.rb,
lib/sqreen/metrics_store/unregistered_metric.rb,
lib/sqreen/performance_notifications/metrics.rb,
lib/sqreen/rules/binding_accessor_matcher_cb.rb,
lib/sqreen/ecosystem/tracing/modules/consumer.rb,
lib/sqreen/ecosystem/tracing/modules/producer.rb,
lib/sqreen/kit/signals/specialized/http_trace.rb,
lib/sqreen/performance_notifications/newrelic.rb,
lib/sqreen/ecosystem/module_api/event_listener.rb,
lib/sqreen/rules/crawler_user_agent_matches_cb.rb,
lib/sqreen/signals/signals_submission_strategy.rb,
lib/sqreen/ecosystem/module_api/instrumentation.rb,
lib/sqreen/ecosystem/module_api/signal_producer.rb,
lib/sqreen/legacy/old_event_submission_strategy.rb,
lib/sqreen/actions/ip_range_indexed_action_class.rb,
lib/sqreen/ecosystem/module_api/message_producer.rb,
lib/sqreen/ecosystem/util/call_writers_from_init.rb,
lib/sqreen/ecosystem/tracing/modules/determine_ip.rb,
lib/sqreen/ecosystem_integration/around_callbacks.rb,
lib/sqreen/kit/signals/specialized/binning_metric.rb,
lib/sqreen/kit/signals/specialized/sdk_track_call.rb,
lib/sqreen/metrics_store/already_registered_metric.rb,
lib/sqreen/ecosystem/module_api/tracing/client_data.rb,
lib/sqreen/ecosystem/module_api/tracing/server_data.rb,
lib/sqreen/ecosystem/module_api/transaction_storage.rb,
lib/sqreen/ecosystem/tracing/sampling_configuration.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_client.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_server.rb,
lib/sqreen/ecosystem_integration/signal_consumption.rb,
lib/sqreen/kit/signals/specialized/sqreen_exception.rb,
lib/sqreen/performance_notifications/binned_metrics.rb,
lib/sqreen/kit/signals/specialized/aggregated_metric.rb,
lib/sqreen/performance_notifications/log_performance.rb,
lib/sqreen/ecosystem/module_api/tracing/consumer_data.rb,
lib/sqreen/ecosystem/module_api/tracing/producer_data.rb,
lib/sqreen/ecosystem/module_api/tracing_id_generation.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_consumer.rb,
lib/sqreen/ecosystem/tracing/signals/tracing_producer.rb,
lib/sqreen/ecosystem/module_api/tracing/messaging_data.rb,
lib/sqreen/rules/crawler_user_agent_matches_metrics_cb.rb,
lib/sqreen/ecosystem/databases/database_connection_data.rb,
lib/sqreen/ecosystem_integration/instrumentation_service.rb,
lib/sqreen/ecosystem_integration/request_lifecycle_tracking.rb
Overview
Defined Under Namespace
Modules: Actions, Agent, CallCountable, Conditionable, Deliveries, Dependency, Deprecation, Ecosystem, Frameworks, Graft, Js, Kit, Legacy, Log, Metric, PerformanceNotifications, RequestRecorder, Rules, RuntimeInfos, Serializer, SharedStorage, Signals, Util, Weave, WebServer, Worker
Classes: AgentMessage, AggregatedMetric, Attack, AttackBlocked, BindingAccessor, CB, CBTree, CappedQueue, ConditionEvaluator, Configuration, Context, DefaultCB, DeferredLogger, EcosystemIntegration, EndpointTesting, ErrorHandlingMiddleware, Event, Exception, FormatterWithTid, FrameworkCB, InvalidSignatureException, Logger, MetricsStore, Middleware, Node, NotImplementedYet, NullLogger, PayloadCreator, Prefix, RailsMiddleware, RemoteCommand, RemoteException, RequestRecord, RunWhenCalledCB, Runner, SafeJSON, SensitiveDataRedactor, Session, ShrinkWrap, SignatureVerifier, SinatraMiddleware, SqreenSignedVerifier, TokenInvalidException, TokenNotFoundException, Trie, Unauthorized, WAFError
Constant Summary
collapse
- SDK_RESERVED_PREFIX =
'sq.'.freeze
- TRACK_PAYLOAD_DATA =
['request'.freeze, 'params'.freeze, 'headers'.freeze].freeze
- MAX_QUEUE_LENGTH =
Event Queue that enable communication between threads and the reporter
100
- MAX_OBS_QUEUE_LENGTH =
1000
- METRICS_EVENT =
'metrics'.freeze
- PERF_METRICS_PERIOD =
60
- DEFAULT_PERF_LEVEL =
0
- DEFAULT_USE_SIGNALS =
false
- VERSION =
'1.25.1'.freeze
- CONFIG_FILE_BY_ENV =
'SQREEN_CONFIG_FILE'.freeze
- CONFIG_DESCRIPTION =
{ :env => :SQREEN_DISABLE, :name => :disable,
:default => false, :convert => :to_bool },
{ :env => :SQREEN_LIBSQREEN, :name => :libsqreen,
:default => true, :convert => :to_bool },
{ :env => :SQREEN_WEAVE, :name => :weave,
:default => true, :convert => :to_bool },
{ :env => :SQREEN_WEAVE_STRATEGY, :name => :weave_strategy,
:default => :prepend, :convert => :to_sym },
{ :env => :SQREEN_URL, :name => :url,
:default => nil },
{ :env => :SQREEN_INGESTION_URL, :name => :ingestion_url,
:default => nil },
{ :env => :SQREEN_PROXY_URL, :name => :proxy_url,
:default => nil },
{ :env => :SQREEN_TOKEN, :name => :token,
:default => nil },
{ :env => :SQREEN_APP_NAME, :name => :app_name,
:default => nil },
{ :env => :SQREEN_RULES, :name => :local_rules,
:default => nil },
{ :env => :SQREEN_RULES_SIGNATURE, :name => :rules_verify_signature,
:default => true },
{ :env => :SQREEN_RULES_DUMP, :name => :rules_dump,
:default => false },
{ :env => :SQREEN_LOG_LEVEL, :name => :log_level,
:default => 'INFO', :choice => %w[UNKNOWN FATAL ERROR WARN INFO DEBUG] },
{ :env => :SQREEN_LOG_LOCATION, :name => :log_location,
:default => 'log/sqreen.log' },
{ :env => :SQREEN_RUN_IN_TEST, :name => :run_in_test,
:default => false, :convert => :to_bool },
{ :env => :SQREEN_BLOCK_ALL_RULES, :name => :block_all_rules,
:default => nil },
{ :env => :SQREEN_REPORT_PERF_NR, :name => :report_perf_newrelic,
:default => 0, :convert => :to_int },
{ :env => :SQREEN_REPORT_PERF, :name => :report_perf,
:default => false, :convert => :to_bool },
{ :env => :SQREEN_INITIAL_FEATURES, :name => :initial_features,
:default => nil },
{ :env => :SQREEN_IP_HEADER, :name => :ip_header,
:default => nil },
{ :env => :SQREEN_STRIP_SENSITIVE_DATA, :name => :strip_sensitive_data,
:default => true, :convert => :to_bool },
{ :env => :SQREEN_STRIP_SENSITIVE_KEYS, :name => :strip_sensitive_keys,
:default => nil },
{ :env => :SQREEN_STRIP_SENSITIVE_REGEX, :name => :strip_sensitive_regex,
:default => nil },
{ :env => :SQREEN_NO_SNIFF_DOMAINS, :name => :no_sniff_domains,
:default => false },
].freeze
- CONFIG_FILE_NAME =
'sqreen.yml'.freeze
- @@framework =
nil
Class Attribute Summary collapse
Class Method Summary
collapse
Class Attribute Details
.features ⇒ Object
Returns the value of attribute features.
49
50
51
|
# File 'lib/sqreen/runner.rb', line 49
def features
@features
end
|
.instrumentation_ready ⇒ Object
Also known as:
instrumentation_ready?
Returns the value of attribute instrumentation_ready.
62
63
64
|
# File 'lib/sqreen/runner.rb', line 62
def instrumentation_ready
@instrumentation_ready
end
|
.logged_in ⇒ Object
Also known as:
logged_in?
Returns the value of attribute logged_in.
65
66
67
|
# File 'lib/sqreen/runner.rb', line 65
def logged_in
@logged_in
end
|
Returns the value of attribute performance_budget.
78
79
80
|
# File 'lib/sqreen/runner.rb', line 78
def performance_budget
@performance_budget
end
|
.whitelisted_ips ⇒ Object
Returns the value of attribute whitelisted_ips.
73
74
75
|
# File 'lib/sqreen/runner.rb', line 73
def whitelisted_ips
@whitelisted_ips
end
|
.whitelisted_paths ⇒ Object
Returns the value of attribute whitelisted_paths.
68
69
70
|
# File 'lib/sqreen/runner.rb', line 68
def whitelisted_paths
@whitelisted_paths
end
|
Class Method Details
.auth_track(is_logged_in, authentication_keys) ⇒ Object
Authentication tracking method
17
|
# File 'lib/sqreen/sdk.rb', line 17
def auth_track(is_logged_in, authentication_keys); end
|
.config_get(name) ⇒ Object
25
26
27
28
|
# File 'lib/sqreen/configuration.rb', line 25
def self.config_get(name)
raise 'No configuration defined' if @config.nil?
@config.get(name)
end
|
.config_init(framework = nil) ⇒ Object
16
17
18
19
20
21
22
23
|
# File 'lib/sqreen/configuration.rb', line 16
def self.config_init(framework = nil)
@config = Configuration.new(framework)
@config.load!
if @config && config_get(:report_perf_newrelic) > 0
Sqreen::PerformanceNotifications::NewRelic.enable(config_get(:report_perf_newrelic))
end
@config
end
|
30
31
32
|
# File 'lib/sqreen/configuration.rb', line 30
def self.configured?
!@config.nil?
end
|
.escape_haml(x) ⇒ Object
Escape HAML when instrumented to do it
292
293
294
|
# File 'lib/sqreen/rules/xss_cb.rb', line 292
def self.escape_haml(x)
x
end
|
.escape_temple(x) ⇒ Object
Escape Temple when instrumented to do it
297
298
299
|
# File 'lib/sqreen/rules/xss_cb.rb', line 297
def self.escape_temple(x)
x
end
|
.identify(authentication_keys, traits = {}) ⇒ Object
21
22
23
24
25
26
27
28
|
# File 'lib/sqreen/sdk.rb', line 21
def identify(authentication_keys, traits = {})
return unless Sqreen.framework
Sqreen.framework.observe(
:sdk,
[:identify, Time.now, authentication_keys, traits],
[], false
)
end
|
.internal_track(event_name, options = {}) ⇒ Object
For internal usage. Users are to call track() instead.
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/sqreen/sdk.rb', line 47
def internal_track(event_name, options = {})
properties = options[:properties]
user_identifiers = options[:user_identifiers]
timestamp = options[:timestamp] || Time.now.utc
args = {}
args[:user_identifiers] = user_identifiers if user_identifiers
args[:properties] = properties if properties
Sqreen.framework.observe(
:sdk,
[:track, timestamp, event_name, :args => args],
TRACK_PAYLOAD_DATA, true
)
true
end
|
.log_init ⇒ Object
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/sqreen/log.rb', line 16
def self.log_init
deferred_logger = @logger
@logger = Sqreen::Logger.new(
Sqreen.config_get(:log_level).to_s.upcase,
Sqreen.config_get(:log_location)
)
deferred_logger.flush_to(@logger.instance_eval { @logger })
rescue => e
warn "Sqreen logger exception: #{e}"
end
|
.observations_queue ⇒ Object
.set_framework(fwk) ⇒ Object
16
17
18
|
# File 'lib/sqreen/frameworks.rb', line 16
def self::set_framework(fwk)
@@framework = fwk
end
|
.signup_track(authentication_keys) ⇒ Object
19
|
# File 'lib/sqreen/sdk.rb', line 19
def signup_track(authentication_keys); end
|
.thread_cpu_time ⇒ Object
40
41
42
|
# File 'lib/sqreen/mono_time.rb', line 40
def self.thread_cpu_time
Process.clock_gettime Process::CLOCK_THREAD_CPUTIME_ID
end
|
.thread_cpu_time? ⇒ Boolean
24
25
26
|
# File 'lib/sqreen/mono_time.rb', line 24
def thread_cpu_time?
@has_thread_cpu_time
end
|
.time ⇒ Object
30
31
32
|
# File 'lib/sqreen/mono_time.rb', line 30
def self.time
Process.clock_gettime Process::CLOCK_MONOTONIC
end
|
.to_bool(value) ⇒ Object
90
91
92
|
# File 'lib/sqreen/configuration.rb', line 90
def self.to_bool(value)
%w[1 true].include?(value.to_s.downcase.strip)
end
|
.to_int(value) ⇒ Object
94
95
96
97
98
|
# File 'lib/sqreen/configuration.rb', line 94
def self.to_int(value)
str = value.to_s.downcase.strip
str = 1 if str == 'true'
str.to_i
end
|
.to_sym(value) ⇒ Object
100
101
102
|
# File 'lib/sqreen/configuration.rb', line 100
def self.to_sym(value)
value.to_sym
end
|
.track(event_name, options = {}) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/sqreen/sdk.rb', line 30
def track(event_name, options = {})
unless Sqreen.framework
Sqreen.log.warn("Ignored track call (event #{event_name}) due to framework absence")
return
end
Sqreen.log.debug { "Sqreen.track() call (event #{event_name}, options #{options})" }
if event_name.start_with? SDK_RESERVED_PREFIX
Sqreen.log.warn("Event names starting with '#{SDK_RESERVED_PREFIX}' " \
'are reserved. Event ignored.')
return false
end
internal_track(event_name, options)
end
|
.update_features(features) ⇒ Object
50
51
52
|
# File 'lib/sqreen/runner.rb', line 50
def update_features(features)
@features = features
end
|
79
80
81
82
|
# File 'lib/sqreen/runner.rb', line 79
def update_performance_budget(value)
return @performance_budget = nil if value.nil?
@performance_budget = value.to_f / 1000
end
|
.update_whitelisted_ips(paths) ⇒ Object
74
75
76
|
# File 'lib/sqreen/runner.rb', line 74
def update_whitelisted_ips(paths)
@whitelisted_ips = Hash[paths.map { |v| [v, IPAddr.new(v)] }].freeze
end
|
.update_whitelisted_paths(paths) ⇒ Object
69
70
71
|
# File 'lib/sqreen/runner.rb', line 69
def update_whitelisted_paths(paths)
@whitelisted_paths = paths.freeze
end
|