mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2026-01-01 06:09:03 +03:00
Extends the direct access model to other collections
This commit is contained in:
committed by
Felipe Zimmerle
parent
ca24b6bb06
commit
f2d149fc5f
@@ -19,6 +19,8 @@
|
||||
#include <utility>
|
||||
#include "modsecurity/transaction.h"
|
||||
#include "modsecurity/rule.h"
|
||||
#include "src/utils/string.h"
|
||||
#include "src/utils/regex.h"
|
||||
|
||||
#ifndef SRC_VARIABLES_VARIABLE_H_
|
||||
#define SRC_VARIABLES_VARIABLE_H_
|
||||
@@ -66,32 +68,21 @@ class Variable {
|
||||
Variable(std::string name, VariableKind kind);
|
||||
virtual ~Variable() { }
|
||||
|
||||
static std::string to_s(std::vector<Variable *> *variables);
|
||||
|
||||
|
||||
virtual std::vector<const collection::Variable *>
|
||||
*evaluate(Transaction *transaction);
|
||||
|
||||
|
||||
virtual void evaluateInternal(Transaction *transaction,
|
||||
virtual void evaluate(Transaction *transaction,
|
||||
Rule *rule,
|
||||
std::vector<const collection::Variable *> *l);
|
||||
|
||||
|
||||
virtual void evaluateInternal(Transaction *transaction,
|
||||
Rule *rule,
|
||||
std::vector<const collection::Variable *> *l) {
|
||||
evaluateInternal(transaction, l);
|
||||
}
|
||||
|
||||
|
||||
virtual void evaluate(Transaction *transaction,
|
||||
std::vector<const collection::Variable *> *l);
|
||||
|
||||
virtual void evaluate(Transaction *transaction,
|
||||
Rule *rule,
|
||||
std::vector<const collection::Variable *> *l) {
|
||||
evaluate(transaction, l);
|
||||
}
|
||||
|
||||
static std::string to_s(std::vector<Variable *> *variables);
|
||||
|
||||
std::string m_name;
|
||||
std::string m_collectionName;
|
||||
@@ -103,6 +94,57 @@ class Variable {
|
||||
};
|
||||
|
||||
|
||||
class VariableModificatorExclusion : public Variable {
|
||||
public:
|
||||
VariableModificatorExclusion(std::unique_ptr<Variable> var)
|
||||
: Variable(var->m_name),
|
||||
m_var(std::move(var)) {
|
||||
m_isExclusion = true;
|
||||
}
|
||||
|
||||
void evaluate(Transaction *transaction,
|
||||
Rule *rule,
|
||||
std::vector<const collection::Variable *> *l) {
|
||||
m_var->evaluate(transaction, rule, l);
|
||||
}
|
||||
|
||||
std::unique_ptr<Variable> m_var;
|
||||
};
|
||||
|
||||
|
||||
class VariableModificatorCount : public Variable {
|
||||
public:
|
||||
VariableModificatorCount(std::unique_ptr<Variable> var)
|
||||
: Variable(var->m_name),
|
||||
m_var(std::move(var)) {
|
||||
m_isCount = true;
|
||||
}
|
||||
|
||||
void evaluate(Transaction *transaction,
|
||||
Rule *rule,
|
||||
std::vector<const collection::Variable *> *l) {
|
||||
std::vector<const collection::Variable *> reslIn;
|
||||
std::string *res = NULL;
|
||||
collection::Variable *val = NULL;
|
||||
int count = 0;
|
||||
|
||||
m_var->evaluate(transaction, rule, &reslIn);
|
||||
for (auto &a : reslIn) {
|
||||
count++;
|
||||
}
|
||||
res = new std::string(std::to_string(count));
|
||||
|
||||
val = new collection::Variable(&m_name, res);
|
||||
val->m_dynamic_value = true;
|
||||
val->m_dynamic = true;
|
||||
|
||||
l->push_back(val);
|
||||
return;
|
||||
}
|
||||
|
||||
std::unique_ptr<Variable> m_var;
|
||||
};
|
||||
|
||||
} // namespace Variables
|
||||
} // namespace modsecurity
|
||||
|
||||
|
||||
Reference in New Issue
Block a user