Merge b5318902b09713b5ddc5924f6d5d6f84ad530587 into e523d7223b5589e68de2c2a9428a4ba81a265e6f

This commit is contained in:
Liu Dongmiao 2025-09-22 18:03:58 +05:30 committed by GitHub
commit 7df46da7ba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -113,59 +113,92 @@ Below some are illustrated:
### Simple example using C++ ### Simple example using C++
```c++ ```c++
using ModSecurity::ModSecurity; #include "modsecurity/modsecurity.h"
using ModSecurity::Rules; #include "modsecurity/rules_set.h"
using ModSecurity::Transaction; #include "modsecurity/transaction.h"
using modsecurity::ModSecurity;
using modsecurity::RulesSet;
using modsecurity::Transaction;
using modsecurity::ModSecurityIntervention;
int main() {
ModSecurity *modsec; ModSecurity *modsec;
ModSecurity::Rules *rules; RulesSet *rules;
modsec = new ModSecurity(); modsec = new ModSecurity();
rules = new Rules(); rules = new RulesSet();
rules->loadFromUri(rules_file); if (rules->load("SecRule REMOTE_ADDR \"@ipMatch 127.0.0.1\" \"id:1,phase:1,deny\"") < 0) {
std::cout << "Problems loading the rules..." << std::endl;
std::cout << rules->getParserError() << std::endl;
return -1;
}
Transaction *modsecTransaction = new Transaction(modsec, rules); Transaction *modsecTransaction = new Transaction(modsec, rules, nullptr);
modsecTransaction->processConnection("127.0.0.1"); // connection
if (modsecTransaction->intervention()) { modsecTransaction->processConnection("127.0.0.1", 12345, "127.0.0.1", 80);
// uri
modsecTransaction->processURI("/", "GET", "1.1");
// add headers
modsecTransaction->addRequestHeader("User-Agent", "ModSecurity/v3");
// check headers
modsecTransaction->processRequestHeaders();
// check intervention
ModSecurityIntervention intervention;
intervention.disruptive = 0;
if (modsecTransaction->intervention(&intervention)) {
std::cout << "There is an intervention" << std::endl; std::cout << "There is an intervention" << std::endl;
} }
return 0;
}
``` ```
### Simple example using C ### Simple example using C
```c ```c
#include "modsecurity/modsecurity.h" #include "modsecurity/modsecurity.h"
#include "modsecurity/rules_set.h"
#include "modsecurity/transaction.h" #include "modsecurity/transaction.h"
char main_rule_uri[] = "basic_rules.conf";
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
ModSecurity *modsec = NULL; ModSecurity *modsec = NULL;
Transaction *transaction = NULL; Transaction *transaction = NULL;
Rules *rules = NULL; RulesSet *rules = NULL;
modsec = msc_init(); modsec = msc_init();
rules = msc_create_rules_set(); rules = msc_create_rules_set();
msc_rules_add_file(rules, main_rule_uri); const char* error;
if (msc_rules_add(rules, "SecRule REMOTE_ADDR \"@ipMatch 127.0.0.1\" \"id:1,phase:1,deny\"", &error) < 0) {
transaction = msc_new_transaction(modsec, rules); fprintf(stderr, "Problems loading the rules...\n");
fprintf(stderr, "%s\n", error);
msc_process_connection(transaction, "127.0.0.1");
msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test");
msc_process_request_headers(transaction);
msc_process_request_body(transaction);
msc_process_response_headers(transaction);
msc_process_response_body(transaction);
return 0; return 0;
} }
transaction = msc_new_transaction(modsec, rules, NULL);
// connection
msc_process_connection(transaction, "127.0.0.1", 12345, "127.0.0.1", 80);
// uri
msc_process_uri(transaction, "/", "GET", "1.1");
// add headers
msc_add_request_header(transaction, "User-Agent", "ModSecurity/v3");
// check headers
msc_process_request_headers(transaction);
ModSecurityIntervention intervention;
intervention.disruptive = 0;
if (msc_intervention(transaction, &intervention)) {
fprintf(stderr, "There is an intervention\n");
return -1;
}
return 0;
}
``` ```
# Contributing # Contributing