console1984 0.1.7 → 0.1.8
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/README.md +8 -6
- data/config/protections.yml +30 -0
- data/lib/console1984/command_executor.rb +2 -6
- data/lib/console1984/command_validator/forbidden_constant_reference_validation.rb +1 -1
- data/lib/console1984/command_validator/forbidden_reopening_validation.rb +1 -1
- data/lib/console1984/command_validator/parsed_command.rb +33 -7
- data/lib/console1984/config.rb +9 -1
- data/lib/console1984/engine.rb +1 -1
- data/lib/console1984/ext/active_record/protected_auditable_tables.rb +1 -1
- data/lib/console1984/ext/core/module.rb +15 -0
- data/lib/console1984/ext/core/object.rb +1 -0
- data/lib/console1984/ext/socket/tcp_socket.rb +5 -1
- data/lib/console1984/freezeable.rb +13 -7
- data/lib/console1984/protections_config.rb +17 -0
- data/lib/console1984/refrigerator.rb +32 -0
- data/lib/console1984/shield/method_invocation_shell.rb +52 -0
- data/lib/console1984/shield.rb +8 -9
- data/lib/console1984/version.rb +1 -1
- metadata +7 -3
- data/config/command_protections.yml +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc64d037f2de5570292e0b09710b4543a68ba1af12759150cc68e7b7f4dd6e16
|
4
|
+
data.tar.gz: c5929af5061393a32c4df38022535d53c62aaaabe951727798e340322fb0d950
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b64f422bcdd421e7a874af965c9ee615f6d873e0d2a685d68667216fd1ee91d4e8e4815d4dd9e78ef7838a75763fb898be1f328c8466a137f1782a4121531da6
|
7
|
+
data.tar.gz: ce7e1f60bfdb666abe3c85a02ddaa1ac25344c994a1471ec64d07cd15f8aac5735bcd0608497e71d9813cf111cdb76f414a2373eb8dbef14b983757ba3876812
|
data/README.md
CHANGED
@@ -106,11 +106,7 @@ irb(main)> Topic.last.name
|
|
106
106
|
=> "{\"p\":\"iu6+LfnNlurC6sL++JyOIDvedjNSz/AvnZQ=\",\"h\":{\"iv\":\"BYa86+JNM/LdkC18\",\"at\":\"r4sQNoSyIlAjJdZEKHVMow==\",\"k\":{\"p\":\"7L1l/5UiYsFQqqo4jfMZtLwp90KqcrIgS7HqgteVjuM=\",\"h\":{\"iv\":\"ItwRYxZAerKIoSZ8\",\"at\":\"ZUSNVfvtm4wAYWLBKRAx/g==\",\"e\":\"QVNDSUktOEJJVA==\"}},\"i\":\"OTdiOQ==\"}}"
|
107
107
|
```
|
108
108
|
|
109
|
-
While in protected mode, you can't modify encrypted data, but can save unencrypted attributes normally. If you try to modify an encrypted column it will raise an error
|
110
|
-
|
111
|
-
```ruby
|
112
|
-
irb(main)> Rails.cache.read("some key") # raises Console1984::Errors::ProtectedConnection
|
113
|
-
```
|
109
|
+
While in protected mode, you can't modify encrypted data, but can save unencrypted attributes normally. If you try to modify an encrypted column it will raise an error.
|
114
110
|
|
115
111
|
### Access to external systems
|
116
112
|
|
@@ -122,7 +118,13 @@ To protect the access to such systems, you can add their URLs to `config.console
|
|
122
118
|
config.console1984.protected_urls = [ "https://my-app-us-east-1-whatever.us-east-1.es.amazonaws.com", "redis://my-app-cache-1.whatever.cache.amazonaws.com:6379" ]
|
123
119
|
```
|
124
120
|
|
125
|
-
|
121
|
+
In the default protected mode, trying to read data from a protected system will be aborted with an error:
|
122
|
+
|
123
|
+
```ruby
|
124
|
+
irb(main)> Rails.cache.read("some key") # raises Console1984::Errors::ProtectedConnection
|
125
|
+
```
|
126
|
+
|
127
|
+
Running `decrypt!` will switch you to unprotected mode and let you access these systems normally. The system will ask for a justfication and will flag those accesses as sensitive.
|
126
128
|
|
127
129
|
This will work for systems that use Ruby sockets as the underlying communication mechanism.
|
128
130
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
static_validations:
|
2
|
+
forbidden_reopening:
|
3
|
+
- ActiveRecord
|
4
|
+
- Console1984
|
5
|
+
- PG
|
6
|
+
- Mysql2
|
7
|
+
forbidden_constant_reference:
|
8
|
+
always:
|
9
|
+
- Console1984
|
10
|
+
protected:
|
11
|
+
- PG
|
12
|
+
- Mysql2
|
13
|
+
- ActiveRecord::ActiveRecordEncryption
|
14
|
+
suspicious_terms:
|
15
|
+
- console_1984
|
16
|
+
- Console1984
|
17
|
+
- secret
|
18
|
+
- credentials
|
19
|
+
forbidden_methods:
|
20
|
+
always:
|
21
|
+
user:
|
22
|
+
Kernel:
|
23
|
+
- eval
|
24
|
+
Object:
|
25
|
+
- eval
|
26
|
+
BasicObject:
|
27
|
+
- eval
|
28
|
+
- instance_eval
|
29
|
+
Module:
|
30
|
+
- class_eval
|
@@ -19,13 +19,11 @@ class Console1984::CommandExecutor
|
|
19
19
|
run_as_system { session_logger.before_executing commands }
|
20
20
|
validate_command commands
|
21
21
|
execute_in_protected_mode(&block)
|
22
|
-
rescue Console1984::Errors::ForbiddenCommand, FrozenError
|
22
|
+
rescue Console1984::Errors::ForbiddenCommand, FrozenError => e
|
23
23
|
flag_suspicious(commands)
|
24
24
|
rescue Console1984::Errors::SuspiciousCommand
|
25
25
|
flag_suspicious(commands)
|
26
26
|
execute_in_protected_mode(&block)
|
27
|
-
rescue FrozenError
|
28
|
-
flag_suspicious(commands)
|
29
27
|
ensure
|
30
28
|
run_as_system { session_logger.after_executing commands }
|
31
29
|
end
|
@@ -68,14 +66,12 @@ class Console1984::CommandExecutor
|
|
68
66
|
end
|
69
67
|
|
70
68
|
private
|
71
|
-
COMMAND_VALIDATOR_CONFIG_FILE_PATH = Console1984::Engine.root.join("config/command_protections.yml")
|
72
|
-
|
73
69
|
def command_validator
|
74
70
|
@command_validator ||= build_command_validator
|
75
71
|
end
|
76
72
|
|
77
73
|
def build_command_validator
|
78
|
-
Console1984::CommandValidator.from_config(
|
74
|
+
Console1984::CommandValidator.from_config(Console1984.protections_config.static_validations)
|
79
75
|
end
|
80
76
|
|
81
77
|
def flag_suspicious(commands)
|
@@ -24,7 +24,7 @@ class Console1984::CommandValidator::ForbiddenConstantReferenceValidation
|
|
24
24
|
|
25
25
|
private
|
26
26
|
def contains_invalid_const_reference?(parsed_command, banned_constants)
|
27
|
-
parsed_command.constants.find do |constant_name|
|
27
|
+
(parsed_command.constants + parsed_command.constant_assignments).find do |constant_name|
|
28
28
|
banned_constants.find { |banned_constant| "#{constant_name}::".start_with?("#{banned_constant}::") }
|
29
29
|
end
|
30
30
|
end
|
@@ -18,7 +18,7 @@ class Console1984::CommandValidator::ForbiddenReopeningValidation
|
|
18
18
|
|
19
19
|
private
|
20
20
|
def contains_invalid_class_or_module_declaration?(parsed_command)
|
21
|
-
parsed_command.declared_classes_or_modules.find { |class_or_module_name| banned?(class_or_module_name) }
|
21
|
+
(parsed_command.declared_classes_or_modules + parsed_command.constant_assignments).find { |class_or_module_name| banned?(class_or_module_name) }
|
22
22
|
end
|
23
23
|
|
24
24
|
def banned?(class_or_module_name)
|
@@ -6,7 +6,7 @@ class Console1984::CommandValidator::ParsedCommand
|
|
6
6
|
|
7
7
|
attr_reader :raw_command
|
8
8
|
|
9
|
-
delegate :declared_classes_or_modules, :constants, to: :processed_ast
|
9
|
+
delegate :declared_classes_or_modules, :constants, :constant_assignments, to: :processed_ast
|
10
10
|
|
11
11
|
def initialize(raw_command)
|
12
12
|
@raw_command = Array(raw_command).join("\n")
|
@@ -26,20 +26,33 @@ class Console1984::CommandValidator::ParsedCommand
|
|
26
26
|
include AST::Processor::Mixin
|
27
27
|
include Console1984::Freezeable
|
28
28
|
|
29
|
-
attr_reader :constants, :declared_classes_or_modules
|
30
|
-
|
31
29
|
def initialize
|
32
30
|
@constants = []
|
33
31
|
@declared_classes_or_modules = []
|
32
|
+
@constant_assignments = []
|
33
|
+
end
|
34
|
+
|
35
|
+
# We define accessors to define lists without duplicates. We are not using a +SortedSet+ because we want
|
36
|
+
# to mutate strings in the list while the processing is happening. And we don't use metapgroamming to define the
|
37
|
+
# accessors to prevent having problems with freezable and its instance_variable* protection.
|
38
|
+
|
39
|
+
def constants
|
40
|
+
@constants.uniq
|
41
|
+
end
|
42
|
+
|
43
|
+
def declared_classes_or_modules
|
44
|
+
@declared_classes_or_modules.uniq
|
45
|
+
end
|
46
|
+
|
47
|
+
def constant_assignments
|
48
|
+
@constant_assignments.uniq
|
34
49
|
end
|
35
50
|
|
36
51
|
def on_class(node)
|
37
52
|
super
|
38
53
|
const_declaration, _, _ = *node
|
39
|
-
|
40
|
-
|
41
|
-
processor.process(const_declaration)
|
42
|
-
@declared_classes_or_modules << processor.constants.first if processor.constants.present?
|
54
|
+
constant = extract_constants(const_declaration).first
|
55
|
+
@declared_classes_or_modules << constant if constant.present?
|
43
56
|
end
|
44
57
|
|
45
58
|
alias_method :on_module, :on_class
|
@@ -60,5 +73,18 @@ class Console1984::CommandValidator::ParsedCommand
|
|
60
73
|
last_constant << "::#{const_name}"
|
61
74
|
end
|
62
75
|
end
|
76
|
+
|
77
|
+
def on_casgn(node)
|
78
|
+
super
|
79
|
+
scope_node, name, value_node = *node
|
80
|
+
@constant_assignments.push(*extract_constants(value_node))
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
def extract_constants(node)
|
85
|
+
self.class.new.tap do |processor|
|
86
|
+
processor.process(node)
|
87
|
+
end.constants
|
88
|
+
end
|
63
89
|
end
|
64
90
|
end
|
data/lib/console1984/config.rb
CHANGED
@@ -4,11 +4,14 @@
|
|
4
4
|
class Console1984::Config
|
5
5
|
include Console1984::Freezeable, Console1984::Messages
|
6
6
|
|
7
|
+
PROTECTIONS_CONFIG_FILE_PATH = Console1984::Engine.root.join("config/protections.yml")
|
8
|
+
|
7
9
|
PROPERTIES = %i[
|
8
10
|
session_logger username_resolver shield command_executor
|
9
11
|
protected_environments protected_urls
|
10
12
|
production_data_warning enter_unprotected_encryption_mode_warning enter_protected_mode_warning
|
11
13
|
incinerate incinerate_after incineration_queue
|
14
|
+
protections_config
|
12
15
|
debug test_mode
|
13
16
|
]
|
14
17
|
|
@@ -24,9 +27,14 @@ class Console1984::Config
|
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
30
|
+
# Initialize lazily so that it only gets instantiated during console sessions
|
31
|
+
def protections_config
|
32
|
+
@protections_config ||= Console1984::ProtectionsConfig.new(YAML.safe_load(File.read(PROTECTIONS_CONFIG_FILE_PATH)).symbolize_keys)
|
33
|
+
end
|
34
|
+
|
27
35
|
def freeze
|
28
36
|
super
|
29
|
-
[ protected_urls ].each(&:freeze)
|
37
|
+
[ protected_urls, protections_config ].each(&:freeze)
|
30
38
|
end
|
31
39
|
|
32
40
|
private
|
data/lib/console1984/engine.rb
CHANGED
@@ -10,7 +10,7 @@ module Console1984
|
|
10
10
|
|
11
11
|
initializer "console1984.config" do
|
12
12
|
config.console1984.each do |key, value|
|
13
|
-
Console1984.config.send("#{key}=", value)
|
13
|
+
Console1984.config.send("#{key}=", value)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -19,7 +19,7 @@ module Console1984::Ext::ActiveRecord::ProtectedAuditableTables
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def auditable_tables
|
22
|
-
@auditable_tables ||= auditable_models.collect(&:table_name)
|
22
|
+
@auditable_tables ||= Console1984.command_executor.run_as_system { auditable_models.collect(&:table_name) }
|
23
23
|
end
|
24
24
|
|
25
25
|
def auditable_models
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Extends +Module+ to prevent invoking class_eval in user commands.
|
2
|
+
#
|
3
|
+
# We don't use the built-in configurable system from protections.yml because we use
|
4
|
+
# class_eval ourselves to implement it!
|
5
|
+
module Console1984::Ext::Core::Module
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
def instance_eval(*)
|
9
|
+
if Console1984.command_executor.executing_user_command?
|
10
|
+
raise Console1984::Errors::ForbiddenCommand
|
11
|
+
else
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -28,12 +28,16 @@ module Console1984::Ext::Socket::TcpSocket
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def protected_addresses
|
31
|
-
@protected_addresses ||=
|
31
|
+
@protected_addresses ||= protected_urls.collect do |url|
|
32
32
|
host, port = host_and_port_from(url)
|
33
33
|
Array(Addrinfo.getaddrinfo(host, port)).collect { |addrinfo| ComparableAddress.new(addrinfo) if addrinfo.ip_address }
|
34
34
|
end.flatten.compact.uniq
|
35
35
|
end
|
36
36
|
|
37
|
+
def protected_urls
|
38
|
+
Console1984::Shield::Modes::PROTECTED_MODE.currently_protected_urls || []
|
39
|
+
end
|
40
|
+
|
37
41
|
def host_and_port_from(url)
|
38
42
|
URI(url).then do |parsed_uri|
|
39
43
|
if parsed_uri.host
|
@@ -13,18 +13,24 @@
|
|
13
13
|
# will look through all the modules/classes freezing them. This way, we can control
|
14
14
|
# the moment where we stop classes from being modifiable at setup time.
|
15
15
|
module Console1984::Freezeable
|
16
|
-
extend ActiveSupport::Concern
|
17
|
-
|
18
16
|
mattr_reader :to_freeze, default: Set.new
|
19
17
|
|
20
|
-
|
21
|
-
|
18
|
+
# Not using ActiveSupport::Concern because a bunch of classes skip its +.invoked+ hook which
|
19
|
+
# is terrible for our purposes. This happened because it was being included in parent classes
|
20
|
+
# (such as Object), so it was skipping the include block.
|
21
|
+
def self.included(base)
|
22
|
+
Console1984::Freezeable.to_freeze << base
|
23
|
+
base.extend ClassMethods
|
24
|
+
|
25
|
+
# Flag to control manipulating instance data via instance_variable_get and instance_variable_set.
|
26
|
+
# true by default.
|
27
|
+
base.thread_mattr_accessor :prevent_instance_data_manipulation_after_freezing, default: true
|
22
28
|
end
|
23
29
|
|
24
|
-
|
30
|
+
module ClassMethods
|
25
31
|
SENSITIVE_INSTANCE_METHODS = %i[ instance_variable_get instance_variable_set ]
|
26
32
|
|
27
|
-
def
|
33
|
+
def prevent_instance_data_manipulation
|
28
34
|
SENSITIVE_INSTANCE_METHODS.each do |method|
|
29
35
|
prevent_sensitive_method method
|
30
36
|
end
|
@@ -51,7 +57,7 @@ module Console1984::Freezeable
|
|
51
57
|
end
|
52
58
|
|
53
59
|
def freeze_class_or_module(class_or_module)
|
54
|
-
class_or_module.
|
60
|
+
class_or_module.prevent_instance_data_manipulation if class_or_module.prevent_instance_data_manipulation_after_freezing
|
55
61
|
class_or_module.freeze
|
56
62
|
end
|
57
63
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Console1984::ProtectionsConfig
|
2
|
+
include Console1984::Freezeable
|
3
|
+
|
4
|
+
delegate :static_validations, to: :instance
|
5
|
+
|
6
|
+
attr_reader :config
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
end
|
11
|
+
|
12
|
+
%i[ static_validations forbidden_methods ].each do |method_name|
|
13
|
+
define_method method_name do
|
14
|
+
config[method_name].symbolize_keys
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Freezes classes to prevent tampering them
|
2
|
+
class Console1984::Refrigerator
|
3
|
+
include Console1984::Freezeable
|
4
|
+
|
5
|
+
def freeze_all
|
6
|
+
eager_load_all_classes
|
7
|
+
freeze_internal_instances # internal modules and classes are frozen by including Console1984::Freezable
|
8
|
+
freeze_external_modules_and_classes
|
9
|
+
|
10
|
+
Console1984::Freezeable.freeze_all
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
EXTERNAL_MODULES_AND_CLASSES_TO_FREEZE = [Parser::CurrentRuby]
|
15
|
+
|
16
|
+
def freeze_internal_instances
|
17
|
+
Console1984.config.freeze unless Console1984.config.test_mode
|
18
|
+
end
|
19
|
+
|
20
|
+
def freeze_external_modules_and_classes
|
21
|
+
EXTERNAL_MODULES_AND_CLASSES_TO_FREEZE.each { |klass| klass.include(Console1984::Freezeable) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def eager_load_all_classes
|
25
|
+
Rails.application.eager_load! unless Rails.application.config.eager_load
|
26
|
+
Console1984.class_loader.eager_load
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Parser::Ruby27
|
31
|
+
include Console1984::Freezeable
|
32
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Prevents invoking a configurable set of methods
|
2
|
+
class Console1984::Shield::MethodInvocationShell
|
3
|
+
include Console1984::Freezeable
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def install_for(config)
|
7
|
+
Array(config[:user]).each { |invocation| self.new(invocation, only_for_user_commands: true).prevent_methods_invocation }
|
8
|
+
Array(config[:system]).each { |invocation| self.new(invocation, only_for_user_commands: false).prevent_methods_invocation }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :class_name, :methods, :only_for_user_commands
|
13
|
+
|
14
|
+
def initialize(invocation, only_for_user_commands:)
|
15
|
+
@class_name, methods = invocation.to_a
|
16
|
+
@methods = Array(methods)
|
17
|
+
@only_for_user_commands = only_for_user_commands
|
18
|
+
end
|
19
|
+
|
20
|
+
def prevent_methods_invocation
|
21
|
+
class_name.constantize.prepend build_protection_module
|
22
|
+
end
|
23
|
+
|
24
|
+
def build_protection_module
|
25
|
+
source = protected_method_invocations_source
|
26
|
+
Module.new do
|
27
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
28
|
+
#{source}
|
29
|
+
RUBY
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def protected_method_invocations_source
|
34
|
+
methods.collect { |method| protected_method_invocation_source_for(method) }.join("\n")
|
35
|
+
end
|
36
|
+
|
37
|
+
def protected_method_invocation_source_for(method)
|
38
|
+
<<~RUBY
|
39
|
+
def #{method}(*args)
|
40
|
+
if (!#{only_for_user_commands} || Console1984.command_executor.executing_user_command?) && caller.find do |line|
|
41
|
+
line_from_irb = line =~ /^[^\\/]/
|
42
|
+
break if !(line =~ /console1984\\/lib/ || line_from_irb)
|
43
|
+
line_from_irb
|
44
|
+
end
|
45
|
+
raise Console1984::Errors::ForbiddenCommand
|
46
|
+
else
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
RUBY
|
51
|
+
end
|
52
|
+
end
|
data/lib/console1984/shield.rb
CHANGED
@@ -19,7 +19,9 @@ class Console1984::Shield
|
|
19
19
|
# that aren't mean to be modified once the console is running.
|
20
20
|
def install
|
21
21
|
extend_protected_systems
|
22
|
-
|
22
|
+
prevent_invoking_protected_methods
|
23
|
+
|
24
|
+
refrigerator.freeze_all
|
23
25
|
end
|
24
26
|
|
25
27
|
private
|
@@ -37,6 +39,7 @@ class Console1984::Shield
|
|
37
39
|
|
38
40
|
def extend_core_ruby
|
39
41
|
Object.prepend Console1984::Ext::Core::Object
|
42
|
+
Module.prepend Console1984::Ext::Core::Module
|
40
43
|
end
|
41
44
|
|
42
45
|
def extend_sockets
|
@@ -65,16 +68,12 @@ class Console1984::Shield
|
|
65
68
|
end
|
66
69
|
end
|
67
70
|
|
68
|
-
def
|
69
|
-
|
70
|
-
Console1984.config.freeze unless Console1984.config.test_mode
|
71
|
-
Console1984::Freezeable.freeze_all
|
72
|
-
Parser::CurrentRuby.freeze
|
71
|
+
def prevent_invoking_protected_methods
|
72
|
+
MethodInvocationShell.install_for(Console1984.protections_config.forbidden_methods)
|
73
73
|
end
|
74
74
|
|
75
|
-
def
|
76
|
-
|
77
|
-
Console1984.class_loader.eager_load
|
75
|
+
def refrigerator
|
76
|
+
@refrigerator ||= Console1984::Refrigerator.new
|
78
77
|
end
|
79
78
|
|
80
79
|
module SSLSocketRemoteAddress
|
data/lib/console1984/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console1984
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jorge Manrubia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -195,7 +195,7 @@ files:
|
|
195
195
|
- app/models/console1984/session.rb
|
196
196
|
- app/models/console1984/session/incineratable.rb
|
197
197
|
- app/models/console1984/user.rb
|
198
|
-
- config/
|
198
|
+
- config/protections.yml
|
199
199
|
- db/migrate/20210517203931_create_console1984_tables.rb
|
200
200
|
- lib/console1984.rb
|
201
201
|
- lib/console1984/command_executor.rb
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- lib/console1984/engine.rb
|
209
209
|
- lib/console1984/errors.rb
|
210
210
|
- lib/console1984/ext/active_record/protected_auditable_tables.rb
|
211
|
+
- lib/console1984/ext/core/module.rb
|
211
212
|
- lib/console1984/ext/core/object.rb
|
212
213
|
- lib/console1984/ext/irb/commands.rb
|
213
214
|
- lib/console1984/ext/irb/context.rb
|
@@ -215,8 +216,11 @@ files:
|
|
215
216
|
- lib/console1984/freezeable.rb
|
216
217
|
- lib/console1984/input_output.rb
|
217
218
|
- lib/console1984/messages.rb
|
219
|
+
- lib/console1984/protections_config.rb
|
220
|
+
- lib/console1984/refrigerator.rb
|
218
221
|
- lib/console1984/sessions_logger/database.rb
|
219
222
|
- lib/console1984/shield.rb
|
223
|
+
- lib/console1984/shield/method_invocation_shell.rb
|
220
224
|
- lib/console1984/shield/modes.rb
|
221
225
|
- lib/console1984/shield/modes/protected.rb
|
222
226
|
- lib/console1984/shield/modes/unprotected.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
forbidden_reopening:
|
2
|
-
- ActiveRecord
|
3
|
-
- Console1984
|
4
|
-
- PG
|
5
|
-
- Mysql2
|
6
|
-
forbidden_constant_reference:
|
7
|
-
always:
|
8
|
-
- Console1984
|
9
|
-
protected:
|
10
|
-
- PG
|
11
|
-
- Mysql2
|
12
|
-
- ActiveRecord::ActiveRecordEncryption
|
13
|
-
suspicious_terms:
|
14
|
-
- console_1984
|
15
|
-
- Console1984
|
16
|
-
- secret
|
17
|
-
- credentials
|