3053 Commits

Author SHA1 Message Date
Felipe Zimmerle
17e3ec7787
Testing github workflow 2020-11-23 12:53:02 -03:00
Felipe Zimmerle
0096b17787
Using a custom VariableMatch* implementation
Delay the variable name resolution till last minute.

Fix one of the issues raised in #2376
2020-11-22 11:07:19 -03:00
Felipe Zimmerle
cf4f1b776b
Avoids to cleanup GeoIp on ModSecurity destructor
GeoIp is already being cleaned elsewhere.

Fix #2041
2020-11-17 22:53:23 -03:00
martinhsv
a6fe74d1af
Fix memory leak of RuleMessages objects 2020-11-16 10:01:43 -03:00
martinhsv
65ced72918
Produce not-supported error for ctl:forceRequestBodyVariable, ctl:auditEngine 2020-11-16 10:01:43 -03:00
martinhsv
b83d1f1d06
Implement id ranges for ctl:ruleRemoveTargetById 2020-11-16 10:01:43 -03:00
Felipe Zimmerle
39ac4760ea
Refactoring on Action - having RuleWithAction and RuleWithActionsProperties 2020-11-16 10:01:43 -03:00
Felipe Zimmerle
730328897d
Constify Transaction on variable resolution 2020-11-16 10:01:43 -03:00
Felipe Zimmerle
3317f498f6
Uses unique_ptr on REMOTE_USER 2020-11-16 10:01:43 -03:00
Felipe Zimmerle
09ec92e66a
Reduce the workload on VariableValue
Last compute at the last minute, if needed.
2020-11-16 10:01:42 -03:00
Felipe Zimmerle
44791be5e0
Adds support for string_view in Variable 2020-11-16 10:01:42 -03:00
Felipe Zimmerle
68c3aa97a6
Removes copy form VariableValue
On `Use std::shared_ptr for variable resolution` @WGH changes
VariableValue to be a shared_ptr. As shared pointer, the copy
on AnchoredVariable is no longer necessary. The copy was removed
along with the copy constructor.
2020-11-16 10:01:42 -03:00
Felipe Zimmerle
952473368a
Replaces getKeyWithCollection with getName on VariableValue 2020-11-16 10:01:42 -03:00
Felipe Zimmerle
c24cdf6313
Removes unecessary ptr copy form VariableValue 2020-11-16 10:01:42 -03:00
Felipe Zimmerle
045e66d624
Delays variable name resolution to whenever it is necessary 2020-11-16 10:01:42 -03:00
Felipe Zimmerle
a8ba54e1ab
Cosmetics: Using VariableValues instead of std::vector<...>
Making the code more readable.
2020-11-16 10:01:42 -03:00
Felipe Zimmerle
f917d07950
Refactoring on variables::Variable
Using the references on key and collection as shared pointers
2020-11-16 10:01:42 -03:00
WGH
1b13e041ce
Use std::shared_ptr for variable resolution
AnchoredSetVariable::resolve is called for every rule
(see RuleWithOperator::evaluate). The previous implementation allocated
a new copy of every variable, which quickly added up. In my tests,
AnchoredSetVariable::resolve function consumed 7.8% of run time.

AnchoredSetVariable (which is a multimap) values are never changed,
only added. This means it's safe to store them in std::shared_ptr,
and make resolve return shared_ptr pointing to the same object.

Other resolve implementation could also use this optimization by not
allocating new objects, however, they are not hot spots, so this
optimization was not implemented there.

In my benchmark, this raises performance from 117 requests per second to
131 RPS, and overhead is lowered from 7.8% to 2.4%.

As a bonus, replacing plain pointer with smart pointers make code
cleaner, since using smart pointers makes manual deletes no longer necessary.

Additionally, VariableOrigin is now stored in plain std::vector,
since it's wasteful to store structure containing just two integer
values using std::list<std::unique_ptr<T>>.
2020-11-16 10:01:42 -03:00
Felipe Zimmerle
7d4cb31b72
Having RunTimeString in a better shape
This is an effort towards better understanding the issues
reported on #2376
2020-11-16 10:01:41 -03:00
Felipe Zimmerle
5f853f1511
Removes init from SetVar 2020-11-16 10:01:41 -03:00
Felipe Zimmerle
281a4caabb
Use 'equal_range' instead of full scan for rule exceptions
The original author was @WGH-, this change was proposed at #2370
2020-11-16 10:01:41 -03:00
WGH
85b9e36d0b
Remove unnecessary copying in transformations
In C++11, string data is always null-terminated[1], and can be
freely modified[2].

[1] https://stackoverflow.com/questions/6077189/will-stdstring-always-be-null-terminated-in-c11
[2] https://stackoverflow.com/questions/38875623/is-it-permitted-to-modify-the-internal-stdstring-buffer-returned-by-operator
2020-11-16 10:01:41 -03:00
WGH
bbaffc8f3d
Make all "rule id" variables of type RuleId
Previously, ModSecurity inconsistently used RuleId, int and double for
rule id variables in different places.
2020-11-16 10:01:41 -03:00
Felipe Zimmerle
d023ddffcd
Makes RuleWithActions const in run time operations 2020-11-16 10:01:41 -03:00
Felipe Zimmerle
a733313589
Introduces ActionWithExecution 2020-11-16 10:01:41 -03:00
Felipe Zimmerle
0a8c808f7a
Makes Lua::run const 2020-11-16 10:01:41 -03:00
Felipe Zimmerle
f703e5795f
Removes method isDisruptive from Action class 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
61c4319b14
Action: make sure that null constructor is not used 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
e9adb6c68f
Computes auditlog during rules load time 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
c90325062b
actions: Removes Rule parameter from runtime execute
Generals organization on the Action class
2020-11-16 10:01:40 -03:00
Felipe Zimmerle
2ee9ccffa9
actions: Compute the rule association during rules load 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
a4cd7a0091
tests: Romoves unused header from a test case 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
7095b7db27
tests: Prints test number on segfault 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
f945086ec4
Replaces lower case implementation 2020-11-16 10:01:40 -03:00
Felipe Zimmerle
301f724e9e
Makes operator to use string_view 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
d5158f1afc
Improves rules dump for better testing 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
46acbd81a0
Better error handling when loading configurations 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
3fb4266ebf
Adds method getVariableNames to variables 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
5504f63b21
Cosmetics: Defining a type for RuleId 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
bab7d6ccdf
Moves rule* headers to src/ 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
38a814411b
Cleanup on Action class 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
10985f33b0
Removes RuleMessage from action execute signature 2020-11-16 10:01:39 -03:00
Felipe Zimmerle
12304ea36b
Refactoring: Makes transformations to work with new execute signature 2020-11-16 10:01:38 -03:00
nikolas
e3583f342a
Move travis to use a new version of Ubuntu 2020-11-16 10:01:38 -03:00
Felipe Zimmerle
01e2fe4f82
Cosmetics: fix some cppcheck complains 2020-11-16 10:01:38 -03:00
Felipe Zimmerle
14a60ef46c
Refactoring: rename evaluate to execute on actions 2020-11-16 10:01:38 -03:00
Felipe Zimmerle
a5a0f261e2
Refactoring in the Rule class to make it more elegant 2020-11-16 10:01:38 -03:00
Felipe Zimmerle
4c0fc7b6ff
Rule: isMarker is no longer necessary 2020-11-16 10:01:38 -03:00
Felipe Zimmerle
1518015687
Adds new method for rule merge
IMPORTANT: SecDefaultAction specified on a child configuration will
overwrite the ones specified on the parent; Previously it was
concatenating.
2020-11-16 10:01:38 -03:00
Felipe Zimmerle
73c3731c9d
Moves default actions to be part of the rules 2020-11-16 10:01:38 -03:00