Renames class Assay to Transaction

This commit is contained in:
Felipe Zimmerle
2016-01-13 14:38:37 -03:00
parent f3fd5d6621
commit a51e707517
249 changed files with 2961 additions and 1235 deletions

View File

@@ -22,7 +22,7 @@
#include "modsecurity/modsecurity.h"
#include "modsecurity/rules.h"
using modsecurity::Assay;
using modsecurity::Transaction;
char request_header[] = "" \
"GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1\n\r" \
@@ -88,83 +88,83 @@ int main(int argc, char *argv[]) {
for (i = 0; i < NUM_REQUESTS; i++) {
std::cout << "Proceeding with request " << i << std::endl;
Assay *modsecAssay = new Assay(modsec, rules, NULL);
modsecAssay->processConnection(ip, 12345, "127.0.0.1", 80);
Transaction *modsecTransaction = new Transaction(modsec, rules, NULL);
modsecTransaction->processConnection(ip, 12345, "127.0.0.1", 80);
if (modsecAssay->intervention(&it)) {
if (modsecTransaction->intervention(&it)) {
std::cout << "There is an intervention" << std::endl;
continue;
}
modsecAssay->processURI(request_uri, "GET", "1.1");
if (modsecAssay->intervention(&it)) {
modsecTransaction->processURI(request_uri, "GET", "1.1");
if (modsecTransaction->intervention(&it)) {
std::cout << "There is an intervention" << std::endl;
continue;
}
modsecAssay->addRequestHeader("Host",
modsecTransaction->addRequestHeader("Host",
"net.tutsplus.com");
modsecAssay->addRequestHeader("User-Agent",
modsecTransaction->addRequestHeader("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) " \
"Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\n\r");
modsecAssay->addRequestHeader("Accept",
modsecTransaction->addRequestHeader("Accept",
"text/html,application/xhtml+xml,application/xml;" \
"q=0.9,*/*;q=0.8");
modsecAssay->addRequestHeader("Accept-Language",
modsecTransaction->addRequestHeader("Accept-Language",
"en-us,en;q=0.5");
modsecAssay->addRequestHeader("Accept-Encoding",
modsecTransaction->addRequestHeader("Accept-Encoding",
"gzip,deflate");
modsecAssay->addRequestHeader("Accept-Charset",
modsecTransaction->addRequestHeader("Accept-Charset",
"ISO-8859-1,utf-8;q=0.7,*;q=0.7");
modsecAssay->addRequestHeader("Keep-Alive",
modsecTransaction->addRequestHeader("Keep-Alive",
"300");
modsecAssay->addRequestHeader("Connection",
modsecTransaction->addRequestHeader("Connection",
"keep-alive");
modsecAssay->addRequestHeader("Cookie",
modsecTransaction->addRequestHeader("Cookie",
"PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120");
modsecAssay->addRequestHeader("Pragma",
modsecTransaction->addRequestHeader("Pragma",
"no-cache");
modsecAssay->addRequestHeader("Cache-Control",
modsecTransaction->addRequestHeader("Cache-Control",
"no-cache");
modsecAssay->processRequestHeaders();
modsecTransaction->processRequestHeaders();
if (modsecAssay->intervention(&it)) {
if (modsecTransaction->intervention(&it)) {
std::cout << "There is an intervention" << std::endl;
continue;
}
modsecAssay->processRequestBody();
modsecTransaction->processRequestBody();
if (modsecAssay->intervention(&it)) {
if (modsecTransaction->intervention(&it)) {
std::cout << "There is an intervention" << std::endl;
continue;
}
modsecAssay->addResponseHeader("HTTP/1.1",
modsecTransaction->addResponseHeader("HTTP/1.1",
"200 OK");
modsecAssay->addResponseHeader("Content-Type",
modsecTransaction->addResponseHeader("Content-Type",
"text/xml; charset=utf-8");
modsecAssay->addResponseHeader("Content-Length",
modsecTransaction->addResponseHeader("Content-Length",
"200");
modsecAssay->processResponseHeaders();
modsecTransaction->processResponseHeaders();
if (modsecAssay->intervention(&it)) {
if (modsecTransaction->intervention(&it)) {
std::cout << "There is an intervention" << std::endl;
continue;
}
modsecAssay->appendResponseBody(response_body,
modsecTransaction->appendResponseBody(response_body,
strlen((const char*)response_body));
modsecAssay->processResponseBody();
modsecTransaction->processResponseBody();
if (modsecAssay->intervention(&it)) {
if (modsecTransaction->intervention(&it)) {
std::cout << "There is an intervention" << std::endl;
continue;
}
delete modsecAssay;
delete modsecTransaction;
}
delete modsec;

View File

@@ -134,7 +134,7 @@ int main(int argc, char** argv) {
ModSecurity *ms = new ModSecurity();
Rules *rules = new Rules();
Assay *assay = new Assay(ms, rules, NULL);
Transaction *transaction = new Transaction(ms, rules, NULL);
/**
@@ -189,43 +189,43 @@ Utf8Unicode *utf8unicode = new Utf8Unicode("Utf8Unicode"); utf8unicode->evaluate
*
*/
#if 1
BeginsWith *beginswith = new BeginsWith("@BeginsWith", z, false); beginswith->evaluate(assay, s); delete beginswith;
Contains *contains = new Contains("@Contains", z, false); contains->evaluate(assay, s); delete contains;
ContainsWord *containsword = new ContainsWord("@ContainsWord", z, false); containsword->evaluate(assay, s); delete containsword;
DetectSQLi *detectsqli = new DetectSQLi("@DetectSQLi", z, false); detectsqli->evaluate(assay, s); delete detectsqli;
DetectXSS *detectxss = new DetectXSS("@DetectXSS", z, false); detectxss->evaluate(assay, s); delete detectxss;
EndsWith *endswith = new EndsWith("@EndsWith", z, false); endswith->evaluate(assay, s); delete endswith;
Eq *eq = new Eq("@Eq", z, false); eq->evaluate(assay, s); delete eq;
FuzzyHash *fuzzyhash = new FuzzyHash("@FuzzyHash", z, false); fuzzyhash->evaluate(assay, s); delete fuzzyhash;
Ge *ge = new Ge("@Ge", z, false); ge->evaluate(assay, s); delete ge;
GeoLookup *geolookup = new GeoLookup("@GeoLookup", z, false); geolookup->evaluate(assay, s); delete geolookup;
GsbLookup *gsblookup = new GsbLookup("@GsbLookup", z, false); gsblookup->evaluate(assay, s); delete gsblookup;
Gt *gt = new Gt("@Gt", z, false); gt->evaluate(assay, s); delete gt;
InspectFile *inspectfile = new InspectFile("@InspectFile", z, false); inspectfile->evaluate(assay, s); delete inspectfile;
IpMatchF *ipmatchf = new IpMatchF("@IpMatchF", z, false); ipmatchf->evaluate(assay, s); delete ipmatchf;
IpMatchFromFile *ipmatchfromfile = new IpMatchFromFile("@IpMatchFromFile", z, false); ipmatchfromfile->evaluate(assay, s); delete ipmatchfromfile;
IpMatch *ipmatch = new IpMatch("@IpMatch", z, false); ipmatch->evaluate(assay, s); delete ipmatch;
Le *le = new Le("@Le", z, false); le->evaluate(assay, s); delete le;
Lt *lt = new Lt("@Lt", z, false); lt->evaluate(assay, s); delete lt;
NoMatch *nomatch = new NoMatch("@NoMatch", z, false); nomatch->evaluate(assay, s); delete nomatch;
PmF *pmf = new PmF("@PmF", z, false); pmf->evaluate(assay, s); delete pmf;
PmFromFile *pmfromfile = new PmFromFile("@PmFromFile", z, false); pmfromfile->evaluate(assay, s); delete pmfromfile;
Pm *pm = new Pm("@Pm", z, false); pm->evaluate(assay, s); delete pm;
Rbl *rbl = new Rbl("@Rbl", z, false); rbl->evaluate(assay, s); delete rbl;
Rsub *rsub = new Rsub("@Rsub", z, false); rsub->evaluate(assay, s); delete rsub;
Rx *rx = new Rx("@Rx", z, false); rx->evaluate(assay, s); delete rx;
StrEq *streq = new StrEq("@StrEq", z, false); streq->evaluate(assay, s); delete streq;
StrMatch *strmatch = new StrMatch("@StrMatch", z, false); strmatch->evaluate(assay, s); delete strmatch;
ValidateByteRange *validatebyterange = new ValidateByteRange("@ValidateByteRange", z, false); validatebyterange->evaluate(assay, s); delete validatebyterange;
ValidateDTD *validatedtd = new ValidateDTD("@ValidateDTD", z, false); validatedtd->evaluate(assay, s); delete validatedtd;
ValidateHash *validatehash = new ValidateHash("@ValidateHash", z, false); validatehash->evaluate(assay, s); delete validatehash;
ValidateSchema *validateschema = new ValidateSchema("@ValidateSchema", z, false); validateschema->evaluate(assay, s); delete validateschema;
ValidateUrlEncoding *validateurlencoding = new ValidateUrlEncoding("@ValidateUrlEncoding", z, false); validateurlencoding->evaluate(assay, s); delete validateurlencoding;
ValidateUtf8Encoding *validateutf8encoding = new ValidateUtf8Encoding("@ValidateUtf8Encoding", z, false); validateutf8encoding->evaluate(assay, s); delete validateutf8encoding;
VerifyCC *verifycc = new VerifyCC("@VerifyCC", z, false); verifycc->evaluate(assay, s); delete verifycc;
VerifyCPF *verifycpf = new VerifyCPF("@VerifyCPF", z, false); verifycpf->evaluate(assay, s); delete verifycpf;
VerifySSN *verifyssn = new VerifySSN("@VerifySSN", z, false); verifyssn->evaluate(assay, s); delete verifyssn;
Within *within = new Within("@Within", z, false); within->evaluate(assay, s); delete within;
BeginsWith *beginswith = new BeginsWith("@BeginsWith", z, false); beginswith->evaluate(transaction, s); delete beginswith;
Contains *contains = new Contains("@Contains", z, false); contains->evaluate(transaction, s); delete contains;
ContainsWord *containsword = new ContainsWord("@ContainsWord", z, false); containsword->evaluate(transaction, s); delete containsword;
DetectSQLi *detectsqli = new DetectSQLi("@DetectSQLi", z, false); detectsqli->evaluate(transaction, s); delete detectsqli;
DetectXSS *detectxss = new DetectXSS("@DetectXSS", z, false); detectxss->evaluate(transaction, s); delete detectxss;
EndsWith *endswith = new EndsWith("@EndsWith", z, false); endswith->evaluate(transaction, s); delete endswith;
Eq *eq = new Eq("@Eq", z, false); eq->evaluate(transaction, s); delete eq;
FuzzyHash *fuzzyhash = new FuzzyHash("@FuzzyHash", z, false); fuzzyhash->evaluate(transaction, s); delete fuzzyhash;
Ge *ge = new Ge("@Ge", z, false); ge->evaluate(transaction, s); delete ge;
GeoLookup *geolookup = new GeoLookup("@GeoLookup", z, false); geolookup->evaluate(transaction, s); delete geolookup;
GsbLookup *gsblookup = new GsbLookup("@GsbLookup", z, false); gsblookup->evaluate(transaction, s); delete gsblookup;
Gt *gt = new Gt("@Gt", z, false); gt->evaluate(transaction, s); delete gt;
InspectFile *inspectfile = new InspectFile("@InspectFile", z, false); inspectfile->evaluate(transaction, s); delete inspectfile;
IpMatchF *ipmatchf = new IpMatchF("@IpMatchF", z, false); ipmatchf->evaluate(transaction, s); delete ipmatchf;
IpMatchFromFile *ipmatchfromfile = new IpMatchFromFile("@IpMatchFromFile", z, false); ipmatchfromfile->evaluate(transaction, s); delete ipmatchfromfile;
IpMatch *ipmatch = new IpMatch("@IpMatch", z, false); ipmatch->evaluate(transaction, s); delete ipmatch;
Le *le = new Le("@Le", z, false); le->evaluate(transaction, s); delete le;
Lt *lt = new Lt("@Lt", z, false); lt->evaluate(transaction, s); delete lt;
NoMatch *nomatch = new NoMatch("@NoMatch", z, false); nomatch->evaluate(transaction, s); delete nomatch;
PmF *pmf = new PmF("@PmF", z, false); pmf->evaluate(transaction, s); delete pmf;
PmFromFile *pmfromfile = new PmFromFile("@PmFromFile", z, false); pmfromfile->evaluate(transaction, s); delete pmfromfile;
Pm *pm = new Pm("@Pm", z, false); pm->evaluate(transaction, s); delete pm;
Rbl *rbl = new Rbl("@Rbl", z, false); rbl->evaluate(transaction, s); delete rbl;
Rsub *rsub = new Rsub("@Rsub", z, false); rsub->evaluate(transaction, s); delete rsub;
Rx *rx = new Rx("@Rx", z, false); rx->evaluate(transaction, s); delete rx;
StrEq *streq = new StrEq("@StrEq", z, false); streq->evaluate(transaction, s); delete streq;
StrMatch *strmatch = new StrMatch("@StrMatch", z, false); strmatch->evaluate(transaction, s); delete strmatch;
ValidateByteRange *validatebyterange = new ValidateByteRange("@ValidateByteRange", z, false); validatebyterange->evaluate(transaction, s); delete validatebyterange;
ValidateDTD *validatedtd = new ValidateDTD("@ValidateDTD", z, false); validatedtd->evaluate(transaction, s); delete validatedtd;
ValidateHash *validatehash = new ValidateHash("@ValidateHash", z, false); validatehash->evaluate(transaction, s); delete validatehash;
ValidateSchema *validateschema = new ValidateSchema("@ValidateSchema", z, false); validateschema->evaluate(transaction, s); delete validateschema;
ValidateUrlEncoding *validateurlencoding = new ValidateUrlEncoding("@ValidateUrlEncoding", z, false); validateurlencoding->evaluate(transaction, s); delete validateurlencoding;
ValidateUtf8Encoding *validateutf8encoding = new ValidateUtf8Encoding("@ValidateUtf8Encoding", z, false); validateutf8encoding->evaluate(transaction, s); delete validateutf8encoding;
VerifyCC *verifycc = new VerifyCC("@VerifyCC", z, false); verifycc->evaluate(transaction, s); delete verifycc;
VerifyCPF *verifycpf = new VerifyCPF("@VerifyCPF", z, false); verifycpf->evaluate(transaction, s); delete verifycpf;
VerifySSN *verifyssn = new VerifySSN("@VerifySSN", z, false); verifyssn->evaluate(transaction, s); delete verifyssn;
Within *within = new Within("@Within", z, false); within->evaluate(transaction, s); delete within;
#endif
@@ -234,26 +234,26 @@ Within *within = new Within("@Within", z, false); within->evaluate(assay, s); de
*
*/
#if 0
assay->processConnection(s.c_str(), 123, s.c_str(), 123);
assay->processURI(s.c_str(), z.c_str(), z.c_str());
assay->addRequestHeader(s, z);
assay->addRequestHeader(s, s);
assay->addRequestHeader(z, z);
assay->addRequestHeader(z, s);
assay->processRequestHeaders();
assay->appendRequestBody((const unsigned char *)s.c_str(), s.length());
assay->processRequestBody();
assay->addResponseHeader(s, z);
assay->addResponseHeader(s, s);
assay->addResponseHeader(z, z);
assay->addResponseHeader(z, s);
assay->processResponseHeaders();
assay->appendResponseBody((const unsigned char *)s.c_str(), s.length());
assay->processResponseBody();
transaction->processConnection(s.c_str(), 123, s.c_str(), 123);
transaction->processURI(s.c_str(), z.c_str(), z.c_str());
transaction->addRequestHeader(s, z);
transaction->addRequestHeader(s, s);
transaction->addRequestHeader(z, z);
transaction->addRequestHeader(z, s);
transaction->processRequestHeaders();
transaction->appendRequestBody((const unsigned char *)s.c_str(), s.length());
transaction->processRequestBody();
transaction->addResponseHeader(s, z);
transaction->addResponseHeader(s, s);
transaction->addResponseHeader(z, z);
transaction->addResponseHeader(z, s);
transaction->processResponseHeaders();
transaction->appendResponseBody((const unsigned char *)s.c_str(), s.length());
transaction->processResponseBody();
#endif
delete assay;
delete transaction;
delete rules;
delete ms;

View File

@@ -25,8 +25,8 @@
#include "src/utils.h"
#include "parser/driver.h"
#include "utils/https_client.h"
#include "modsecurity/assay.h"
#include "modsecurity/rules_properties.h"
#include "modsecurity/transaction.h"
void print_help() {
std::cout << "Use ./optimization /path/to/files.something" << std::endl;

View File

@@ -52,7 +52,7 @@ void print_help() {
void actions(ModSecurityTestResults<RegressionTest> *r,
modsecurity::Assay *a) {
modsecurity::Transaction *a) {
modsecurity::ModSecurityIntervention it;
memset(&it, '\0', sizeof(modsecurity::ModSecurityIntervention));
it.status = 200;
@@ -83,7 +83,7 @@ void perform_unit_test(std::vector<RegressionTest *> *tests,
CustomDebugLog *debug_log = new CustomDebugLog();
modsecurity::ModSecurity *modsec = NULL;
modsecurity::Rules *modsec_rules = NULL;
modsecurity::Assay *modsec_assay = NULL;
modsecurity::Transaction *modsec_transaction = NULL;
ModSecurityTestResults<RegressionTest> r;
std::stringstream serverLog;
RegressionTestResult *testRes = new RegressionTestResult();
@@ -131,7 +131,10 @@ void perform_unit_test(std::vector<RegressionTest *> *tests,
if (modsec_rules->load(t->rules.c_str(), filename) < 0) {
/* Parser error */
if (t->parser_error.empty() == true) {
/* Not expecting any error, thus return the error to the user. */
/*
* Not expecting any error, thus return the error to
* the user.
*/
std::cout << KRED << "failed!" << RESET << std::endl;
testRes->reason << KRED << "parse failed." << RESET \
<< std::endl;
@@ -182,69 +185,69 @@ void perform_unit_test(std::vector<RegressionTest *> *tests,
}
}
modsec_assay = new modsecurity::Assay(modsec, modsec_rules,
modsec_transaction = new modsecurity::Transaction(modsec, modsec_rules,
&serverLog);
modsec_assay->processConnection(t->clientIp.c_str(),
modsec_transaction->processConnection(t->clientIp.c_str(),
t->clientPort, t->serverIp.c_str(), t->serverPort);
actions(&r, modsec_assay);
actions(&r, modsec_transaction);
if (r.status != 200) {
goto end;
}
modsec_assay->processURI(t->uri.c_str(), t->method.c_str(),
modsec_transaction->processURI(t->uri.c_str(), t->method.c_str(),
t->httpVersion.c_str());
actions(&r, modsec_assay);
actions(&r, modsec_transaction);
if (r.status != 200) {
goto end;
}
for (std::pair<std::string, std::string> headers :
t->request_headers) {
modsec_assay->addRequestHeader(headers.first.c_str(),
modsec_transaction->addRequestHeader(headers.first.c_str(),
headers.second.c_str());
}
modsec_assay->processRequestHeaders();
actions(&r, modsec_assay);
modsec_transaction->processRequestHeaders();
actions(&r, modsec_transaction);
if (r.status != 200) {
goto end;
}
modsec_assay->appendRequestBody(
modsec_transaction->appendRequestBody(
(unsigned char *)t->request_body.c_str(),
t->request_body.size());
modsec_assay->processRequestBody();
actions(&r, modsec_assay);
modsec_transaction->processRequestBody();
actions(&r, modsec_transaction);
if (r.status != 200) {
goto end;
}
for (std::pair<std::string, std::string> headers :
t->response_headers) {
modsec_assay->addResponseHeader(headers.first.c_str(),
modsec_transaction->addResponseHeader(headers.first.c_str(),
headers.second.c_str());
}
modsec_assay->processResponseHeaders();
actions(&r, modsec_assay);
modsec_transaction->processResponseHeaders();
actions(&r, modsec_transaction);
if (r.status != 200) {
goto end;
}
modsec_assay->appendResponseBody(
modsec_transaction->appendResponseBody(
(unsigned char *)t->response_body.c_str(),
t->response_body.size());
modsec_assay->processResponseBody();
actions(&r, modsec_assay);
modsec_transaction->processResponseBody();
actions(&r, modsec_transaction);
if (r.status != 200) {
goto end;
}
end:
modsec_assay->processLogging(r.status);
modsec_transaction->processLogging(r.status);
CustomDebugLog *d = reinterpret_cast<CustomDebugLog *>
(modsec_rules->m_debugLog);
@@ -281,7 +284,7 @@ after_debug_log:
r.log_raw_debug_log = d->log_messages();
}
delete modsec_assay;
delete modsec_transaction;
delete modsec_rules;
delete modsec;
/* delete debug_log; */