Skip to content

Commit 69cd614

Browse files
author
Felipe Zimmerle
committed
Changes the timing to save the rule message
1 parent 8088d6a commit 69cd614

File tree

4 files changed

+32
-4
lines changed

4 files changed

+32
-4
lines changed

src/rule.cc

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <cstring>
2424
#include <list>
2525
#include <utility>
26+
#include <memory>
2627

2728
#include "src/operators/operator.h"
2829
#include "modsecurity/actions/action.h"
@@ -396,6 +397,7 @@ std::list<std::pair<std::shared_ptr<std::string>,
396397
std::shared_ptr<std::string>(new std::string(in));
397398

398399
if (m_containsMultiMatchAction == true) {
400+
/* keep the original value */
399401
ret.push_back(std::make_pair(
400402
std::shared_ptr<std::string>(new std::string(*value)),
401403
std::shared_ptr<std::string>(new std::string(path))));
@@ -764,10 +766,24 @@ bool Rule::evaluate(Transaction *trans,
764766
for (auto &i : v->m_orign) {
765767
ruleMessage->m_reference.append(i->toText());
766768
}
769+
767770
ruleMessage->m_reference.append(*valueTemp.second);
768771
updateMatchedVars(trans, key, valueAfterTrans);
769772
executeActionsIndependentOfChainedRuleResult(trans,
770773
&containsBlock, ruleMessage);
774+
775+
bool isItToBeLogged = ruleMessage->m_saveMessage;
776+
if (m_containsMultiMatchAction && isItToBeLogged) {
777+
/* warn */
778+
trans->m_rulesMessages.push_back(*ruleMessage);
779+
/* error */
780+
trans->serverLog(ruleMessage);
781+
782+
RuleMessage *rm = new RuleMessage(this, trans);
783+
rm->m_saveMessage = ruleMessage->m_saveMessage;
784+
ruleMessage.reset(rm);
785+
}
786+
771787
globalRet = true;
772788
}
773789
}
@@ -816,9 +832,21 @@ bool Rule::evaluate(Transaction *trans,
816832

817833
end_exec:
818834
executeActionsAfterFullMatch(trans, containsBlock, ruleMessage);
819-
if (m_ruleId != 0 && ruleMessage->m_saveMessage != false) {
835+
836+
/* last rule in the chain. */
837+
bool isItToBeLogged = ruleMessage->m_saveMessage;
838+
if (isItToBeLogged && !m_containsMultiMatchAction
839+
&& !ruleMessage->m_message.empty()) {
840+
/* warn */
841+
trans->m_rulesMessages.push_back(*ruleMessage);
842+
/* error */
820843
trans->serverLog(ruleMessage);
844+
}
845+
else if (m_containsStaticBlockAction && !m_containsMultiMatchAction) {
846+
/* warn */
821847
trans->m_rulesMessages.push_back(*ruleMessage);
848+
/* error */
849+
trans->serverLog(ruleMessage);
822850
}
823851

824852
return true;

test/test-cases/regression/issue-1528.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"rules": [
3333
"SecRuleEngine On",
3434
"SecAction \"id:1, nolog, setvar:tx.bad_value=attack\"",
35-
"SecRule ARGS:param \"@rx ^%{tx.bad_value}$\" id:2"
35+
"SecRule ARGS:param \"@rx ^%{tx.bad_value}$\" \"id:2,block\""
3636
]
3737
}
3838
]

test/test-cases/regression/offset-variable.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@
314314
]
315315
},
316316
"expected":{
317-
"error_log":"o0,6v17,6t:trimo0,6v149,6t:trim"
317+
"error_log":"o0,6v17,6t:trim"
318318
},
319319
"rules":[
320320
"SecRequestBodyAccess On",

test/test-cases/regression/operator-rx.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
},
8484
"rules":[
8585
"SecRuleEngine On",
86-
"SecRule REQUEST_HEADERS:Content-Length \"!^0$\" \"id:1,phase:2,pass,t:trim\""
86+
"SecRule REQUEST_HEADERS:Content-Length \"!^0$\" \"id:1,phase:2,pass,t:trim,block\""
8787
]
8888
}
8989
]

0 commit comments

Comments
 (0)