Added URLENCODED_ERROR, which is raised when invalid URL encoding is encountered

This commit is contained in:
ivanr
2009-12-12 14:21:17 +00:00
parent 62f7e68234
commit 6d5e752cb3
4 changed files with 33 additions and 0 deletions

View File

@@ -295,6 +295,10 @@ apr_status_t modsecurity_tx_init(modsec_rec *msr) {
msr_log(msr, 1, "Initialisation: Error occurred while parsing QUERY_STRING arguments.");
return -1;
}
if (invalid_count) {
msr->urlencoded_error = 1;
}
}
msr->arguments_to_sanitize = apr_table_make(msr->mp, 16);

View File

@@ -258,6 +258,8 @@ struct modsec_rec {
apr_table_t *response_headers_to_sanitize;
apr_table_t *request_cookies;
unsigned int urlencoded_error;
unsigned int is_relevant;
apr_table_t *tx_vars;

View File

@@ -424,6 +424,10 @@ static apr_status_t modsecurity_request_body_end_urlencoded(modsec_rec *msr, cha
return -1;
}
if (invalid_count) {
msr->urlencoded_error = 1;
}
return 1;
}

View File

@@ -1414,6 +1414,18 @@ static int var_multipart_unmatched_boundary_generate(modsec_rec *msr, msre_var *
}
}
/* URLENCODED_ERROR */
static int var_urlencoded_error_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
apr_table_t *vartab, apr_pool_t *mptmp)
{
if (msr->urlencoded_error) {
return var_simple_generate(var, vartab, mptmp, "1");
} else {
return var_simple_generate(var, vartab, mptmp, "0");
}
}
/* TIME */
static int var_time_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
@@ -2973,6 +2985,17 @@ void msre_engine_register_default_variables(msre_engine *engine) {
PHASE_RESPONSE_HEADERS
);
/* URLENCODED_ERROR */
msre_engine_variable_register(engine,
"URLENCODED_ERROR",
VAR_SIMPLE,
0, 0,
NULL,
var_urlencoded_error_generate,
VAR_DONT_CACHE, /* flag */
PHASE_REQUEST_HEADERS
);
/* USER */
msre_engine_variable_register(engine,
"USER",