Difference Between Revision 26 and internetx:managed:testing / mod_security
[-] | Changed | mod_security-ix.changes |
x 1
2 ------------------------------------------------------------------- 3 -Wed Jan 11 06:34:21 UTC 2023 - Carsten Schoene <carsten.schoene@internetx.com> 4 - 5 -- Update to release 2.9.7 6 - 7 -------------------------------------------------------------------- 8 -Thu Mar 17 10:30:16 UTC 2022 - Local OBS User <cs@linux-administrator.com> 9 - 10 -- Update to release 2.9.5 11 - 12 -------------------------------------------------------------------- 13 -Mon Aug 23 11:39:54 UTC 2021 - Local OBS User <cs@linux-administrator.com> 14 - 15 -- Update to release 2.9.4 16 - 17 -------------------------------------------------------------------- 18 -Wed Feb 5 09:52:49 UTC 2020 - Local OBS User <cs@linux-administrator.com> 19 - 20 -- Update to release 2.9.3 21 - 22 -------------------------------------------------------------------- 23 -Wed May 16 06:44:59 UTC 2018 - cs@linux-administrator.com 24 - 25 -- Update to release 2.9.2 26 - 27 -------------------------------------------------------------------- 28 -Thu Apr 9 09:26:32 UTC 2015 - cs@linux-administrator.com 29 - 30 -- Update to relesae 2.9.0 31 -- set PERL ENV var to /usr/bin/perl 32 -- drop mlogc-disable-force-sslv3.patch (TLSv1 is default now) 33 - 34 -------------------------------------------------------------------- 35 -Fri Aug 8 17:29:19 UTC 2014 - cs@linux-administrator.com 36 - 37 -- Update to release 2.8.0 38 - 39 -------------------------------------------------------------------- 40 -Sun Jan 5 16:20:52 UTC 2014 - cs@linux-administrator.com 41 - 42 -- enable --enable-htaccess-config 43 - 44 -------------------------------------------------------------------- 45 -Thu Dec 19 23:23:46 UTC 2013 - cs@linux-administrator.com 46 - 47 -- Update to release 2.7.7 48 - 49 -------------------------------------------------------------------- 50 -Tue Jul 30 17:01:30 UTC 2013 - cs@linux-administrator.com 51 - 52 -- Update to release 2.7.5 53 - 54 -------------------------------------------------------------------- 55 -Thu Jul 11 19:33:18 UTC 2013 - cs@linux-administrator.com 56 - 57 -- build against asl-libxml2 for EL5 based systems 58 - 59 -------------------------------------------------------------------- 60 -Sat Jun 29 17:00:16 UTC 2013 - cs@linux-administrator.com 61 - 62 -- added CVE-2013-2765.patch for 2.6.8 (included in 2.7.4) 63 - 64 -------------------------------------------------------------------- 65 -Wed Jun 5 10:16:47 UTC 2013 - cs@linux-administrator.com 66 - 67 -- fix permissions in cleanup cron script 68 - 69 -------------------------------------------------------------------- 70 -Mon May 27 17:02:32 UTC 2013 - cs@linux-administrator.com 71 - 72 -- Update to release 2.7.4 (only for >= SLE_11, >= EL6) 73 - 74 -------------------------------------------------------------------- 75 -Fri Mar 29 17:31:45 UTC 2013 - cs@linux-administrator.com 76 - 77 -- Update to release 2.7.3 (only for >= SLE_11, >= EL6) 78 - 79 -------------------------------------------------------------------- 80 -Fri Jan 25 20:10:39 UTC 2013 - cs@linux-administrator.com 81 - 82 -- Update to release 2.7.2 (only for >= SLE_11, >= EL6) 83 - 84 -------------------------------------------------------------------- 85 -Sat Dec 29 10:33:37 UTC 2012 - cs@linux-administrator.com 86 - 87 -- Update to release 2.7.1 (only for >= SLE_11, >= EL6) 88 - 89 -------------------------------------------------------------------- 90 -Wed Oct 3 08:10:36 UTC 2012 - cs@linux-administrator.com 91 - 92 -- Update to release 2.6.8 93 - 94 -------------------------------------------------------------------- 95 -Sun Jul 29 15:58:38 UTC 2012 - cs@linux-administrator.com 96 - 97 -- Update to release 2.6.7 98 - 99 -------------------------------------------------------------------- 100 -Wed Jul 18 07:05:49 UTC 2012 - cs@linux-administrator.com 101 - 102 -- disable Rule 340152 103 - 104 -------------------------------------------------------------------- 105 -Tue Jul 3 08:30:53 UTC 2012 - cs@linux-administrator.com 106 - 107 -- disable Cross-Site Request Forgery (CSRF) rules 108 -- add cleanup cron for /var/asl/data/audit 109 - 110 -------------------------------------------------------------------- 111 -Mon Jun 18 10:21:17 UTC 2012 - cs@linux-administrator.com 112 - 113 -- Update to release 2.6.6 114 - - added rule 391213 to default exclude list 115 - 116 -------------------------------------------------------------------- 117 -Thu Mar 29 21:43:48 UTC 2012 - cs@linux-administrator.com 118 - 119 -- Update to release 2.6.5 120 - 121 -------------------------------------------------------------------- 122 -Sat Jan 7 21:44:12 UTC 2012 - cs@linux-administrator.com 123 - 124 -- Update to release 2.6.3 125 - 126 -------------------------------------------------------------------- 127 Sun Oct 23 09:49:21 UTC 2011 - cs@linux-administrator.com 128 129 - Update to release 2.6.2 130 |
||
[-] | Changed | mod_security-ix.spec ^ |
127 1
2 -%define aslxml 1 3 -%define pkgname modsecurity- 4 Summary: Security module for the Apache HTTP Server 5 Name: mod_security 6 -%if 0%{?centos_version} >= 6 || 0%{?rhel_version} >= 600 || 0%{?sl_version} >= 600 || 0%{?suse_version} >= 1110 || 0%{?sles_version} >= 11 7 -%define pkgversion 2.9.7 8 -%define oldver 0 9 -%define _aslxml 0 10 -%define epoch 1 11 -BuildRequires: libxml2-devel 12 -%else 13 -%if %{aslxml} 14 -%define pkgversion 2.9.7 15 -%define oldver 0 16 -%define _aslxml 1 17 -%define epoch 1 18 -BuildRequires: asl-libxml2-devel 19 -%else 20 -%define pkgversion 2.6.8 21 -%define pkgname modsecurity-apache_ 22 -%define oldver 1 23 -%define _aslxml 0 24 -%define epoch 0 25 -BuildRequires: libxml2-devel 26 -%endif 27 -%endif 28 -Version: %{pkgversion} 29 -Epoch: %{epoch} 30 -Release: 35 31 +Version: 2.6.2 32 +Release: 23 33 License: GPLv2 34 URL: http://www.modsecurity.org/ 35 Group: System Environment/Daemons 36 -Source: http://www.modsecurity.org/download/%{pkgname}%{version}.tar.bz2 37 +Source: http://www.modsecurity.org/download/modsecurity-apache_%{version}.tar.bz2 38 %if 0%{?rhel_version} || 0%{?centos_version} || 0%{?sl_version} || 0%{?redhat_version} 39 Source1: 00_mod_security.conf 40 Source2: modsecurity_crs_10_config-default.conf 41
42 Source3: zzz_asl_custom_exclude.conf 43 Source4: zzz_asl_custom_local_exclude.conf 44 Source5: modsec-clamscan.pl 45 -Source6: modsec-clean_var-asl-data-audit 46 Patch1: waf-label.patch 47 -Patch2: modsecurity-2.9.1_curl-lower_7.34.patch 48 -Patch50: CVE-2013-2765.patch 49 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 50 %if 0%{?rhel_version} || 0%{?centos_version} || 0%{?sl_version} || 0%{?redhat_version} 51 Requires: httpd httpd-mmn = %([ -a %{_includedir}/httpd/.mmn ] && cat %{_includedir}/httpd/.mmn || echo missing) 52 BuildRequires: httpd-devel pkgconfig lua-devel 53 Requires: lua 54 -%if 0%{?rhel} >= 7 55 -%define apxs %{_bindir}/apxs 56 -%else 57 %define apxs %{_sbindir}/apxs 58 -%endif 59 %define apache_libexecdir %(%{apxs} -q LIBEXECDIR) 60 ##%define apache_sysconfdir %(%{apxs} -q SYSCONFDIR) 61 %define apache_sysconfdir /etc/httpd 62
63 Provides: apache2-mod_security2 = %{version} 64 %endif 65 66 -BuildRequires: pcre-devel libtool curl-devel 67 +BuildRequires: libxml2-devel pcre-devel libtool curl-devel 68 BuildRequires: curl 69 70 -BuildRequires: autoconf automake 71 Requires: libxml2 pcre 72 Provides: ix-mod_security = %{version} 73 74
75 as a powerful umbrella - shielding web applications from attacks. 76 77 %prep 78 -%setup -n %{pkgname}%{version} 79 +%setup -n modsecurity-apache_%{version} 80 %patch1 -p1 81 -%patch2 -p0 82 -%if 0%{?oldver} == 1 83 -%patch50 -p1 84 -%endif 85 86 %build 87 CFLAGS="%{optflags}" 88 export CFLAGS 89 -export PERL=/usr/bin/perl 90 - 91 -[ ! -f configure ] && ./autogen.sh 92 93 %configure \ 94 -%if 0%{_aslxml} == 1 95 - --with-libxml=/var/asl/usr/ \ 96 -%endif 97 - --enable-pcre-match-limit=no \ 98 - --enable-pcre-match-limit-recursion=no \ 99 - --enable-pcre-study \ 100 - --enable-htaccess-config 101 + --disable-pcre-match-limit \ 102 + --disable-pcre-match-limit-recursion 103 + 104 +# Legacy from LoadFile 105 +#perl -pi.orig -e 's|LIBDIR|%{_libdir}|;' %{SOURCE1} 106 107 make %{_smp_mflags} 108 109
110 install -D -m644 %{SOURCE3} %{buildroot}/%{apache_sysconfdir}/modsec/zzz_asl_custom_exclude.conf 111 install -D -m644 %{SOURCE4} %{buildroot}/%{apache_sysconfdir}/modsec/zzz_asl_custom_local_exclude.conf 112 install -D -m755 %{SOURCE5} %{buildroot}%{_bindir}/modsec-clamscan.pl 113 -install -D -m755 %{SOURCE6} %{buildroot}%{_sysconfdir}/cron.daily/modsec-clean_var-asl-data-audit 114 -sed -i s@"%APAUSR%:%APAGRP%"@"%{apache_usr}:%{apache_grp}"@g %{buildroot}%{_sysconfdir}/cron.daily/modsec-clean_var-asl-data-audit 115 - 116 mkdir -p %{buildroot}/var/log/mlogc/data 117 install -D -m755 mlogc/mlogc %{buildroot}%{_bindir}/mlogc 118 install -m755 mlogc/mlogc-batch-load.pl %{buildroot}%{_bindir}/mlogc-batch-load.pl 119
120 %config(noreplace) %{apache_sysconfdir}/modsec/zzz_asl_custom_local_exclude.conf 121 %config(noreplace) %{_sysconfdir}/mlogc.conf 122 %config %{_sysconfdir}/mlogc-default.conf 123 -%config %{_sysconfdir}/cron.daily/modsec-clean_var-asl-data-audit 124 %defattr(-,%{apache_usr},%{apache_grp}) 125 %dir /var/asl 126 %dir /var/asl/data 127 |
||
[+] | Deleted | CVE-2013-2765.patch ^ |
@@ -1,10 +0,0 @@ ---- modsecurity-apache_2.6.8/apache2/msc_reqbody.c.orig 2013-06-29 18:56:31.446864803 +0200 -+++ modsecurity-apache_2.6.8/apache2/msc_reqbody.c 2013-06-29 18:56:45.354863561 +0200 -@@ -170,6 +170,7 @@ - - /* Would storing this chunk mean going over the limit? */ - if ((msr->msc_reqbody_spilltodisk) -+ && (msr->txcfg->reqbody_buffering != REQUEST_BODY_FORCEBUF_ON) - && (msr->msc_reqbody_length + length > (apr_size_t)msr->txcfg->reqbody_inmemory_limit)) - { - msc_data_chunk **chunks; | ||
[+] | Deleted | mlogc-disable-force-sslv3.patch ^ |
@@ -1,11 +0,0 @@ ---- mlogc/mlogc.c.orig 2012-03-05 17:20:00.254555490 +0100 -+++ mlogc/mlogc.c 2012-03-05 17:20:10.430753985 +0100 -@@ -1214,7 +1214,7 @@ - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); - /* SSLv3 works better overall as some servers have issues with TLS */ -- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3); -+ /* curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3); */ - curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 15); - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE); - curl_easy_setopt(curl, CURLOPT_HEADER, TRUE); | ||
[+] | Deleted | modsecurity-2.9.1_curl-lower_7.34.patch ^ |
@@ -1,60 +0,0 @@ ---- mlogc/mlogc.c.orig 2016-06-02 09:15:03.283648355 +0200 -+++ mlogc/mlogc.c 2016-06-02 10:59:44.378377602 +0200 -@@ -1270,33 +1270,36 @@ - } - - -- /* Seems like CURL_SSLVERSION_TLSv1_2 is not supported on libcurl -- * < v7.34.0 -- * -- * version_num is a 24 bit number created like this: -- * <8 bits major number> | <8 bits minor number> | <8 bits patch number>. -- */ -- switch (tlsprotocol) { -- case 0: -- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); -- break; -- case 1: -- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1); -- break; -- case 2: -- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); -- break; -- default: -- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); -- break; -- } - cmaj = curlversion->version_num >> 16; - cmin = (curlversion->version_num & 0x00ff00) >> 8; - cpat = (curlversion->version_num & 0x0000ff); - /* If cURL version < v7.34.0, use TLS v1.x */ - if (cmaj <= 7 && cmin < 34) { - curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); -- } -+#ifdef CURL_SSLVERSION_TLSv1_0 -+ } else { -+ /* Seems like CURL_SSLVERSION_TLSv1_2 is not supported on libcurl -+ * < v7.34.0 -+ * -+ * version_num is a 24 bit number created like this: -+ * <8 bits major number> | <8 bits minor number> | <8 bits patch number>. -+ */ -+ switch (tlsprotocol) { -+ case 0: -+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); -+ break; -+ case 1: -+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1); -+ break; -+ case 2: -+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); -+ break; -+ default: -+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); -+ break; -+ } -+#endif -+ } - - curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 15); - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE); | ||
[+] | Changed | modsec-clamscan.pl ^ |
@@ -27,7 +27,7 @@ my ($FILE) = @ARGV; -$cmd = "$CLAMSCAN --stdout --no-summary $FILE"; +$cmd = "$CLAMSCAN --stdout --disable-summary $FILE"; $input = `$cmd`; $input =~ m/^(.+)/; $error_message = $1; | ||
[+] | Deleted | modsec-clean_var-asl-data-audit ^ |
@@ -1,5 +0,0 @@ -#!/bin/bash -nice -n 19 find /var/asl/data/audit -type d -mindepth 1 -cmin +30 -print0 | xargs -r -0 rm -rf -mkdir -p /var/asl/data/audit -chown -R %APAUSR%:%APAGRP% /var/asl/data/audit -[ -x /usr/local/bin/modsec-permissions ] && /usr/local/bin/modsec-permissions || : | ||
Deleted | modsecurity-2.8.0.tar.bz2 ^ | |
Deleted | modsecurity-2.9.0.tar.bz2 ^ | |
Deleted | modsecurity-2.9.2.tar.bz2 ^ | |
Deleted | modsecurity-2.9.3.tar.bz2 ^ | |
Deleted | modsecurity-2.9.4.tar.bz2 ^ | |
Deleted | modsecurity-2.9.5.tar.bz2 ^ | |
Deleted | modsecurity-2.9.7.tar.bz2 ^ | |
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/CHANGES ^ |
@@ -1,83 +1,3 @@ -25 Sep 2012 - 2.6.8 -------------------- - - * Fixed ctl:ruleRemoveTargetByID order issue (MODSEC-333). Thanks to Armadillo Dasypodidae. - - * Fixed variable HIGHEST_SEVERITY incorrectly gets reset in a chain rule (MODSEC-315). Thanks to Valery Reznic. - -23 Jul 2012 - 2.6.7 -------------------- - - * Fixed explicit target replacement using SecUpdateTargetById was broken. - - * The ctl:ruleUpdateTargetById is deprecated and will be removed for future versions since - there is no safe way to use it per-request. - - * Added ctl:ruleRemoveTargetById that can be used to exclude targets to be processed per-request. - -08 Jun 2012 - 2.6.6 -------------------- - - * Added build system support for KfreeBSD and HURD. - - * Fixed a multipart bypass issue related to quote parsing - Credits to Qualys Vulnerability & Malware Research Labs (VMRL). - -20 Mar 2012 - 2.6.5 -------------------- - - * Fixed increased a specific message debug level in SBDM code (MODSEC-293). - - * Cleanup build system. - -09 Mar 2012 - 2.6.4 -------------------- - - * Fixed Mlogc 100% CPU consume (Thanks Klaubert Herr and Ebrahim Khalilzadeh). - - * Fixed ModSecurity cannot load session and user sdbm data. - - * Fixed updateTargetById was creating rule unparsed content making apache memory grow. - - * Code cleanup. - -23 Feb 2012 - 2.6.4-rc1 -------------------- - - * Fixed @rsub adding garbage data into stream variables. - - * Fixed regex for section A into mlogc-batch-load.pl (Thanks Ebrahim Khalilzadeh). - - * Fixed logdata cuts message without closing it with final chars. - - * Added sanitizeMatchedBytes support to verifyCPF, verifyCC and verifySSN. - -23 Dec 2011 - 2.6.3 -------------------- - -* Fixed conn_rec apache API changes in httpd trunk (Thanks Steffen Land). - -* Fixed Error log Hook apache API changes in httpd trunk (Thanks Steffen Land). - -* Updated doc/ Reference_Manual - -06 Dec 2011 - 2.6.3-rc1 -------------------- - -* Fixed MATCHED_VARS does not correctly handle multiple VARS with the same name. - -* Fixed SDBM garbage collection was not working as expected, increasing the size of files. - -* Fixed wrong timestamp calculation for some time zones in log files. - -* Fixed SecUpdateTargetById failed to load multiple VARS (MODSEC-270). - -* Fixed Reverted hexDecode for hexEncode compatibility reason. - -* Added SecCollectionTimeout to set collection timeout, default is 3600. - -* Added sqlHexDecode transformation to decode sql hex data. Thanks Marc Stern. - 30 Sep 2011 - 2.6.2 ------------------- @@ -299,7 +219,7 @@ importantly, override server configuration in <Location> and others. (MODSEC-98) [Ivan Ristic] - * Renamed the sanitise family of actions to sanitize. Kept the old variants + * Renamed the sanitise family of actiont to sanitize. Kept the old variants for backward compatibility. (MODSEC-95) [Ivan Ristic] * Improve the logging of the ctl action. (MODSEC-99) [Ivan Ristic] | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/apache2_config.c ^ |
@@ -125,9 +125,6 @@ dcfg->request_encoding = NOT_SET_P; dcfg->disable_backend_compression = NOT_SET; - /* Collection timeout */ - dcfg->col_timeout = NOT_SET; - return dcfg; } @@ -515,9 +512,6 @@ merged->disable_backend_compression = (child->disable_backend_compression == NOT_SET ? parent->disable_backend_compression : child->disable_backend_compression); - merged->col_timeout = (child->col_timeout == NOT_SET - ? parent->col_timeout : child->col_timeout); - return merged; } @@ -613,8 +607,6 @@ if (dcfg->request_encoding == NOT_SET_P) dcfg->request_encoding = NULL; if (dcfg->disable_backend_compression == NOT_SET) dcfg->disable_backend_compression = 0; - - if (dcfg->col_timeout == NOT_SET) dcfg->col_timeout = 3600; } /** @@ -1257,18 +1249,6 @@ return NULL; } -static const char *cmd_collection_timeout(cmd_parms *cmd, void *_dcfg, - const char *p1) -{ - directory_config *dcfg = (directory_config *)_dcfg; - - dcfg->col_timeout = atoi(p1); - /* max 30 days */ - if ((dcfg->col_timeout >= 0)&&(dcfg->col_timeout <= 2592000)) return NULL; - - return apr_psprintf(cmd->pool, "ModSecurity: Invalid value for SecCollectionTimeout: %s", p1); -} - static const char *cmd_debug_log_level(cmd_parms *cmd, void *_dcfg, const char *p1) { @@ -2353,14 +2333,6 @@ ), AP_INIT_TAKE1 ( - "SecCollectionTimeout", - cmd_collection_timeout, - NULL, - CMD_SCOPE_ANY, - "set default collections timeout. default it 3600" - ), - - AP_INIT_TAKE1 ( "SecDefaultAction", cmd_default_action, NULL, | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/apache2_io.c ^ |
@@ -119,13 +119,6 @@ bucket = apr_bucket_heap_create(msr->stream_input_data, msr->stream_input_length, NULL, f->r->connection->bucket_alloc); - if (msr->txcfg->stream_inbody_inspection) { - if(msr->stream_input_data != NULL) { - free(msr->stream_input_data); - msr->stream_input_data = NULL; - } - } - if (bucket == NULL) return APR_EGENERAL; APR_BRIGADE_INSERT_TAIL(bb_out, bucket); @@ -569,6 +562,24 @@ if (msr->txcfg->stream_outbody_inspection) { + char *stream_output_body = NULL; + + if(msr->stream_output_data == NULL) + msr->stream_output_data = (char *)malloc(msr->resbody_length+1); + else { + stream_output_body = (char *)realloc(msr->stream_output_data, msr->resbody_length+1); + + if(stream_output_body == NULL) { + free(msr->stream_output_data); + msr->stream_output_data = NULL; + msr_log(msr, 1, "Output filter: Stream Response body data memory allocation failed. Asked for: %" APR_SIZE_T_FMT, + msr->stream_output_length + 1); + return -1; + } + + msr->stream_output_data = (char *)stream_output_body; + } + msr->stream_output_length = msr->resbody_length; if (msr->stream_output_data == NULL) { @@ -814,24 +825,7 @@ /* Do we need to process a partial response? */ if (start_skipping) { - - if (msr->txcfg->stream_outbody_inspection) { - if(msr->stream_output_data != NULL) { - free(msr->stream_output_data); - msr->stream_output_data = NULL; - } - - msr->stream_output_data = (char *)malloc(msr->resbody_length+1); - } - if (flatten_response_body(msr) < 0) { - if (msr->txcfg->stream_outbody_inspection) { - if(msr->stream_output_data != NULL) { - free(msr->stream_output_data); - msr->stream_output_data = NULL; - } - } - ap_remove_output_filter(f); return send_error_bucket(msr, f, HTTP_INTERNAL_SERVER_ERROR); } @@ -891,24 +885,7 @@ * only if it hasn't been processed already. */ if (msr->phase < PHASE_RESPONSE_BODY) { - - if (msr->txcfg->stream_outbody_inspection) { - if(msr->stream_output_data != NULL) { - free(msr->stream_output_data); - msr->stream_output_data = NULL; - } - - msr->stream_output_data = (char *)malloc(msr->resbody_length+1); - } - if (flatten_response_body(msr) < 0) { - if (msr->txcfg->stream_outbody_inspection) { - if(msr->stream_output_data != NULL) { - free(msr->stream_output_data); - msr->stream_output_data = NULL; - } - } - ap_remove_output_filter(f); return send_error_bucket(msr, f, HTTP_INTERNAL_SERVER_ERROR); } @@ -935,14 +912,6 @@ inject_content_to_of_brigade(msr,f); msr->of_stream_changed = 0; } - - if (msr->txcfg->stream_outbody_inspection) { - if(msr->stream_output_data != NULL) { - free(msr->stream_output_data); - msr->stream_output_data = NULL; - } - } - prepend_content_to_of_brigade(msr, f); /* Inject content into response (append & buffering). */ | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/apache2_util.c ^ |
@@ -263,15 +263,9 @@ } else hostname = ""; -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r->server, - "[client %s] ModSecurity: %s%s [uri \"%s\"]%s", r->connection->client_ip, str1, - hostname, log_escape(msr->mp, r->uri), unique_id); -#else ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r->server, "[client %s] ModSecurity: %s%s [uri \"%s\"]%s", r->connection->remote_ip, str1, hostname, log_escape(msr->mp, r->uri), unique_id); -#endif /* Add this message to the list. */ if (msr != NULL) { | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/mod_security2.c ^ |
@@ -84,7 +84,7 @@ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Loaded APR do not match with compiled!"); } - pcre_vrs = apr_psprintf(mp,"%d.%d ", PCRE_MAJOR, PCRE_MINOR); + pcre_vrs = apr_psprintf(mp,"%d.%d", PCRE_MAJOR, PCRE_MINOR); ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL, "ModSecurity: PCRE compiled version=\"%s\"; " @@ -409,13 +409,8 @@ msr->local_addr = r->connection->local_ip; msr->local_port = r->connection->local_addr->port; -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - msr->remote_addr = r->connection->client_ip; - msr->remote_port = r->connection->client_addr->port; -#else msr->remote_addr = r->connection->remote_ip; msr->remote_port = r->connection->remote_addr->port; -#endif msr->request_line = r->the_request; msr->request_uri = r->uri; @@ -886,7 +881,8 @@ * Invoked every time Apache has something to write to the error log. */ #if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 -static void hook_error_log(const ap_errorlog_info *info, const char *errstr) +static void hook_error_log(const char *file, int line, int module_index, int level, apr_status_t status, + const server_rec *s, const request_rec *r, apr_pool_t *mp, const char *fmt) #else static void hook_error_log(const char *file, int line, int level, apr_status_t status, const server_rec *s, const request_rec *r, apr_pool_t *mp, const char *fmt) @@ -895,35 +891,15 @@ modsec_rec *msr = NULL; error_message *em = NULL; -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - if (info == NULL) return; - if (info->r == NULL) return; -#else if (r == NULL) return; -#endif - -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - msr = retrieve_tx_context((request_rec *)info->r); -#else msr = retrieve_tx_context((request_rec *)r); -#endif /* Create a context for requests we never had the chance to process */ -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - if ((msr == NULL) - && ((info->level & APLOG_LEVELMASK) < APLOG_DEBUG) - && apr_table_get(info->r->subprocess_env, "UNIQUE_ID")) -#else if ((msr == NULL) && ((level & APLOG_LEVELMASK) < APLOG_DEBUG) && apr_table_get(r->subprocess_env, "UNIQUE_ID")) -#endif { -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - msr = create_tx_context((request_rec *)info->r); -#else msr = create_tx_context((request_rec *)r); -#endif if (msr->txcfg->debuglog_level >= 9) { if (msr == NULL) { msr_log(msr, 9, "Failed to create context after request failure."); @@ -940,19 +916,11 @@ em = (error_message *)apr_pcalloc(msr->mp, sizeof(error_message)); if (em == NULL) return; -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - if (info->file != NULL) em->file = apr_pstrdup(msr->mp, info->file); - em->line = info->line; - em->level = info->level; - em->status = info->status; - if (info->format != NULL) em->message = apr_pstrdup(msr->mp, info->format); -#else if (file != NULL) em->file = apr_pstrdup(msr->mp, file); em->line = line; em->level = level; em->status = status; if (fmt != NULL) em->message = apr_pstrdup(msr->mp, fmt); -#endif /* Remove \n from the end of the message */ if (em->message != NULL) { @@ -1236,7 +1204,7 @@ int i, j; unsigned long int ip_count = 0, ip_count_w = 0; worker_score *ws_record = NULL; -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 +#if AP_SERVER_MINORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 ap_sb_handle_t *sbh = NULL; #endif @@ -1246,15 +1214,11 @@ if(ws_record == NULL) return DECLINED; -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - apr_cpystrn(ws_record->client, conn->client_ip, sizeof(ws_record->client)); -#else apr_cpystrn(ws_record->client, conn->remote_ip, sizeof(ws_record->client)); -#endif for (i = 0; i < server_limit; ++i) { for (j = 0; j < thread_limit; ++j) { -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 +#if AP_SERVER_MINORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 sbh = conn->sbh; if (sbh == NULL) { return DECLINED; @@ -1270,22 +1234,12 @@ switch (ws_record->status) { case SERVER_BUSY_READ: -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - if (strcmp(conn->client_ip, ws_record->client) == 0) - ip_count++; -#else if (strcmp(conn->remote_ip, ws_record->client) == 0) ip_count++; -#endif break; case SERVER_BUSY_WRITE: -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - if (strcmp(conn->client_ip, ws_record->client) == 0) - ip_count_w++; -#else if (strcmp(conn->remote_ip, ws_record->client) == 0) ip_count_w++; -#endif break; default: break; @@ -1294,18 +1248,10 @@ } if ((conn_read_state_limit > 0) && (ip_count > conn_read_state_limit)) { -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in READ state from %s - Possible DoS Consumption Attack [Rejected]", ip_count,conn_read_state_limit,conn->client_ip); -#else ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in READ state from %s - Possible DoS Consumption Attack [Rejected]", ip_count,conn_read_state_limit,conn->remote_ip); -#endif return OK; } else if ((conn_write_state_limit > 0) && (ip_count_w > conn_write_state_limit)) { -#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2 - ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in WRITE state from %s - Possible DoS Consumption Attack [Rejected]", ip_count_w,conn_write_state_limit,conn->client_ip); -#else ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in WRITE state from %s - Possible DoS Consumption Attack [Rejected]", ip_count_w,conn_write_state_limit,conn->remote_ip); -#endif return OK; } else { return DECLINED; | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/modsecurity.c ^ |
@@ -212,30 +212,28 @@ } time_after = apr_time_now(); - + msr->time_storage_write += time_after - time_before; - + if (msr->txcfg->debuglog_level >= 4) { msr_log(msr, 4, "Recording persistent data took %" APR_TIME_T_FMT " microseconds.", msr->time_gc); - } - + } + /* Remove stale collections. */ - srand(time(NULL)); - if (rand() < RAND_MAX/100) { arr = apr_table_elts(msr->collections); te = (apr_table_entry_t *)arr->elts; for (i = 0; i < arr->nelts; i++) { collections_remove_stale(msr, te[i].key); } - + msr->time_gc = apr_time_now() - time_after; - + if (msr->txcfg->debuglog_level >= 4) { msr_log(msr, 4, "Garbage collection took %" APR_TIME_T_FMT " microseconds.", msr->time_gc); - } + } } } @@ -368,8 +366,6 @@ if (msr->response_headers_to_sanitize == NULL) return -1; msr->pattern_to_sanitize = apr_table_make(msr->mp, 32); if (msr->pattern_to_sanitize == NULL) return -1; - msr->removed_targets = apr_table_make(msr->mp, 16); - if (msr->removed_targets == NULL) return -1; /* Initialise cookies */ msr->request_cookies = apr_table_make(msr->mp, 16); | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/modsecurity.h ^ |
@@ -280,7 +280,6 @@ apr_table_t *response_headers_to_sanitize; apr_table_t *request_cookies; apr_table_t *pattern_to_sanitize; - apr_table_t *removed_targets; unsigned int urlencoded_error; unsigned int inbound_error; @@ -518,11 +517,8 @@ /* Request character encoding. */ const char *request_encoding; - + int disable_backend_compression; - - /* Collection timeout */ - int col_timeout; }; struct error_message { | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/msc_multipart.c ^ |
@@ -20,32 +20,6 @@ #include "msc_util.h" #include "msc_parsers.h" -void validate_quotes(modsec_rec *msr, unsigned char *data) { - int i, len; - - if(msr == NULL) - return; - - if(msr->mpd == NULL) - return; - - if(data == NULL) - return; - - len = strlen(data); - - for(i = 0; i < len; i++) { - - if(data[i] == '\'') { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "Multipart: Invalid quoting detected: %s length %d bytes", - log_escape_nq(msr->mp, data), len); - } - msr->mpd->flag_invalid_quoting = 1; - } - } -} - #if 0 static char *multipart_construct_filename(modsec_rec *msr) { @@ -181,9 +155,6 @@ /* evaluate part */ if (strcmp(name, "name") == 0) { - - validate_quotes(msr, value); - if (msr->mpd->mpp->name != NULL) { msr_log(msr, 4, "Multipart: Warning: Duplicate Content-Disposition name: %s", log_escape_nq(msr->mp, value)); @@ -198,9 +169,6 @@ } else if (strcmp(name, "filename") == 0) { - - validate_quotes(msr, value); - if (msr->mpd->mpp->filename != NULL) { msr_log(msr, 4, "Multipart: Warning: Duplicate Content-Disposition filename: %s", log_escape_nq(msr->mp, value)); @@ -219,18 +187,7 @@ while((*p == '\t') || (*p == ' ')) p++; /* the next character must be a zero or a semi-colon */ if (*p == '\0') return 1; /* this is OK */ - if (*p != ';') { - p--; - if(*p == '\'' || *p == '\"') { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "Multipart: Invalid quoting detected: %s length %d bytes", - log_escape_nq(msr->mp, p), strlen(p)); - } - msr->mpd->flag_invalid_quoting = 1; - } - p++; - return -12; - } + if (*p != ';') return -12; p++; /* move over the semi-colon */ } | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/msc_release.h ^ |
@@ -38,7 +38,7 @@ #define MODSEC_VERSION_MAJOR "2" #define MODSEC_VERSION_MINOR "6" -#define MODSEC_VERSION_MAINT "8" +#define MODSEC_VERSION_MAINT "2" #define MODSEC_VERSION_TYPE "" #define MODSEC_VERSION_RELEASE "" | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/msc_reqbody.c ^ |
@@ -400,6 +400,11 @@ stream_input_body = (char *)realloc(msr->stream_input_data, msr->stream_input_length + 1); + if(stream_input_body == NULL) { + free(msr->stream_input_data); + msr->stream_input_data = NULL; + } + msr->stream_input_data = (char *)stream_input_body; } | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/msc_util.c ^ |
@@ -121,9 +121,9 @@ * \retval 0 On failure * \retval string length On Success */ -int decode_base64_ext(char *plain_text, const unsigned char *input, int input_len) +int decode_base64_ext(char *plain_text, const char *input, int input_len) { - const unsigned char *encoded = input; + const char *encoded = input; int i = 0, j = 0, k = 0; int ch = 0; @@ -183,7 +183,8 @@ * * \retval n The converted number */ -int convert_to_int(const char c) { +int convert_to_int(const char c) +{ int n; if ((c>='0') && (c<='9')) n = c - '0'; @@ -223,6 +224,14 @@ msr_log(msr, 9, "Added phrase match to TX.%d: %s", tx_n, log_escape_nq_ex(msr->mp, s->value, s->value_len)); } + + /* + for(i = 0; i <= 9; i++) { + char buf[2]; + apr_snprintf(buf, sizeof(buf), "%d", i); + apr_table_unset(msr->tx_vars, buf); + } + */ } return 0; @@ -410,48 +419,28 @@ /** * */ -int sql_hex2bytes_inplace(unsigned char *data, int len) { - unsigned char *d, *begin = data; - - if ((data == NULL)||(len == 0)) return 0; - - for( d = data; *data; *d++ = *data++) { - if ( *data != '0' ) continue; - if ( tolower(*++data) != 'x' ) { - data--; - continue; - } - - data++; - - // Do we need to keep "0x" if no hexa after? - if ( !VALID_HEX(data[0]) || !VALID_HEX(data[1]) ) { - data-=2; - continue; - } - - while ( VALID_HEX(data[0]) && VALID_HEX(data[1]) ) { - *d++ = x2c(data); - data += 2; - } - } - - *d = '\0'; - return strlen((char *)begin); -} - -/** - * - * - */ int hex2bytes_inplace(unsigned char *data, int len) { unsigned char *d = data; + char print = 0; int i, count = 0; if ((data == NULL)||(len == 0)) return 0; - for(i = 0; i <= len - 2; i += 2) { - *d++ = x2c(&data[i]); + for(i = 0; i <= len - 1; i++) { + if(VALID_HEX(data[i]) && VALID_HEX(data[i+1])) { + print = data[i]; + if(print > 0x31 && print < 0x38) { + *d++ = x2c(&data[i]); + i++; + } else { + *d++ = data[i]; + *d++ = data[i+1]; + i++; + count++; + } + } else { + *d++ = data[i]; + } count++; } *d = '\0'; @@ -611,7 +600,7 @@ apr_strftime(tstr, &len, 80, "%d/%b/%Y:%H:%M:%S ", &t); apr_snprintf(tstr + strlen(tstr), 80 - strlen(tstr), "%c%.2d%.2d", t.tm_gmtoff < 0 ? '-' : '+', - t.tm_gmtoff / (60 * 60), (t.tm_gmtoff / 60) % 60); + t.tm_gmtoff / (60 * 60), t.tm_gmtoff % (60 * 60)); return apr_pstrdup(mp, tstr); } | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/msc_util.h ^ |
@@ -43,8 +43,6 @@ char DSOLOCAL *file_basename(apr_pool_t *p, const char *filename); -int DSOLOCAL sql_hex2bytes_inplace(unsigned char *data, int len); - int DSOLOCAL hex2bytes_inplace(unsigned char *data, int len); char DSOLOCAL *bytes2hex(apr_pool_t *pool, unsigned char *data, int len); @@ -81,7 +79,7 @@ char DSOLOCAL *log_escape_nul(apr_pool_t *mp, const unsigned char *text, unsigned long int text_length); -int DSOLOCAL decode_base64_ext(char *plain_text, const unsigned char *input, int input_len); +int DSOLOCAL decode_base64_ext(char *plain_text, const char *input, int input_len); int DSOLOCAL convert_to_int(const char c); | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/persist_dbm.c ^ |
@@ -110,11 +110,6 @@ dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", col_name, NULL); - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "collection_retrieve_ex: Retrieving collection (name \"%s\", filename \"%s\")",log_escape(msr->mp, col_name), - log_escape(msr->mp, dbm_filename)); - } - key.dptr = (char *)col_key; key.dsize = col_key_len + 1; @@ -355,11 +350,6 @@ // ENH: lowercase the var name in the filename dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", var_name->value, NULL); - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "collection_store: Retrieving collection (name \"%s\", filename \"%s\")",log_escape(msr->mp, var_name->value), - log_escape(msr->mp, dbm_filename)); - } - /* Delete IS_NEW on store. */ apr_table_unset(col, "IS_NEW"); @@ -586,21 +576,13 @@ goto error; } - if(strstr(col_name,"USER") || strstr(col_name,"SESSION")) - dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", msr->txcfg->webappid, "_", col_name, NULL); - else - dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", col_name, NULL); - - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 1, "collections_remove_stale: Retrieving collection (name \"%s\", filename \"%s\")",log_escape(msr->mp, col_name), - log_escape(msr->mp, dbm_filename)); - } + dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", col_name, NULL); rc = apr_sdbm_open(&dbm, dbm_filename, APR_CREATE | APR_WRITE | APR_SHARELOCK, - CREATEMODE, msr->mp); + CREATEMODE, msr->mp); if (rc != APR_SUCCESS) { msr_log(msr, 1, "Failed to access DBM file \"%s\": %s", log_escape(msr->mp, dbm_filename), - get_apr_error(msr->mp, rc)); + get_apr_error(msr->mp, rc)); dbm = NULL; goto error; } | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/re.c ^ |
@@ -32,7 +32,6 @@ NULL, }; -static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *var); static apr_status_t msre_parse_targets(msre_ruleset *ruleset, const char *text, apr_array_header_t *arr, char **error_msg); static char *msre_generate_target_string(apr_pool_t *pool, msre_rule *rule); @@ -44,117 +43,6 @@ /* -- Actions, variables, functions and operator functions ----------------- */ -static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *var) { - const char *targets = NULL, *exceptions = NULL; - char *savedptr = NULL, *target = NULL, *value = NULL; - char *c = NULL, *name = NULL, *id = NULL; - char *variable = NULL, *myvar = NULL; - char *myvalue = NULL, *myname = NULL; - const apr_array_header_t *tarr = NULL; - const apr_table_entry_t *telts = NULL; - int i, match = 0; - - if(msr == NULL) - return 0; - - if(var == NULL) - return 0; - - if(rule == NULL) - return 0; - - if(rule->actionset == NULL) - return 0; - - if(rule->actionset->id !=NULL) { - - myvar = apr_pstrdup(msr->mp, var->name); - - c = strchr(myvar,':'); - - if(c != NULL) { - myname = apr_strtok(myvar,":",&myvalue); - } else { - myname = myvar; - } - - tarr = apr_table_elts(msr->removed_targets); - telts = (const apr_table_entry_t*)tarr->elts; - - match = 0; - for (i = 0; i < tarr->nelts; i++) { - id = (char *)telts[i].key; - - if(strcasecmp(id, rule->actionset->id) == 0) { - exceptions = (char *)telts[i].val; - - targets = apr_pstrdup(msr->mp, exceptions); - - if(targets != NULL) { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "fetch_target_exception: Found exception target list [%s] for rule id %s", targets, rule->actionset->id); - } - - target = apr_strtok((char *)targets, ",", &savedptr); - - while(target != NULL) { - - variable = apr_pstrdup(msr->mp, target); - - c = strchr(variable,':'); - - if(c != NULL) { - name = apr_strtok(variable,":",&value); - } else { - name = variable; - value = NULL; - } - - if((strlen(myname) == strlen(name)) && - (strncasecmp(myname, name,strlen(myname)) == 0)) { - - if(value != NULL && myvalue != NULL) { - if((strlen(myvalue) == strlen(value)) && - strncasecmp(myvalue,value,strlen(myvalue)) == 0) { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "fetch_target_exception: Target %s will not be processed.", target); - } - match = 1; - } - } else if (value == NULL && myvalue == NULL) { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "fetch_target_exception: Target %s will not be processed.", target); - } - match = 1; - } else if (value == NULL && myvalue != NULL) { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "fetch_target_exception: Target %s will not be processed.", target); - } - match = 1; - } - } - - target = apr_strtok(NULL, ",", &savedptr); - } - } else { - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "fetch_target_exception: No exception target found for rule id %s.", rule->actionset->id); - - } - } - - } - - } - - } - - if(match == 1) - return 1; - - return 0; -} - char *update_rule_target(cmd_parms *cmd, directory_config *dcfg, msre_ruleset *rset, const char *p1, const char *p2, const char *p3) { @@ -169,7 +57,7 @@ int name_len = 0, value_len = 0; char *name = NULL, *value = NULL; char *opt = NULL, *param = NULL; - int i, rc, match = 0, var_appended = 0; + int i, rc, match = 0; int offset = 0; if(p1 == NULL || p2 == NULL || (dcfg == NULL && rset == NULL)) { @@ -225,6 +113,9 @@ if(opt != NULL) { name = apr_strtok(param,":",&value); + if(strchr(value,':') != NULL) { + goto end; + } } else { name = param; } @@ -237,25 +128,19 @@ targets = (msre_var **)rule->targets->elts; // TODO need a good way to remove the element from array, maybe change array by tables or rings for (i = 0; i < rule->targets->nelts; i++) { - if((strlen(targets[i]->name) == strlen(name)) && - (strncasecmp(targets[i]->name,name,strlen(targets[i]->name)) == 0) && + if((strncasecmp(targets[i]->name,name,name_len) == 0) && (targets[i]->is_negated == is_negated) && (targets[i]->is_counting == is_counting)) { if(value != NULL && targets[i]->param != NULL) { - if((strlen(targets[i]->param) == strlen(value)) && - strncasecmp(targets[i]->param,value,strlen(targets[i]->param)) == 0) { + if(strncasecmp(targets[i]->param,value,value_len) == 0) { memset(targets[i]->name,0,strlen(targets[i]->name)); memset(targets[i]->param,0,strlen(targets[i]->param)); match = 1; - targets[i]->is_counting = 0; - targets[i]->is_negated = 1; } } else if (value == NULL && targets[i]->param == NULL){ memset(targets[i]->name,0,strlen(targets[i]->name)); match = 1; - targets[i]->is_counting = 0; - targets[i]->is_negated = 1; } else continue; @@ -273,7 +158,6 @@ if (rc < 0) { goto end; } - var_appended = 1; } else { goto end; } @@ -306,6 +190,9 @@ if(opt != NULL) { name = apr_strtok(param,":",&value); + if(strchr(value,':') != NULL) { + goto end; + } } else { name = param; } @@ -315,64 +202,49 @@ if(value != NULL) value_len = strlen(value); - match = 0; - targets = (msre_var **)rule->targets->elts; for (i = 0; i < rule->targets->nelts; i++) { - if((strlen(targets[i]->name) == strlen(name)) && - (strncasecmp(targets[i]->name,name,strlen(targets[i]->name)) == 0) && + if((strncasecmp(targets[i]->name,name,name_len) == 0) && (targets[i]->is_negated == is_negated) && (targets[i]->is_counting == is_counting)) { if(value != NULL && targets[i]->param != NULL) { - if((strlen(targets[i]->param) == strlen(value)) && - strncasecmp(targets[i]->param,value,strlen(targets[i]->param)) == 0) { - match = 1; + if(strncasecmp(targets[i]->param,value,value_len) == 0) { + goto end; } } else if (value == NULL && targets[i]->param == NULL){ - match = 1; + goto end; } else continue; } } - if(target != NULL) { free(target); target = NULL; } - if(match == 0 ) { - rc = msre_parse_targets(ruleset, p, rule->targets, &my_error_msg); - if (rc < 0) { - goto end; - } - var_appended = 1; + + rc = msre_parse_targets(ruleset, p, rule->targets, &my_error_msg); + if (rc < 0) { + goto end; } } p = apr_strtok(NULL,",",&savedptr); } - if(var_appended == 1) { - curr_targets = msre_generate_target_string(ruleset->mp, rule); - rule->unparsed = msre_rule_generate_unparsed(ruleset->mp, rule, curr_targets, NULL, NULL); - rule->p1 = apr_pstrdup(ruleset->mp, curr_targets); - } + curr_targets = msre_generate_target_string(ruleset->mp, rule); + + rule->unparsed = msre_rule_generate_unparsed(ruleset->mp, rule, curr_targets, NULL, NULL); end: - if(target_list != NULL) { + if(target_list != NULL) free(target_list); - target_list = NULL; - } - if(replace != NULL) { + if(replace != NULL) free(replace); - replace = NULL; - } - if(target != NULL) { + if(target != NULL) free(target); - target = NULL; - } return NULL; } @@ -410,13 +282,13 @@ for (i = 0; i < rule->targets->nelts; i++) { if(targets[i]->name != NULL && strlen(targets[i]->name) > 0) { - target_str = apr_pstrcat(pool, - (target_str == NULL) ? "" : apr_psprintf(pool, "%s|", target_str), - (targets[i]->is_negated == 0) ? "" : "!", - (targets[i]->is_counting == 0) ? "" : "&", - (targets[i]->name == NULL) ? "" : targets[i]->name, - (targets[i]->param == NULL) ? "" : apr_psprintf(pool, ":%s", targets[i]->param), - NULL); + target_str = apr_pstrcat(pool, + (target_str == NULL) ? "" : apr_psprintf(pool, "%s|", target_str), + (targets[i]->is_negated == 0) ? "" : "!", + (targets[i]->is_counting == 0) ? "" : "&", + (targets[i]->name == NULL) ? "" : targets[i]->name, + (targets[i]->param == NULL) ? "" : apr_psprintf(pool, ":%s", targets[i]->param), + NULL); } } @@ -448,14 +320,14 @@ if (chain) { /* Skip some actions that are not used in a chain. */ if ( (action->metadata->type == ACTION_DISRUPTIVE) - || (action->metadata->type == ACTION_METADATA) - || (strcmp("log", action->metadata->name) == 0) - || (strcmp("auditlog", action->metadata->name) == 0) - || (strcmp("nolog", action->metadata->name) == 0) - || (strcmp("noauditlog", action->metadata->name) == 0) - || (strcmp("severity", action->metadata->name) == 0) - || (strcmp("tag", action->metadata->name) == 0) - || (strcmp("phase", action->metadata->name) == 0)) + || (action->metadata->type == ACTION_METADATA) + || (strcmp("log", action->metadata->name) == 0) + || (strcmp("auditlog", action->metadata->name) == 0) + || (strcmp("nolog", action->metadata->name) == 0) + || (strcmp("noauditlog", action->metadata->name) == 0) + || (strcmp("severity", action->metadata->name) == 0) + || (strcmp("tag", action->metadata->name) == 0) + || (strcmp("phase", action->metadata->name) == 0)) { continue; } @@ -474,14 +346,14 @@ } actions = apr_pstrcat(pool, - (actions == NULL) ? "" : actions, - (actions == NULL) ? "" : ",", - action->metadata->name, - (action->param == NULL) ? "" : ":", - (use_quotes) ? "'" : "", - (action->param == NULL) ? "" : action->param, - (use_quotes) ? "'" : "", - NULL); + (actions == NULL) ? "" : actions, + (actions == NULL) ? "" : ",", + action->metadata->name, + (action->param == NULL) ? "" : ":", + (use_quotes) ? "'" : "", + (action->param == NULL) ? "" : action->param, + (use_quotes) ? "'" : "", + NULL); } return actions; @@ -525,7 +397,7 @@ * given text string and places them into the supplied table. */ static apr_status_t msre_parse_targets(msre_ruleset *ruleset, const char *text, - apr_array_header_t *arr, char **error_msg) + apr_array_header_t *arr, char **error_msg) { const apr_array_header_t *tarr; const apr_table_entry_t *telts; @@ -561,7 +433,7 @@ * them into the supplied array. */ static apr_status_t msre_parse_actions(msre_engine *engine, msre_actionset *actionset, - const char *text, char **error_msg) + const char *text, char **error_msg) { const apr_array_header_t *tarr; const apr_table_entry_t *telts; @@ -721,7 +593,7 @@ * Creates a new action instance given its name and an (optional) parameter. */ msre_action *msre_create_action(msre_engine *engine, const char *name, const char *param, - char **error_msg) + char **error_msg) { msre_action *action = apr_pcalloc(engine->mp, sizeof(msre_action)); if (action == NULL) return NULL; @@ -739,7 +611,7 @@ if (param == NULL) { /* Parameter not present */ if (action->metadata->argc_min > 0) { *error_msg = apr_psprintf(engine->mp, "Missing mandatory parameter for action %s", - name); + name); return NULL; } } else { /* Parameter present */ @@ -754,7 +626,7 @@ if ((param[0] == '+')||(param[0] == '-')) { if (action->metadata->allow_param_plusminus == 0) { *error_msg = apr_psprintf(engine->mp, - "Action %s does not allow +/- modificators.", name); + "Action %s does not allow +/- modificators.", name); return NULL; } else { /* Modificators allowed. */ @@ -762,10 +634,10 @@ action->param = param + 1; action->param_plusminus = POSITIVE_VALUE; } else - if (param[0] == '-') { - action->param = param + 1; - action->param_plusminus = NEGATIVE_VALUE; - } + if (param[0] == '-') { + action->param = param + 1; + action->param_plusminus = NEGATIVE_VALUE; + } } } else { action->param = param; @@ -787,7 +659,7 @@ * them into the given table. */ int msre_parse_generic(apr_pool_t *mp, const char *text, apr_table_t *vartable, - char **error_msg) + char **error_msg) { char *p = (char *)text; int count = 0; @@ -830,7 +702,7 @@ } *error_msg = apr_psprintf(mp, "Unexpected character at position %d: %s", - (int)(p - text), text); + (int)(p - text), text); return -1; } @@ -865,28 +737,28 @@ for(;;) { if (*p == '\0') { *error_msg = apr_psprintf(mp, "Missing closing quote at position %d: %s", - (int)(p - text), text); + (int)(p - text), text); free(value); return -1; } else - if (*p == '\\') { - if ( (*(p + 1) == '\0') || ((*(p + 1) != '\'')&&(*(p + 1) != '\\')) ) { - *error_msg = apr_psprintf(mp, "Invalid quoted pair at position %d: %s", - (int)(p - text), text); - free(value); - return -1; - } - p++; - *(d++) = *(p++); - } else - if (*p == '\'') { - *d = '\0'; - p++; - break; - } - else { - *(d++) = *(p++); - } + if (*p == '\\') { + if ( (*(p + 1) == '\0') || ((*(p + 1) != '\'')&&(*(p + 1) != '\\')) ) { + *error_msg = apr_psprintf(mp, "Invalid quoted pair at position %d: %s", + (int)(p - text), text); + free(value); + return -1; + } + p++; + *(d++) = *(p++); + } else + if (*p == '\'') { + *d = '\0'; + p++; + break; + } + else { + *(d++) = *(p++); + } } d = value; @@ -917,10 +789,10 @@ * parsing the given string which contains a list of actions. */ msre_actionset *msre_actionset_create(msre_engine *engine, const char *text, - char **error_msg) + char **error_msg) { msre_actionset *actionset = (msre_actionset *)apr_pcalloc(engine->mp, - sizeof(msre_actionset)); + sizeof(msre_actionset)); if (actionset == NULL) return NULL; actionset->actions = apr_table_make(engine->mp, 25); @@ -983,7 +855,7 @@ * Merges two actionsets into one. */ msre_actionset *msre_actionset_merge(msre_engine *engine, msre_actionset *parent, - msre_actionset *child, int inherit_by_default) + msre_actionset *child, int inherit_by_default) { msre_actionset *merged = NULL; const apr_array_header_t *tarr; @@ -1056,8 +928,8 @@ msre_actionset *msre_actionset_create_default(msre_engine *engine) { char *my_error_msg = NULL; return msre_actionset_create(engine, - "phase:2,log,auditlog,pass", - &my_error_msg); + "phase:2,log,auditlog,pass", + &my_error_msg); } /** @@ -1191,10 +1063,10 @@ if (rule->placeholder == RULE_PH_MARKER) continue; msr_log(msr, 1, "Rule %pp [id \"%s\"][file \"%s\"][line \"%d\"]: %u usec", rule, - ((rule->actionset != NULL)&&(rule->actionset->id != NULL)) ? rule->actionset->id : "-", - rule->filename != NULL ? rule->filename : "-", - rule->line_num, - (rule->execution_time / PERFORMANCE_MEASUREMENT_LOOP)); + ((rule->actionset != NULL)&&(rule->actionset->id != NULL)) ? rule->actionset->id : "-", + rule->filename != NULL ? rule->filename : "-", + rule->line_num, + (rule->execution_time / PERFORMANCE_MEASUREMENT_LOOP)); } return rc; @@ -1202,151 +1074,151 @@ static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_rec *msr) { #else - apr_status_t msre_ruleset_process_phase(msre_ruleset *ruleset, modsec_rec *msr) { +apr_status_t msre_ruleset_process_phase(msre_ruleset *ruleset, modsec_rec *msr) { #endif - apr_array_header_t *arr = NULL; - msre_rule **rules; - apr_status_t rc; - const char *skip_after = NULL; - msre_rule *last_rule = NULL; - msre_rule *rule_starter = NULL; - int i, mode, skip, skipped, saw_starter; - - /* First determine which set of rules we need to use. */ - switch (msr->phase) { - case PHASE_REQUEST_HEADERS : - arr = ruleset->phase_request_headers; - break; - case PHASE_REQUEST_BODY : - arr = ruleset->phase_request_body; - break; - case PHASE_RESPONSE_HEADERS : - arr = ruleset->phase_response_headers; - break; - case PHASE_RESPONSE_BODY : - arr = ruleset->phase_response_body; - break; - case PHASE_LOGGING : - arr = ruleset->phase_logging; - break; - default : - msr_log(msr, 1, "Internal Error: Invalid phase %d", msr->phase); - return -1; - } + apr_array_header_t *arr = NULL; + msre_rule **rules; + apr_status_t rc; + const char *skip_after = NULL; + msre_rule *last_rule = NULL; + msre_rule *rule_starter = NULL; + int i, mode, skip, skipped, saw_starter; - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "This phase consists of %d rule(s).", arr->nelts); - } + /* First determine which set of rules we need to use. */ + switch (msr->phase) { + case PHASE_REQUEST_HEADERS : + arr = ruleset->phase_request_headers; + break; + case PHASE_REQUEST_BODY : + arr = ruleset->phase_request_body; + break; + case PHASE_RESPONSE_HEADERS : + arr = ruleset->phase_response_headers; + break; + case PHASE_RESPONSE_BODY : + arr = ruleset->phase_response_body; + break; + case PHASE_LOGGING : + arr = ruleset->phase_logging; + break; + default : + msr_log(msr, 1, "Internal Error: Invalid phase %d", msr->phase); + return -1; + } - apr_table_clear(msr->matched_vars); + if (msr->txcfg->debuglog_level >= 9) { + msr_log(msr, 9, "This phase consists of %d rule(s).", arr->nelts); + } + + apr_table_clear(msr->matched_vars); - /* Loop through the rules in the selected set. */ - skip = 0; - skipped = 0; - saw_starter = 0; - mode = NEXT_RULE; - rules = (msre_rule **)arr->elts; - for (i = 0; i < arr->nelts; i++) { - msre_rule *rule = rules[i]; + /* Loop through the rules in the selected set. */ + skip = 0; + skipped = 0; + saw_starter = 0; + mode = NEXT_RULE; + rules = (msre_rule **)arr->elts; + for (i = 0; i < arr->nelts; i++) { + msre_rule *rule = rules[i]; #if defined(PERFORMANCE_MEASUREMENT) - apr_time_t time1 = 0; + apr_time_t time1 = 0; #endif - /* Reset the rule interception flag */ - msr->rule_was_intercepted = 0; + /* Reset the rule interception flag */ + msr->rule_was_intercepted = 0; - /* SKIP_RULES is used to skip all rules until we hit a placeholder - * with the specified rule ID and then resume execution after that. - */ - if (mode == SKIP_RULES) { - /* Go to the next rule if we have not yet hit the skip_after ID */ + /* SKIP_RULES is used to skip all rules until we hit a placeholder + * with the specified rule ID and then resume execution after that. + */ + if (mode == SKIP_RULES) { + /* Go to the next rule if we have not yet hit the skip_after ID */ - if ((rule->placeholder == RULE_PH_NONE) || (rule->actionset->id == NULL) || (strcmp(skip_after, rule->actionset->id) != 0)) { + if ((rule->placeholder == RULE_PH_NONE) || (rule->actionset->id == NULL) || (strcmp(skip_after, rule->actionset->id) != 0)) { - if(i-1 >=0) - last_rule = rules[i-1]; - else - last_rule = rules[0]; - - if((last_rule != NULL) && (last_rule->actionset != NULL) && last_rule->actionset->is_chained && (saw_starter == 1)) { - mode = NEXT_RULE; - skipped = 1; - --i; - } else { - mode = SKIP_RULES; - skipped = 0; - saw_starter = 0; + if(i-1 >=0) + last_rule = rules[i-1]; + else + last_rule = rules[0]; - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "Current rule is id=\"%s\" [chained %d] is trying to find the SecMarker=\"%s\" [stater %d]",rule->actionset->id,last_rule->actionset->is_chained,skip_after,saw_starter); - } + if((last_rule != NULL) && (last_rule->actionset != NULL) && last_rule->actionset->is_chained && (saw_starter == 1)) { + mode = NEXT_RULE; + skipped = 1; + --i; + } else { + mode = SKIP_RULES; + skipped = 0; + saw_starter = 0; + if (msr->txcfg->debuglog_level >= 9) { + msr_log(msr, 9, "Current rule is id=\"%s\" [chained %d] is trying to find the SecMarker=\"%s\" [stater %d]",rule->actionset->id,last_rule->actionset->is_chained,skip_after,saw_starter); } - continue; - } - - if (msr->txcfg->debuglog_level >= 9) { - msr_log(msr, 9, "Found rule %pp id=\"%s\".", rule, skip_after); - } - - /* Go to the rule *after* this one to continue execution. */ - if (msr->txcfg->debuglog_level >= 4) { - msr_log(msr, 4, "Continuing execution after rule id=\"%s\".", skip_after); } - saw_starter = 0; - skipped = 0; - skip_after = NULL; - mode = NEXT_RULE; - apr_table_clear(msr->matched_vars); continue; } - /* Skip any rule marked as a placeholder */ - if (rule->placeholder != RULE_PH_NONE) { - continue; + if (msr->txcfg->debuglog_level >= 9) { + msr_log(msr, 9, "Found rule %pp id=\"%s\".", rule, skip_after); } - /* NEXT_CHAIN is used when one of the rules in a chain - * fails to match and then we need to skip the remaining - * rules in that chain in order to get to the next - * rule that can execute. - */ - if (mode == NEXT_CHAIN) { - if (rule->actionset->is_chained == 0) { - mode = NEXT_RULE; - } - - /* Go to the next rule. */ - apr_table_clear(msr->matched_vars); - continue; + /* Go to the rule *after* this one to continue execution. */ + if (msr->txcfg->debuglog_level >= 4) { + msr_log(msr, 4, "Continuing execution after rule id=\"%s\".", skip_after); } - /* If we are here that means the mode is NEXT_RULE, which - * then means we have done processing any chains. However, - * if the "skip" parameter is set we need to skip over. - */ - if ((mode == NEXT_RULE)&&(skip > 0)) { - /* Decrement the skip counter by one. */ - skip--; + saw_starter = 0; + skipped = 0; + skip_after = NULL; + mode = NEXT_RULE; + apr_table_clear(msr->matched_vars); + continue; + } - /* If the current rule is part of a chain then - * we need to skip over the entire chain. Thus - * we change the mode to NEXT_CHAIN. The skip - * counter will not decrement as we are moving - * over the rules belonging to the chain. - */ - if (rule->actionset->is_chained) { - mode = NEXT_CHAIN; - } + /* Skip any rule marked as a placeholder */ + if (rule->placeholder != RULE_PH_NONE) { + continue; + } - /* Go to the next rule. */ - apr_table_clear(msr->matched_vars); - continue; + /* NEXT_CHAIN is used when one of the rules in a chain + * fails to match and then we need to skip the remaining + * rules in that chain in order to get to the next + * rule that can execute. + */ + if (mode == NEXT_CHAIN) { + if (rule->actionset->is_chained == 0) { + mode = NEXT_RULE; } - /* Check if this rule was removed at runtime */ + /* Go to the next rule. */ + apr_table_clear(msr->matched_vars); + continue; + } + + /* If we are here that means the mode is NEXT_RULE, which + * then means we have done processing any chains. However, + * if the "skip" parameter is set we need to skip over. + */ + if ((mode == NEXT_RULE)&&(skip > 0)) { + /* Decrement the skip counter by one. */ + skip--; + + /* If the current rule is part of a chain then + * we need to skip over the entire chain. Thus + * we change the mode to NEXT_CHAIN. The skip + * counter will not decrement as we are moving + * over the rules belonging to the chain. + */ + if (rule->actionset->is_chained) { + mode = NEXT_CHAIN; + } + + /* Go to the next rule. */ + apr_table_clear(msr->matched_vars); + continue; + } + + /* Check if this rule was removed at runtime */ if (((rule->actionset->id !=NULL) && !apr_is_empty_array(msr->removed_rules)) || (apr_is_empty_array(msr->removed_rules_tag)==0)) { int j, act; int do_process = 1; @@ -1910,9 +1782,8 @@ var->value_len = strlen(actionset->logdata); expand_macros(msr, var, NULL, msr->mp); - logdata = apr_psprintf(msr->mp, " [data \"%s", + logdata = apr_psprintf(msr->mp, " [data \"%s\"]", log_escape_hex(msr->mp, (unsigned char *)var->value, var->value_len)); - logdata = apr_pstrcat(msr->mp, logdata, "\"]", NULL); /* If it is > 512 bytes, then truncate at 512 with ellipsis. * NOTE: 512 actual data + 9 bytes of label = 521 @@ -2273,24 +2144,10 @@ full_varname = var->name; } - rc = fetch_target_exception(rule, msr, var); - - if(rc > 0) { - - if (msr->txcfg->debuglog_level >= 4) { - msr_log(msr, 4, "Executing operator \"%s%s\" with param \"%s\" against %s skipped.", - (rule->op_negated ? "!" : ""), rule->op_name, - log_escape(msr->mp, rule->op_param), full_varname); - } - - return RULE_NO_MATCH; - - } - if (msr->txcfg->debuglog_level >= 4) { msr_log(msr, 4, "Executing operator \"%s%s\" with param \"%s\" against %s.", - (rule->op_negated ? "!" : ""), rule->op_name, - log_escape(msr->mp, rule->op_param), full_varname); + (rule->op_negated ? "!" : ""), rule->op_name, + log_escape(msr->mp, rule->op_param), full_varname); } if (msr->txcfg->debuglog_level >= 9) { @@ -2369,7 +2226,8 @@ mvar->value = apr_pmemdup(msr->mp, var->value, var->value_len); mvar->value_len = var->value_len; - apr_table_addn(msr->matched_vars, parm, (void *)mvar); + apr_table_unset(msr->matched_vars, parm); + apr_table_setn(msr->matched_vars, parm, (void *)mvar); } else { @@ -2379,14 +2237,15 @@ mvar->value = apr_pmemdup(msr->mp, var->value, var->value_len); mvar->value_len = var->value_len; - apr_table_addn(msr->matched_vars, mvar->name, (void *)mvar); + apr_table_unset(msr->matched_vars, mvar->name); + apr_table_setn(msr->matched_vars, mvar->name, (void *)mvar); } } /* Keep track of the highest severity matched so far */ - if ((acting_actionset->severity > 0) && (acting_actionset->severity < msr->highest_severity) - && !rule->actionset->is_chained) { + if ((acting_actionset->severity > 0) && (acting_actionset->severity < msr->highest_severity)) + { msr->highest_severity = acting_actionset->severity; } | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/re_actions.c ^ |
@@ -819,17 +819,6 @@ return NULL; } else - if (strcasecmp(name, "ruleRemoveTargetById") == 0) { - char *parm = NULL; - char *savedptr = NULL; - - parm = apr_strtok(value,";",&savedptr); - - if(parm == NULL && savedptr == NULL) - return apr_psprintf(engine->mp, "ruleRemoveTargetById must has at least id;target1,targets2...targetN"); - - return NULL; - } else if (strcasecmp(name, "ruleUpdateTargetById") == 0) { char *parm = NULL; char *savedptr = NULL; @@ -1057,23 +1046,6 @@ return 1; } else - if (strcasecmp(name, "ruleRemoveTargetById") == 0) { - msre_rule *updated_rule = NULL; - char *p1 = NULL, *p2 = NULL; - char *savedptr = NULL; - - p1 = apr_strtok(value,";",&savedptr); - - p2 = apr_strtok(NULL,";",&savedptr); - - if (msr->txcfg->debuglog_level >= 4) { - msr_log(msr, 4, "Ctl: ruleRemoveTargetById id=%s targets=%s", p1, p2); - } - - apr_table_addn(msr->removed_targets, p1, (const char *)apr_pstrdup(msr->mp, p2)); - - return 1; - } else if (strcasecmp(name, "ruleUpdateTargetById") == 0) { char *p1 = NULL, *p2 = NULL, *p3 = NULL; char *savedptr = NULL; @@ -1758,7 +1730,7 @@ if (table == NULL) { /* Does not exist yet - create new. */ - + if (msr->txcfg->debuglog_level >= 4) { msr_log(msr, 4, "Creating collection (name \"%s\", key \"%s\").", real_col_name, col_key); @@ -1769,15 +1741,11 @@ /* IMP1 Is the timeout hard-coded to 3600? */ - if(msr->txcfg->debuglog_level >= 4) { - msr_log(msr, 4, "Setting default timeout collection value %d.",msr->txcfg->col_timeout); - } - /* Add default timeout. */ var = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string)); var->name = "__expire_KEY"; var->name_len = strlen(var->name); - var->value = apr_psprintf(msr->mp, "%" APR_TIME_T_FMT, (apr_time_t)(apr_time_sec(msr->request_time) + msr->txcfg->col_timeout)); + var->value = apr_psprintf(msr->mp, "%" APR_TIME_T_FMT, (apr_time_t)(apr_time_sec(msr->request_time) + 3600)); var->value_len = strlen(var->value); apr_table_setn(table, var->name, (void *)var); @@ -1793,7 +1761,7 @@ var = apr_pcalloc(msr->mp, sizeof(msc_string)); var->name = "TIMEOUT"; var->name_len = strlen(var->name); - var->value = apr_psprintf(msr->mp, "%d", msr->txcfg->col_timeout); + var->value = apr_psprintf(msr->mp, "%d", 3600); var->value_len = strlen(var->value); apr_table_setn(table, var->name, (void *)var); @@ -1883,7 +1851,7 @@ /* IMP1 We have a function for this now, parse_name_eq_value? */ s = strstr(data, "="); if (s == NULL) return 0; - col_name = strtolower_inplace((unsigned char *)data); + col_name = strtolower_inplace(data); col_key = s + 1; *s = '\0'; | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/re_operators.c ^ |
@@ -449,54 +449,42 @@ if(msr->stream_output_data != NULL && output_body == 1) { - memset(msr->stream_output_data, 0x0, msr->stream_output_length); - free(msr->stream_output_data); - msr->stream_output_data = NULL; - msr->stream_output_length = 0; + char *stream_output_data = NULL; - msr->stream_output_data = (char *)malloc(size+1); + stream_output_data = (char *)realloc(msr->stream_output_data, size+1); + msr->stream_output_length = size; - if(msr->stream_output_data == NULL) { + if(stream_output_data == NULL) { + free (msr->stream_output_data); + msr->stream_output_data = NULL; return -1; } - msr->stream_output_length = size; - memset(msr->stream_output_data, 0x0, size+1); - - msr->of_stream_changed = 1; - - strncpy(msr->stream_output_data, data, size); - msr->stream_output_data[size] = '\0'; - var->value_len = size; - var->value = msr->stream_output_data; + msr->of_stream_changed = 1; + msr->stream_output_data = (char *)stream_output_data; + if(msr->stream_output_data != NULL) + apr_cpystrn(msr->stream_output_data, data, size); } if(msr->stream_input_data != NULL && input_body == 1) { + char *stream_input_data = NULL; - memset(msr->stream_input_data, 0x0, msr->stream_input_length); - free(msr->stream_input_data); - msr->stream_input_data = NULL; - msr->stream_input_length = 0; - - msr->stream_input_data = (char *)malloc(size+1); + stream_input_data = (char *)realloc(msr->stream_input_data, size+1); + msr->stream_input_length = size; - if(msr->stream_input_data == NULL) { + if(stream_input_data == NULL) { + free (msr->stream_input_data); + msr->stream_input_data = NULL; return -1; } - msr->stream_input_length = size; - memset(msr->stream_input_data, 0x0, size+1); - - msr->if_stream_changed = 1; - - strncpy(msr->stream_input_data, data, size); - msr->stream_input_data[size] = '\0'; - var->value_len = size; - var->value = msr->stream_input_data; - + msr->stream_input_data = (char *)stream_input_data; + if(msr->stream_input_data != NULL) + apr_cpystrn(msr->stream_input_data, data, size); + msr->if_stream_changed = 1; } if (! *error_msg) { @@ -604,12 +592,7 @@ /* Are we supposed to capture subexpressions? */ capture = apr_table_get(rule->actionset->actions, "capture") ? 1 : 0; matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0; - if(!matched_bytes) - matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0; - matched = apr_table_get(rule->actionset->actions, "sanitizeMatched") ? 1 : 0; - if(!matched) - matched = apr_table_get(rule->actionset->actions, "sanitiseMatched") ? 1 : 0; /* Show when the regex captures but "capture" is not set */ if (msr->txcfg->debuglog_level >= 6) { @@ -2270,10 +2253,6 @@ int rc; int is_cc = 0; int offset; - int matched_bytes = 0; - char *qspos = NULL; - const char *parm = NULL; - msc_parm *mparm = NULL; if (error_msg == NULL) return -1; *error_msg = NULL; @@ -2340,10 +2319,6 @@ * and we are done. */ - matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0; - if(!matched_bytes) - matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0; - if (apr_table_get(rule->actionset->actions, "capture")) { for(; i < rc; i++) { msc_string *s = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string)); @@ -2360,30 +2335,6 @@ msr_log(msr, 9, "Added regex subexpression to TX.%d: %s", i, log_escape_nq_ex(msr->mp, s->value, s->value_len)); } - - if((matched_bytes == 1) && (var != NULL) && (var->name != NULL)) { - qspos = apr_psprintf(msr->mp, "%s", var->name); - parm = strstr(qspos, ":"); - if (parm != NULL) { - parm++; - mparm = apr_palloc(msr->mp, sizeof(msc_parm)); - if (mparm == NULL) - continue; - - mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len); - mparm->pad_1 = rule->actionset->arg_min; - mparm->pad_2 = rule->actionset->arg_max; - apr_table_addn(msr->pattern_to_sanitize, parm, (void *)mparm); - } else { - mparm = apr_palloc(msr->mp, sizeof(msc_parm)); - if (mparm == NULL) - continue; - - mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len); - apr_table_addn(msr->pattern_to_sanitize, qspos, (void *)mparm); - } - } - } } @@ -2551,11 +2502,6 @@ int rc; int is_cpf = 0; int offset; - int matched_bytes = 0; - char *qspos = NULL; - const char *parm = NULL; - msc_parm *mparm = NULL; - if (error_msg == NULL) return -1; *error_msg = NULL; @@ -2622,10 +2568,6 @@ * and we are done. */ - matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0; - if(!matched_bytes) - matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0; - if (apr_table_get(rule->actionset->actions, "capture")) { for(; i < rc; i++) { msc_string *s = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string)); @@ -2642,30 +2584,6 @@ msr_log(msr, 9, "Added regex subexpression to TX.%d: %s", i, log_escape_nq_ex(msr->mp, s->value, s->value_len)); } - - if((matched_bytes == 1) && (var != NULL) && (var->name != NULL)) { - qspos = apr_psprintf(msr->mp, "%s", var->name); - parm = strstr(qspos, ":"); - if (parm != NULL) { - parm++; - mparm = apr_palloc(msr->mp, sizeof(msc_parm)); - if (mparm == NULL) - continue; - - mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len); - mparm->pad_1 = rule->actionset->arg_min; - mparm->pad_2 = rule->actionset->arg_max; - apr_table_addn(msr->pattern_to_sanitize, parm, (void *)mparm); - } else { - mparm = apr_palloc(msr->mp, sizeof(msc_parm)); - if (mparm == NULL) - continue; - - mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len); - apr_table_addn(msr->pattern_to_sanitize, qspos, (void *)mparm); - } - } - } } @@ -2823,10 +2741,6 @@ int rc; int is_ssn = 0; int offset; - int matched_bytes = 0; - char *qspos = NULL; - const char *parm = NULL; - msc_parm *mparm = NULL; if (error_msg == NULL) return -1; *error_msg = NULL; @@ -2893,10 +2807,6 @@ * and we are done. */ - matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0; - if(!matched_bytes) - matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0; - if (apr_table_get(rule->actionset->actions, "capture")) { for(; i < rc; i++) { msc_string *s = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string)); @@ -2913,30 +2823,6 @@ msr_log(msr, 9, "Added regex subexpression to TX.%d: %s", i, log_escape_nq_ex(msr->mp, s->value, s->value_len)); } - - if((matched_bytes == 1) && (var != NULL) && (var->name != NULL)) { - qspos = apr_psprintf(msr->mp, "%s", var->name); - parm = strstr(qspos, ":"); - if (parm != NULL) { - parm++; - mparm = apr_palloc(msr->mp, sizeof(msc_parm)); - if (mparm == NULL) - continue; - - mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len); - mparm->pad_1 = rule->actionset->arg_min; - mparm->pad_2 = rule->actionset->arg_max; - apr_table_addn(msr->pattern_to_sanitize, parm, (void *)mparm); - } else { - mparm = apr_palloc(msr->mp, sizeof(msc_parm)); - if (mparm == NULL) - continue; - - mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len); - apr_table_addn(msr->pattern_to_sanitize, qspos, (void *)mparm); - } - } - } } | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/re_tfns.c ^ |
@@ -337,15 +337,16 @@ changed = 1; incomment = 1; i += 2; - } else if ((input[i] == '-')&&(i + 1 < input_len)&&(input[i + 1] == '-') - && (incomment == 0)) { + } else if ((input[i] == '-')&&(i + 1 < input_len)&&(input[i + 1] == '-')) { changed = 1; input[i] = ' '; break; - } else if (input[i] == '#' && (incomment == 0)) { + i += 2; + } else if (input[i] == '#') { changed = 1; input[i] = ' '; - break; + break; + i++; } else { input[j] = input[i]; i++; @@ -543,17 +544,6 @@ return 1; } -/* sqlHexDecode */ - -static int msre_fn_sqlHexDecode_execute(apr_pool_t *mptmp, unsigned char *input, - long int input_len, char **rval, long int *rval_len) -{ - *rval_len = sql_hex2bytes_inplace(input, input_len); - *rval = (char *)input; - - return 1; -} - /* hexDecode */ static int msre_fn_hexDecode_execute(apr_pool_t *mptmp, unsigned char *input, @@ -735,7 +725,7 @@ { *rval_len = input_len; *rval = apr_palloc(mptmp, *rval_len); - *rval_len = decode_base64_ext(*rval, (const unsigned char *)input, input_len); + *rval_len = decode_base64_ext(*rval, (const char *)input, input_len); return *rval_len ? 1 : 0; } @@ -807,12 +797,6 @@ msre_fn_escapeSeqDecode_execute ); - /* sqlHexDecode */ - msre_engine_tfn_register(engine, - "sqlHexDecode", - msre_fn_sqlHexDecode_execute - ); - /* hexDecode */ msre_engine_tfn_register(engine, "hexDecode", | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/apache2/re_variables.c ^ |
@@ -1888,7 +1888,7 @@ else rvar->is_negated = 1; - apr_table_addn(vartab, rvar->name, (void *)rvar); + apr_table_setn(vartab, rvar->name, (void *)rvar); if (msr->txcfg->debuglog_level >= 9) { msr_log(msr, 9, "Set variable \"%s\" value \"%s\" size %d to collection.", rvar->name, rvar->value, rvar->value_len); @@ -1948,7 +1948,7 @@ else rvar->is_negated = 1; - apr_table_addn(vartab, rvar->name, (void *)rvar); + apr_table_setn(vartab, rvar->name, (void *)rvar); if (msr->txcfg->debuglog_level >= 9) { msr_log(msr, 9, "Set variable \"%s\" value \"%s\" size %d to collection.", rvar->name, rvar->value, rvar->value_len); | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/configure ^ |
@@ -12294,21 +12294,13 @@ freebsdos=true ;; *-*-netbsd*) - echo "Checking plataform... Identified as NetBSD" + echo "Checking plataform... Identified as FreeBSD" netbsdos=true ;; *-*-openbsd*) - echo "Checking plataform... Identified as OpenBSD" + echo "Checking plataform... Identified as FreeBSD" openbsdos=true ;; - *-*-kfreebsd*) - echo "Checking plataform... Identified as kFreeBSD, treating as linux" - linuxos=true - ;; - *-*-gnu*.*) - echo "Checking plataform... Identified as HURD, treating as linux" - linuxos=true - ;; *) echo "Unknown CANONICAL_HOST $host" exit @@ -12897,7 +12889,7 @@ fi fi -MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api" +#MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api" APXS_WRAPPER=build/apxs-wrapper APXS_EXTRA_CFLAGS="" | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/configure.ac ^ |
@@ -110,21 +110,13 @@ freebsdos=true ;; *-*-netbsd*) - echo "Checking plataform... Identified as NetBSD" + echo "Checking plataform... Identified as FreeBSD" netbsdos=true ;; *-*-openbsd*) - echo "Checking plataform... Identified as OpenBSD" + echo "Checking plataform... Identified as FreeBSD" openbsdos=true ;; - *-*-kfreebsd*) - echo "Checking plataform... Identified as kFreeBSD, treating as linux" - linuxos=true - ;; - *-*-gnu*.*) - echo "Checking plataform... Identified as HURD, treating as linux" - linuxos=true - ;; *) echo "Unknown CANONICAL_HOST $host" exit @@ -557,7 +549,7 @@ fi fi -MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api" +#MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api" APXS_WRAPPER=build/apxs-wrapper APXS_EXTRA_CFLAGS="" | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/doc/Reference_Manual.html ^ |
@@ -9,30 +9,26 @@ <meta name="generator" content="MediaWiki 1.15.1"> <meta name="robots" content="noindex,follow"> <meta name="keywords" content="Reference Manual"> - <link rel="alternate" type="application/x-wiki" title="Edit" -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit"> - <link rel="edit" title="Edit" -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit"> - <link rel="shortcut icon" href="https://sourceforge.net/favicon.ico"> + <link rel="shortcut icon" href="http://sourceforge.net/favicon.ico"> <link rel="search" type="application/opensearchdescription+xml" -href="https://sourceforge.net/apps/mediawiki/mod-security/opensearch_desc.php" +href="http://sourceforge.net/apps/mediawiki/mod-security/opensearch_desc.php" title="mod-security (en)"> <link rel="alternate" type="application/rss+xml" title="mod-security RSS Feed" -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=rss"> +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=rss"> <link rel="alternate" type="application/atom+xml" title="mod-security Atom Feed" -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=atom"> +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=atom"> <title>SourceForge.net: Reference Manual - mod-security</title> <link rel="stylesheet" href="Reference_Manual_files/commonPrint.css" type="text/css"> - <link rel="stylesheet" href="Reference_Manual_files/index_002.css" + <link rel="stylesheet" href="Reference_Manual_files/index_003.css" type="text/css"> <link rel="stylesheet" href="Reference_Manual_files/index.css" type="text/css"> <link rel="stylesheet" href="Reference_Manual_files/index_004.css" type="text/css"> - <link rel="stylesheet" href="Reference_Manual_files/index_003.css" + <link rel="stylesheet" href="Reference_Manual_files/index_002.css" type="text/css"> <!--[if lt IE 7]><script type="text/javascript" src="/apps/mediawiki/mod-security/skins/common/IEFixes.js?207"></script> <meta http-equiv="imagetoolbar" content="no" /><![endif]--> @@ -45,7 +41,7 @@ var wgScript = "/apps/mediawiki/mod-security/index.php"; var wgVariantArticlePath = false; var wgActionPaths = {}; - var wgServer = "https://sourceforge.net"; + var wgServer = "http://sourceforge.net"; var wgCanonicalNamespace = ""; var wgCanonicalSpecialPageName = false; var wgNamespaceNumber = 0; @@ -54,12 +50,12 @@ var wgAction = "view"; var wgArticleId = "12"; var wgIsArticle = true; - var wgUserName = "Brenosilva"; - var wgUserGroups = ["admin", "editor", "*", "user", "autoconfirmed"]; + var wgUserName = null; + var wgUserGroups = null; var wgUserLanguage = "en"; var wgContentLanguage = "en"; var wgBreakFrames = false; - var wgCurRevisionId = 507; + var wgCurRevisionId = 441; var wgVersion = "1.15.1"; var wgEnableAPI = true; var wgEnableWriteAPI = true; @@ -67,13 +63,11 @@ var wgDigitTransformTable = ["", ""]; var wgRestrictionEdit = []; var wgRestrictionMove = []; - var wgAjaxWatch = {"watchMsg": "Watch", "unwatchMsg": "Unwatch", "watchingMsg": "Watching…", "unwatchingMsg": "Unwatching…"}; /*]]>*/</script> <script type="text/javascript" src="Reference_Manual_files/wikibits.js"><!-- wikibits js --></script> <!-- Head Scripts --> <script type="text/javascript" src="Reference_Manual_files/ajax.js"></script> - <script type="text/javascript" src="Reference_Manual_files/ajaxwatch.js"></script> <script type="text/javascript" src="Reference_Manual_files/index.php"><!-- site js --></script> @@ -100,9 +94,9 @@ class="tocnumber">1</span> <span class="toctext">ModSecurity® Reference Manual</span></a> <ul> -<li class="toclevel-2"><a href="#Current_as_of_v2.5.13_v2.6_and_v2.7"><span - class="tocnumber">1.1</span> <span class="toctext">Current as of -v2.5.13 v2.6 and v2.7</span></a> +<li class="toclevel-2"><a href="#Current_as_of_v2.5.13_and_v2.6"><span +class="tocnumber">1.1</span> <span class="toctext">Current as of v2.5.13 + and v2.6</span></a> <ul> <li class="toclevel-3"><a href="#Copyright_.C2.A9_2004-2011_Trustwave_Holdings.2C_Inc."><span @@ -250,116 +244,96 @@ class="tocnumber">6.20</span> <span class="toctext">SecDefaultAction</span></a></li> <li class="toclevel-2"><a href="#SecDisableBackendCompression"><span class="tocnumber">6.21</span> <span class="toctext">SecDisableBackendCompression</span></a></li> -<li class="toclevel-2"><a href="#SecEncryptionEngine"><span -class="tocnumber">6.22</span> <span class="toctext">SecEncryptionEngine</span></a></li> -<li class="toclevel-2"><a href="#SecEncryptionKey"><span -class="tocnumber">6.23</span> <span class="toctext">SecEncryptionKey</span></a></li> -<li class="toclevel-2"><a href="#SecEncryptionParam"><span -class="tocnumber">6.24</span> <span class="toctext">SecEncryptionParam</span></a></li> -<li class="toclevel-2"><a href="#SecEncryptionMethodRx"><span -class="tocnumber">6.25</span> <span class="toctext">SecEncryptionMethodRx</span></a></li> -<li class="toclevel-2"><a href="#SecEncryptionMethodPm"><span -class="tocnumber">6.26</span> <span class="toctext">SecEncryptionMethodPm</span></a></li> -<li class="toclevel-2"><a href="#SecGeoLookupDb"><span class="tocnumber">6.27</span> +<li class="toclevel-2"><a href="#SecGeoLookupDb"><span class="tocnumber">6.22</span> <span class="toctext">SecGeoLookupDb</span></a></li> -<li class="toclevel-2"><a href="#SecGsbLookupDb"><span class="tocnumber">6.28</span> +<li class="toclevel-2"><a href="#SecGsbLookupDb"><span class="tocnumber">6.23</span> <span class="toctext">SecGsbLookupDb</span></a></li> -<li class="toclevel-2"><a href="#SecGuardianLog"><span class="tocnumber">6.29</span> +<li class="toclevel-2"><a href="#SecGuardianLog"><span class="tocnumber">6.24</span> <span class="toctext">SecGuardianLog</span></a></li> -<li class="toclevel-2"><a href="#SecHttpBlKey"><span class="tocnumber">6.30</span> +<li class="toclevel-2"><a href="#SecHttpBlKey"><span class="tocnumber">6.25</span> <span class="toctext">SecHttpBlKey</span></a></li> <li class="toclevel-2"><a href="#SecInterceptOnError"><span -class="tocnumber">6.31</span> <span class="toctext">SecInterceptOnError</span></a></li> -<li class="toclevel-2"><a href="#SecMarker"><span class="tocnumber">6.32</span> +class="tocnumber">6.26</span> <span class="toctext">SecInterceptOnError</span></a></li> +<li class="toclevel-2"><a href="#SecMarker"><span class="tocnumber">6.27</span> <span class="toctext">SecMarker</span></a></li> <li class="toclevel-2"><a href="#SecPcreMatchLimit"><span -class="tocnumber">6.33</span> <span class="toctext">SecPcreMatchLimit</span></a></li> +class="tocnumber">6.28</span> <span class="toctext">SecPcreMatchLimit</span></a></li> <li class="toclevel-2"><a href="#SecPcreMatchLimitRecursion"><span -class="tocnumber">6.34</span> <span class="toctext">SecPcreMatchLimitRecursion</span></a></li> -<li class="toclevel-2"><a href="#SecPdfProtect"><span class="tocnumber">6.35</span> +class="tocnumber">6.29</span> <span class="toctext">SecPcreMatchLimitRecursion</span></a></li> +<li class="toclevel-2"><a href="#SecPdfProtect"><span class="tocnumber">6.30</span> <span class="toctext">SecPdfProtect</span></a></li> <li class="toclevel-2"><a href="#SecPdfProtectMethod"><span -class="tocnumber">6.36</span> <span class="toctext">SecPdfProtectMethod</span></a></li> +class="tocnumber">6.31</span> <span class="toctext">SecPdfProtectMethod</span></a></li> <li class="toclevel-2"><a href="#SecPdfProtectSecret"><span -class="tocnumber">6.37</span> <span class="toctext">SecPdfProtectSecret</span></a></li> +class="tocnumber">6.32</span> <span class="toctext">SecPdfProtectSecret</span></a></li> <li class="toclevel-2"><a href="#SecPdfProtectTimeout"><span -class="tocnumber">6.38</span> <span class="toctext">SecPdfProtectTimeout</span></a></li> +class="tocnumber">6.33</span> <span class="toctext">SecPdfProtectTimeout</span></a></li> <li class="toclevel-2"><a href="#SecPdfProtectTokenName"><span -class="tocnumber">6.39</span> <span class="toctext">SecPdfProtectTokenName</span></a></li> +class="tocnumber">6.34</span> <span class="toctext">SecPdfProtectTokenName</span></a></li> <li class="toclevel-2"><a href="#SecReadStateLimit"><span -class="tocnumber">6.40</span> <span class="toctext">SecReadStateLimit</span></a></li> -<li class="toclevel-2"><a href="#SecSensorId"><span class="tocnumber">6.41</span> - <span class="toctext">SecSensorId</span></a></li> +class="tocnumber">6.35</span> <span class="toctext">SecReadStateLimit</span></a></li> <li class="toclevel-2"><a href="#SecWriteStateLimit"><span -class="tocnumber">6.42</span> <span class="toctext">SecWriteStateLimit</span></a></li> +class="tocnumber">6.36</span> <span class="toctext">SecWriteStateLimit</span></a></li> <li class="toclevel-2"><a href="#SecRequestBodyAccess"><span -class="tocnumber">6.43</span> <span class="toctext">SecRequestBodyAccess</span></a></li> +class="tocnumber">6.37</span> <span class="toctext">SecRequestBodyAccess</span></a></li> <li class="toclevel-2"><a href="#SecRequestBodyInMemoryLimit"><span -class="tocnumber">6.44</span> <span class="toctext">SecRequestBodyInMemoryLimit</span></a></li> +class="tocnumber">6.38</span> <span class="toctext">SecRequestBodyInMemoryLimit</span></a></li> <li class="toclevel-2"><a href="#SecRequestBodyLimit"><span -class="tocnumber">6.45</span> <span class="toctext">SecRequestBodyLimit</span></a></li> +class="tocnumber">6.39</span> <span class="toctext">SecRequestBodyLimit</span></a></li> <li class="toclevel-2"><a href="#SecRequestBodyNoFilesLimit"><span -class="tocnumber">6.46</span> <span class="toctext">SecRequestBodyNoFilesLimit</span></a></li> +class="tocnumber">6.40</span> <span class="toctext">SecRequestBodyNoFilesLimit</span></a></li> <li class="toclevel-2"><a href="#SecRequestBodyLimitAction"><span -class="tocnumber">6.47</span> <span class="toctext">SecRequestBodyLimitAction</span></a></li> +class="tocnumber">6.41</span> <span class="toctext">SecRequestBodyLimitAction</span></a></li> <li class="toclevel-2"><a href="#SecResponseBodyLimit"><span -class="tocnumber">6.48</span> <span class="toctext">SecResponseBodyLimit</span></a></li> +class="tocnumber">6.42</span> <span class="toctext">SecResponseBodyLimit</span></a></li> <li class="toclevel-2"><a href="#SecResponseBodyLimitAction"><span -class="tocnumber">6.49</span> <span class="toctext">SecResponseBodyLimitAction</span></a></li> +class="tocnumber">6.43</span> <span class="toctext">SecResponseBodyLimitAction</span></a></li> <li class="toclevel-2"><a href="#SecResponseBodyMimeType"><span -class="tocnumber">6.50</span> <span class="toctext">SecResponseBodyMimeType</span></a></li> +class="tocnumber">6.44</span> <span class="toctext">SecResponseBodyMimeType</span></a></li> <li class="toclevel-2"><a href="#SecResponseBodyMimeTypesClear"><span -class="tocnumber">6.51</span> <span class="toctext">SecResponseBodyMimeTypesClear</span></a></li> +class="tocnumber">6.45</span> <span class="toctext">SecResponseBodyMimeTypesClear</span></a></li> <li class="toclevel-2"><a href="#SecResponseBodyAccess"><span -class="tocnumber">6.52</span> <span class="toctext">SecResponseBodyAccess</span></a></li> -<li class="toclevel-2"><a href="#SecRule"><span class="tocnumber">6.53</span> +class="tocnumber">6.46</span> <span class="toctext">SecResponseBodyAccess</span></a></li> +<li class="toclevel-2"><a href="#SecRule"><span class="tocnumber">6.47</span> <span class="toctext">SecRule</span></a></li> <li class="toclevel-2"><a href="#SecRuleInheritance"><span -class="tocnumber">6.54</span> <span class="toctext">SecRuleInheritance</span></a></li> -<li class="toclevel-2"><a href="#SecRuleEngine"><span class="tocnumber">6.55</span> +class="tocnumber">6.48</span> <span class="toctext">SecRuleInheritance</span></a></li> +<li class="toclevel-2"><a href="#SecRuleEngine"><span class="tocnumber">6.49</span> <span class="toctext">SecRuleEngine</span></a></li> -<li class="toclevel-2"><a href="#SecRulePerfTime"><span -class="tocnumber">6.56</span> <span class="toctext">SecRulePerfTime</span></a></li> <li class="toclevel-2"><a href="#SecRuleRemoveById"><span -class="tocnumber">6.57</span> <span class="toctext">SecRuleRemoveById</span></a></li> +class="tocnumber">6.50</span> <span class="toctext">SecRuleRemoveById</span></a></li> <li class="toclevel-2"><a href="#SecRuleRemoveByMsg"><span -class="tocnumber">6.58</span> <span class="toctext">SecRuleRemoveByMsg</span></a></li> +class="tocnumber">6.51</span> <span class="toctext">SecRuleRemoveByMsg</span></a></li> <li class="toclevel-2"><a href="#SecRuleRemoveByTag"><span -class="tocnumber">6.59</span> <span class="toctext">SecRuleRemoveByTag</span></a></li> -<li class="toclevel-2"><a href="#SecRuleScript"><span class="tocnumber">6.60</span> +class="tocnumber">6.52</span> <span class="toctext">SecRuleRemoveByTag</span></a></li> +<li class="toclevel-2"><a href="#SecRuleScript"><span class="tocnumber">6.53</span> <span class="toctext">SecRuleScript</span></a></li> <li class="toclevel-2"><a href="#SecRuleUpdateActionById"><span -class="tocnumber">6.61</span> <span class="toctext">SecRuleUpdateActionById</span></a></li> +class="tocnumber">6.54</span> <span class="toctext">SecRuleUpdateActionById</span></a></li> <li class="toclevel-2"><a href="#SecRuleUpdateTargetById"><span -class="tocnumber">6.62</span> <span class="toctext">SecRuleUpdateTargetById</span></a></li> -<li class="toclevel-2"><a href="#SecRuleUpdateTargetByMsg"><span -class="tocnumber">6.63</span> <span class="toctext">SecRuleUpdateTargetByMsg</span></a></li> -<li class="toclevel-2"><a href="#SecRuleUpdateTargetByTag"><span -class="tocnumber">6.64</span> <span class="toctext">SecRuleUpdateTargetByTag</span></a></li> +class="tocnumber">6.55</span> <span class="toctext">SecRuleUpdateTargetById</span></a></li> <li class="toclevel-2"><a href="#SecServerSignature"><span -class="tocnumber">6.65</span> <span class="toctext">SecServerSignature</span></a></li> +class="tocnumber">6.56</span> <span class="toctext">SecServerSignature</span></a></li> <li class="toclevel-2"><a href="#SecStreamInBodyInspection"><span -class="tocnumber">6.66</span> <span class="toctext">SecStreamInBodyInspection</span></a></li> +class="tocnumber">6.57</span> <span class="toctext">SecStreamInBodyInspection</span></a></li> <li class="toclevel-2"><a href="#SecStreamOutBodyInspection"><span -class="tocnumber">6.67</span> <span class="toctext">SecStreamOutBodyInspection</span></a></li> -<li class="toclevel-2"><a href="#SecTmpDir"><span class="tocnumber">6.68</span> +class="tocnumber">6.58</span> <span class="toctext">SecStreamOutBodyInspection</span></a></li> +<li class="toclevel-2"><a href="#SecTmpDir"><span class="tocnumber">6.59</span> <span class="toctext">SecTmpDir</span></a></li> <li class="toclevel-2"><a href="#SecUnicodeMapFile"><span -class="tocnumber">6.69</span> <span class="toctext">SecUnicodeMapFile</span></a></li> +class="tocnumber">6.60</span> <span class="toctext">SecUnicodeMapFile</span></a></li> <li class="toclevel-2"><a href="#SecUnicodeCodePage"><span -class="tocnumber">6.70</span> <span class="toctext">SecUnicodeCodePage</span></a></li> -<li class="toclevel-2"><a href="#SecUploadDir"><span class="tocnumber">6.71</span> +class="tocnumber">6.61</span> <span class="toctext">SecUnicodeCodePage</span></a></li> +<li class="toclevel-2"><a href="#SecUploadDir"><span class="tocnumber">6.62</span> <span class="toctext">SecUploadDir</span></a></li> <li class="toclevel-2"><a href="#SecUploadFileLimit"><span -class="tocnumber">6.72</span> <span class="toctext">SecUploadFileLimit</span></a></li> +class="tocnumber">6.63</span> <span class="toctext">SecUploadFileLimit</span></a></li> <li class="toclevel-2"><a href="#SecUploadFileMode"><span -class="tocnumber">6.73</span> <span class="toctext">SecUploadFileMode</span></a></li> +class="tocnumber">6.64</span> <span class="toctext">SecUploadFileMode</span></a></li> <li class="toclevel-2"><a href="#SecUploadKeepFiles"><span -class="tocnumber">6.74</span> <span class="toctext">SecUploadKeepFiles</span></a></li> -<li class="toclevel-2"><a href="#SecWebAppId"><span class="tocnumber">6.75</span> +class="tocnumber">6.65</span> <span class="toctext">SecUploadKeepFiles</span></a></li> +<li class="toclevel-2"><a href="#SecWebAppId"><span class="tocnumber">6.66</span> <span class="toctext">SecWebAppId</span></a></li> -<li class="toclevel-2"><a href="#SecCollectionTimeout"><span -class="tocnumber">6.76</span> <span class="toctext">SecCollectionTimeout</span></a></li> </ul> </li> <li class="toclevel-1"><a href="#Processing_Phases"><span @@ -451,131 +425,127 @@ <span class="toctext">PERF_PHASE4</span></a></li> <li class="toclevel-2"><a href="#PERF_PHASE5"><span class="tocnumber">8.35</span> <span class="toctext">PERF_PHASE5</span></a></li> -<li class="toclevel-2"><a href="#PERF_RULES"><span class="tocnumber">8.36</span> - <span class="toctext">PERF_RULES</span></a></li> -<li class="toclevel-2"><a href="#PERF_SREAD"><span class="tocnumber">8.37</span> +<li class="toclevel-2"><a href="#PERF_SREAD"><span class="tocnumber">8.36</span> <span class="toctext">PERF_SREAD</span></a></li> -<li class="toclevel-2"><a href="#PERF_SWRITE"><span class="tocnumber">8.38</span> +<li class="toclevel-2"><a href="#PERF_SWRITE"><span class="tocnumber">8.37</span> <span class="toctext">PERF_SWRITE</span></a></li> -<li class="toclevel-2"><a href="#QUERY_STRING"><span class="tocnumber">8.39</span> +<li class="toclevel-2"><a href="#QUERY_STRING"><span class="tocnumber">8.38</span> <span class="toctext">QUERY_STRING</span></a></li> -<li class="toclevel-2"><a href="#REMOTE_ADDR"><span class="tocnumber">8.40</span> +<li class="toclevel-2"><a href="#REMOTE_ADDR"><span class="tocnumber">8.39</span> <span class="toctext">REMOTE_ADDR</span></a></li> -<li class="toclevel-2"><a href="#REMOTE_HOST"><span class="tocnumber">8.41</span> +<li class="toclevel-2"><a href="#REMOTE_HOST"><span class="tocnumber">8.40</span> <span class="toctext">REMOTE_HOST</span></a></li> -<li class="toclevel-2"><a href="#REMOTE_PORT"><span class="tocnumber">8.42</span> +<li class="toclevel-2"><a href="#REMOTE_PORT"><span class="tocnumber">8.41</span> <span class="toctext">REMOTE_PORT</span></a></li> -<li class="toclevel-2"><a href="#REMOTE_USER"><span class="tocnumber">8.43</span> +<li class="toclevel-2"><a href="#REMOTE_USER"><span class="tocnumber">8.42</span> <span class="toctext">REMOTE_USER</span></a></li> -<li class="toclevel-2"><a href="#REQBODY_ERROR"><span class="tocnumber">8.44</span> +<li class="toclevel-2"><a href="#REQBODY_ERROR"><span class="tocnumber">8.43</span> <span class="toctext">REQBODY_ERROR</span></a></li> <li class="toclevel-2"><a href="#REQBODY_ERROR_MSG"><span -class="tocnumber">8.45</span> <span class="toctext">REQBODY_ERROR_MSG</span></a></li> +class="tocnumber">8.44</span> <span class="toctext">REQBODY_ERROR_MSG</span></a></li> <li class="toclevel-2"><a href="#REQBODY_PROCESSOR"><span -class="tocnumber">8.46</span> <span class="toctext">REQBODY_PROCESSOR</span></a></li> +class="tocnumber">8.45</span> <span class="toctext">REQBODY_PROCESSOR</span></a></li> <li class="toclevel-2"><a href="#REQUEST_BASENAME"><span -class="tocnumber">8.47</span> <span class="toctext">REQUEST_BASENAME</span></a></li> -<li class="toclevel-2"><a href="#REQUEST_BODY"><span class="tocnumber">8.48</span> +class="tocnumber">8.46</span> <span class="toctext">REQUEST_BASENAME</span></a></li> +<li class="toclevel-2"><a href="#REQUEST_BODY"><span class="tocnumber">8.47</span> <span class="toctext">REQUEST_BODY</span></a></li> <li class="toclevel-2"><a href="#REQUEST_BODY_LENGTH"><span -class="tocnumber">8.49</span> <span class="toctext">REQUEST_BODY_LENGTH</span></a></li> +class="tocnumber">8.48</span> <span class="toctext">REQUEST_BODY_LENGTH</span></a></li> <li class="toclevel-2"><a href="#REQUEST_COOKIES"><span -class="tocnumber">8.50</span> <span class="toctext">REQUEST_COOKIES</span></a></li> +class="tocnumber">8.49</span> <span class="toctext">REQUEST_COOKIES</span></a></li> <li class="toclevel-2"><a href="#REQUEST_COOKIES_NAMES"><span -class="tocnumber">8.51</span> <span class="toctext">REQUEST_COOKIES_NAMES</span></a></li> +class="tocnumber">8.50</span> <span class="toctext">REQUEST_COOKIES_NAMES</span></a></li> <li class="toclevel-2"><a href="#REQUEST_FILENAME"><span -class="tocnumber">8.52</span> <span class="toctext">REQUEST_FILENAME</span></a></li> +class="tocnumber">8.51</span> <span class="toctext">REQUEST_FILENAME</span></a></li> <li class="toclevel-2"><a href="#REQUEST_HEADERS"><span -class="tocnumber">8.53</span> <span class="toctext">REQUEST_HEADERS</span></a></li> +class="tocnumber">8.52</span> <span class="toctext">REQUEST_HEADERS</span></a></li> <li class="toclevel-2"><a href="#REQUEST_HEADERS_NAMES"><span -class="tocnumber">8.54</span> <span class="toctext">REQUEST_HEADERS_NAMES</span></a></li> -<li class="toclevel-2"><a href="#REQUEST_LINE"><span class="tocnumber">8.55</span> +class="tocnumber">8.53</span> <span class="toctext">REQUEST_HEADERS_NAMES</span></a></li> +<li class="toclevel-2"><a href="#REQUEST_LINE"><span class="tocnumber">8.54</span> <span class="toctext">REQUEST_LINE</span></a></li> -<li class="toclevel-2"><a href="#REQUEST_METHOD"><span class="tocnumber">8.56</span> +<li class="toclevel-2"><a href="#REQUEST_METHOD"><span class="tocnumber">8.55</span> <span class="toctext">REQUEST_METHOD</span></a></li> <li class="toclevel-2"><a href="#REQUEST_PROTOCOL"><span -class="tocnumber">8.57</span> <span class="toctext">REQUEST_PROTOCOL</span></a></li> -<li class="toclevel-2"><a href="#REQUEST_URI"><span class="tocnumber">8.58</span> +class="tocnumber">8.56</span> <span class="toctext">REQUEST_PROTOCOL</span></a></li> +<li class="toclevel-2"><a href="#REQUEST_URI"><span class="tocnumber">8.57</span> <span class="toctext">REQUEST_URI</span></a></li> <li class="toclevel-2"><a href="#REQUEST_URI_RAW"><span -class="tocnumber">8.59</span> <span class="toctext">REQUEST_URI_RAW</span></a></li> -<li class="toclevel-2"><a href="#RESPONSE_BODY"><span class="tocnumber">8.60</span> +class="tocnumber">8.58</span> <span class="toctext">REQUEST_URI_RAW</span></a></li> +<li class="toclevel-2"><a href="#RESPONSE_BODY"><span class="tocnumber">8.59</span> <span class="toctext">RESPONSE_BODY</span></a></li> <li class="toclevel-2"><a href="#RESPONSE_CONTENT_LENGTH"><span -class="tocnumber">8.61</span> <span class="toctext">RESPONSE_CONTENT_LENGTH</span></a></li> +class="tocnumber">8.60</span> <span class="toctext">RESPONSE_CONTENT_LENGTH</span></a></li> <li class="toclevel-2"><a href="#RESPONSE_CONTENT_TYPE"><span -class="tocnumber">8.62</span> <span class="toctext">RESPONSE_CONTENT_TYPE</span></a></li> +class="tocnumber">8.61</span> <span class="toctext">RESPONSE_CONTENT_TYPE</span></a></li> <li class="toclevel-2"><a href="#RESPONSE_HEADERS"><span -class="tocnumber">8.63</span> <span class="toctext">RESPONSE_HEADERS</span></a></li> +class="tocnumber">8.62</span> <span class="toctext">RESPONSE_HEADERS</span></a></li> <li class="toclevel-2"><a href="#RESPONSE_HEADERS_NAMES"><span -class="tocnumber">8.64</span> <span class="toctext">RESPONSE_HEADERS_NAMES</span></a></li> +class="tocnumber">8.63</span> <span class="toctext">RESPONSE_HEADERS_NAMES</span></a></li> <li class="toclevel-2"><a href="#RESPONSE_PROTOCOL"><span -class="tocnumber">8.65</span> <span class="toctext">RESPONSE_PROTOCOL</span></a></li> +class="tocnumber">8.64</span> <span class="toctext">RESPONSE_PROTOCOL</span></a></li> <li class="toclevel-2"><a href="#RESPONSE_STATUS"><span -class="tocnumber">8.66</span> <span class="toctext">RESPONSE_STATUS</span></a></li> -<li class="toclevel-2"><a href="#RULE"><span class="tocnumber">8.67</span> +class="tocnumber">8.65</span> <span class="toctext">RESPONSE_STATUS</span></a></li> +<li class="toclevel-2"><a href="#RULE"><span class="tocnumber">8.66</span> <span class="toctext">RULE</span></a></li> <li class="toclevel-2"><a href="#SCRIPT_BASENAME"><span -class="tocnumber">8.68</span> <span class="toctext">SCRIPT_BASENAME</span></a></li> +class="tocnumber">8.67</span> <span class="toctext">SCRIPT_BASENAME</span></a></li> <li class="toclevel-2"><a href="#SCRIPT_FILENAME"><span -class="tocnumber">8.69</span> <span class="toctext">SCRIPT_FILENAME</span></a></li> -<li class="toclevel-2"><a href="#SCRIPT_GID"><span class="tocnumber">8.70</span> +class="tocnumber">8.68</span> <span class="toctext">SCRIPT_FILENAME</span></a></li> +<li class="toclevel-2"><a href="#SCRIPT_GID"><span class="tocnumber">8.69</span> <span class="toctext">SCRIPT_GID</span></a></li> <li class="toclevel-2"><a href="#SCRIPT_GROUPNAME"><span -class="tocnumber">8.71</span> <span class="toctext">SCRIPT_GROUPNAME</span></a></li> -<li class="toclevel-2"><a href="#SCRIPT_MODE"><span class="tocnumber">8.72</span> +class="tocnumber">8.70</span> <span class="toctext">SCRIPT_GROUPNAME</span></a></li> +<li class="toclevel-2"><a href="#SCRIPT_MODE"><span class="tocnumber">8.71</span> <span class="toctext">SCRIPT_MODE</span></a></li> -<li class="toclevel-2"><a href="#SCRIPT_UID"><span class="tocnumber">8.73</span> +<li class="toclevel-2"><a href="#SCRIPT_UID"><span class="tocnumber">8.72</span> <span class="toctext">SCRIPT_UID</span></a></li> <li class="toclevel-2"><a href="#SCRIPT_USERNAME"><span -class="tocnumber">8.74</span> <span class="toctext">SCRIPT_USERNAME</span></a></li> -<li class="toclevel-2"><a href="#SERVER_ADDR"><span class="tocnumber">8.75</span> +class="tocnumber">8.73</span> <span class="toctext">SCRIPT_USERNAME</span></a></li> +<li class="toclevel-2"><a href="#SERVER_ADDR"><span class="tocnumber">8.74</span> <span class="toctext">SERVER_ADDR</span></a></li> -<li class="toclevel-2"><a href="#SERVER_NAME"><span class="tocnumber">8.76</span> +<li class="toclevel-2"><a href="#SERVER_NAME"><span class="tocnumber">8.75</span> <span class="toctext">SERVER_NAME</span></a></li> -<li class="toclevel-2"><a href="#SERVER_PORT"><span class="tocnumber">8.77</span> +<li class="toclevel-2"><a href="#SERVER_PORT"><span class="tocnumber">8.76</span> <span class="toctext">SERVER_PORT</span></a></li> -<li class="toclevel-2"><a href="#SESSION"><span class="tocnumber">8.78</span> +<li class="toclevel-2"><a href="#SESSION"><span class="tocnumber">8.77</span> <span class="toctext">SESSION</span></a></li> -<li class="toclevel-2"><a href="#SESSIONID"><span class="tocnumber">8.79</span> +<li class="toclevel-2"><a href="#SESSIONID"><span class="tocnumber">8.78</span> <span class="toctext">SESSIONID</span></a></li> <li class="toclevel-2"><a href="#STREAM_INPUT_BODY"><span -class="tocnumber">8.80</span> <span class="toctext">STREAM_INPUT_BODY</span></a></li> +class="tocnumber">8.79</span> <span class="toctext">STREAM_INPUT_BODY</span></a></li> <li class="toclevel-2"><a href="#STREAM_OUTPUT_BODY"><span -class="tocnumber">8.81</span> <span class="toctext">STREAM_OUTPUT_BODY</span></a></li> -<li class="toclevel-2"><a href="#TIME"><span class="tocnumber">8.82</span> +class="tocnumber">8.80</span> <span class="toctext">STREAM_OUTPUT_BODY</span></a></li> +<li class="toclevel-2"><a href="#TIME"><span class="tocnumber">8.81</span> <span class="toctext">TIME</span></a></li> -<li class="toclevel-2"><a href="#TIME_DAY"><span class="tocnumber">8.83</span> +<li class="toclevel-2"><a href="#TIME_DAY"><span class="tocnumber">8.82</span> <span class="toctext">TIME_DAY</span></a></li> -<li class="toclevel-2"><a href="#TIME_EPOCH"><span class="tocnumber">8.84</span> +<li class="toclevel-2"><a href="#TIME_EPOCH"><span class="tocnumber">8.83</span> <span class="toctext">TIME_EPOCH</span></a></li> -<li class="toclevel-2"><a href="#TIME_HOUR"><span class="tocnumber">8.85</span> +<li class="toclevel-2"><a href="#TIME_HOUR"><span class="tocnumber">8.84</span> <span class="toctext">TIME_HOUR</span></a></li> -<li class="toclevel-2"><a href="#TIME_MIN"><span class="tocnumber">8.86</span> +<li class="toclevel-2"><a href="#TIME_MIN"><span class="tocnumber">8.85</span> <span class="toctext">TIME_MIN</span></a></li> -<li class="toclevel-2"><a href="#TIME_MON"><span class="tocnumber">8.87</span> +<li class="toclevel-2"><a href="#TIME_MON"><span class="tocnumber">8.86</span> <span class="toctext">TIME_MON</span></a></li> -<li class="toclevel-2"><a href="#TIME_SEC"><span class="tocnumber">8.88</span> +<li class="toclevel-2"><a href="#TIME_SEC"><span class="tocnumber">8.87</span> <span class="toctext">TIME_SEC</span></a></li> -<li class="toclevel-2"><a href="#TIME_WDAY"><span class="tocnumber">8.89</span> +<li class="toclevel-2"><a href="#TIME_WDAY"><span class="tocnumber">8.88</span> <span class="toctext">TIME_WDAY</span></a></li> -<li class="toclevel-2"><a href="#TIME_YEAR"><span class="tocnumber">8.90</span> +<li class="toclevel-2"><a href="#TIME_YEAR"><span class="tocnumber">8.89</span> <span class="toctext">TIME_YEAR</span></a></li> -<li class="toclevel-2"><a href="#TX"><span class="tocnumber">8.91</span> +<li class="toclevel-2"><a href="#TX"><span class="tocnumber">8.90</span> <span class="toctext">TX</span></a></li> -<li class="toclevel-2"><a href="#UNIQUE_ID"><span class="tocnumber">8.92</span> +<li class="toclevel-2"><a href="#UNIQUE_ID"><span class="tocnumber">8.91</span> <span class="toctext">UNIQUE_ID</span></a></li> <li class="toclevel-2"><a href="#URLENCODED_ERROR"><span -class="tocnumber">8.93</span> <span class="toctext">URLENCODED_ERROR</span></a></li> -<li class="toclevel-2"><a href="#USERID"><span class="tocnumber">8.94</span> +class="tocnumber">8.92</span> <span class="toctext">URLENCODED_ERROR</span></a></li> +<li class="toclevel-2"><a href="#USERID"><span class="tocnumber">8.93</span> <span class="toctext">USERID</span></a></li> -<li class="toclevel-2"><a href="#USERAGENT_IP"><span class="tocnumber">8.95</span> - <span class="toctext">USERAGENT_IP</span></a></li> -<li class="toclevel-2"><a href="#WEBAPPID"><span class="tocnumber">8.96</span> +<li class="toclevel-2"><a href="#WEBAPPID"><span class="tocnumber">8.94</span> <span class="toctext">WEBAPPID</span></a></li> <li class="toclevel-2"><a href="#WEBSERVER_ERROR_LOG"><span -class="tocnumber">8.97</span> <span class="toctext">WEBSERVER_ERROR_LOG</span></a></li> -<li class="toclevel-2"><a href="#XML"><span class="tocnumber">8.98</span> +class="tocnumber">8.95</span> <span class="toctext">WEBSERVER_ERROR_LOG</span></a></li> +<li class="toclevel-2"><a href="#XML"><span class="tocnumber">8.96</span> <span class="toctext">XML</span></a></li> </ul> </li> @@ -585,170 +555,160 @@ <ul> <li class="toclevel-2"><a href="#base64Decode"><span class="tocnumber">9.1</span> <span class="toctext">base64Decode</span></a></li> -<li class="toclevel-2"><a href="#sqlHexDecode"><span class="tocnumber">9.2</span> - <span class="toctext">sqlHexDecode</span></a></li> <li class="toclevel-2"><a href="#base64DecodeExt"><span -class="tocnumber">9.3</span> <span class="toctext">base64DecodeExt</span></a></li> -<li class="toclevel-2"><a href="#base64Encode"><span class="tocnumber">9.4</span> +class="tocnumber">9.2</span> <span class="toctext">base64DecodeExt</span></a></li> +<li class="toclevel-2"><a href="#base64Encode"><span class="tocnumber">9.3</span> <span class="toctext">base64Encode</span></a></li> -<li class="toclevel-2"><a href="#cmdLine"><span class="tocnumber">9.5</span> +<li class="toclevel-2"><a href="#cmdLine"><span class="tocnumber">9.4</span> <span class="toctext">cmdLine</span></a></li> <li class="toclevel-2"><a href="#compressWhitespace"><span -class="tocnumber">9.6</span> <span class="toctext">compressWhitespace</span></a></li> -<li class="toclevel-2"><a href="#cssDecode"><span class="tocnumber">9.7</span> +class="tocnumber">9.5</span> <span class="toctext">compressWhitespace</span></a></li> +<li class="toclevel-2"><a href="#cssDecode"><span class="tocnumber">9.6</span> <span class="toctext">cssDecode</span></a></li> <li class="toclevel-2"><a href="#escapeSeqDecode"><span -class="tocnumber">9.8</span> <span class="toctext">escapeSeqDecode</span></a></li> -<li class="toclevel-2"><a href="#hexDecode"><span class="tocnumber">9.9</span> +class="tocnumber">9.7</span> <span class="toctext">escapeSeqDecode</span></a></li> +<li class="toclevel-2"><a href="#hexDecode"><span class="tocnumber">9.8</span> <span class="toctext">hexDecode</span></a></li> -<li class="toclevel-2"><a href="#hexEncode"><span class="tocnumber">9.10</span> +<li class="toclevel-2"><a href="#hexEncode"><span class="tocnumber">9.9</span> <span class="toctext">hexEncode</span></a></li> <li class="toclevel-2"><a href="#htmlEntityDecode"><span -class="tocnumber">9.11</span> <span class="toctext">htmlEntityDecode</span></a></li> -<li class="toclevel-2"><a href="#jsDecode"><span class="tocnumber">9.12</span> +class="tocnumber">9.10</span> <span class="toctext">htmlEntityDecode</span></a></li> +<li class="toclevel-2"><a href="#jsDecode"><span class="tocnumber">9.11</span> <span class="toctext">jsDecode</span></a></li> -<li class="toclevel-2"><a href="#length"><span class="tocnumber">9.13</span> +<li class="toclevel-2"><a href="#length"><span class="tocnumber">9.12</span> <span class="toctext">length</span></a></li> -<li class="toclevel-2"><a href="#lowercase"><span class="tocnumber">9.14</span> +<li class="toclevel-2"><a href="#lowercase"><span class="tocnumber">9.13</span> <span class="toctext">lowercase</span></a></li> -<li class="toclevel-2"><a href="#md5"><span class="tocnumber">9.15</span> +<li class="toclevel-2"><a href="#md5"><span class="tocnumber">9.14</span> <span class="toctext">md5</span></a></li> -<li class="toclevel-2"><a href="#none"><span class="tocnumber">9.16</span> +<li class="toclevel-2"><a href="#none"><span class="tocnumber">9.15</span> <span class="toctext">none</span></a></li> -<li class="toclevel-2"><a href="#normalisePath"><span class="tocnumber">9.17</span> +<li class="toclevel-2"><a href="#normalisePath"><span class="tocnumber">9.16</span> <span class="toctext">normalisePath</span></a></li> <li class="toclevel-2"><a href="#normalisePathWin"><span -class="tocnumber">9.18</span> <span class="toctext">normalisePathWin</span></a></li> -<li class="toclevel-2"><a href="#parityEven7bit"><span class="tocnumber">9.19</span> +class="tocnumber">9.17</span> <span class="toctext">normalisePathWin</span></a></li> +<li class="toclevel-2"><a href="#parityEven7bit"><span class="tocnumber">9.18</span> <span class="toctext">parityEven7bit</span></a></li> -<li class="toclevel-2"><a href="#parityOdd7bit"><span class="tocnumber">9.20</span> +<li class="toclevel-2"><a href="#parityOdd7bit"><span class="tocnumber">9.19</span> <span class="toctext">parityOdd7bit</span></a></li> -<li class="toclevel-2"><a href="#parityZero7bit"><span class="tocnumber">9.21</span> +<li class="toclevel-2"><a href="#parityZero7bit"><span class="tocnumber">9.20</span> <span class="toctext">parityZero7bit</span></a></li> -<li class="toclevel-2"><a href="#removeNulls"><span class="tocnumber">9.22</span> +<li class="toclevel-2"><a href="#removeNulls"><span class="tocnumber">9.21</span> <span class="toctext">removeNulls</span></a></li> <li class="toclevel-2"><a href="#removeWhitespace"><span -class="tocnumber">9.23</span> <span class="toctext">removeWhitespace</span></a></li> +class="tocnumber">9.22</span> <span class="toctext">removeWhitespace</span></a></li> <li class="toclevel-2"><a href="#replaceComments"><span -class="tocnumber">9.24</span> <span class="toctext">replaceComments</span></a></li> +class="tocnumber">9.23</span> <span class="toctext">replaceComments</span></a></li> <li class="toclevel-2"><a href="#removeCommentsChar"><span -class="tocnumber">9.25</span> <span class="toctext">removeCommentsChar</span></a></li> -<li class="toclevel-2"><a href="#removeComments"><span class="tocnumber">9.26</span> +class="tocnumber">9.24</span> <span class="toctext">removeCommentsChar</span></a></li> +<li class="toclevel-2"><a href="#removeComments"><span class="tocnumber">9.25</span> <span class="toctext">removeComments</span></a></li> -<li class="toclevel-2"><a href="#replaceNulls"><span class="tocnumber">9.27</span> +<li class="toclevel-2"><a href="#replaceNulls"><span class="tocnumber">9.26</span> <span class="toctext">replaceNulls</span></a></li> -<li class="toclevel-2"><a href="#urlDecode"><span class="tocnumber">9.28</span> +<li class="toclevel-2"><a href="#urlDecode"><span class="tocnumber">9.27</span> <span class="toctext">urlDecode</span></a></li> -<li class="toclevel-2"><a href="#urlDecodeUni"><span class="tocnumber">9.29</span> +<li class="toclevel-2"><a href="#urlDecodeUni"><span class="tocnumber">9.28</span> <span class="toctext">urlDecodeUni</span></a></li> -<li class="toclevel-2"><a href="#urlEncode"><span class="tocnumber">9.30</span> +<li class="toclevel-2"><a href="#urlEncode"><span class="tocnumber">9.29</span> <span class="toctext">urlEncode</span></a></li> -<li class="toclevel-2"><a href="#sha1"><span class="tocnumber">9.31</span> +<li class="toclevel-2"><a href="#sha1"><span class="tocnumber">9.30</span> <span class="toctext">sha1</span></a></li> -<li class="toclevel-2"><a href="#trimLeft"><span class="tocnumber">9.32</span> +<li class="toclevel-2"><a href="#trimLeft"><span class="tocnumber">9.31</span> <span class="toctext">trimLeft</span></a></li> -<li class="toclevel-2"><a href="#trimRight"><span class="tocnumber">9.33</span> +<li class="toclevel-2"><a href="#trimRight"><span class="tocnumber">9.32</span> <span class="toctext">trimRight</span></a></li> -<li class="toclevel-2"><a href="#trim"><span class="tocnumber">9.34</span> +<li class="toclevel-2"><a href="#trim"><span class="tocnumber">9.33</span> <span class="toctext">trim</span></a></li> </ul> </li> <li class="toclevel-1"><a href="#Actions"><span class="tocnumber">10</span> <span class="toctext">Actions</span></a> <ul> -<li class="toclevel-2"><a href="#accuracy"><span class="tocnumber">10.1</span> - <span class="toctext">accuracy</span></a></li> -<li class="toclevel-2"><a href="#allow"><span class="tocnumber">10.2</span> +<li class="toclevel-2"><a href="#allow"><span class="tocnumber">10.1</span> <span class="toctext">allow</span></a></li> -<li class="toclevel-2"><a href="#append"><span class="tocnumber">10.3</span> +<li class="toclevel-2"><a href="#append"><span class="tocnumber">10.2</span> <span class="toctext">append</span></a></li> -<li class="toclevel-2"><a href="#auditlog"><span class="tocnumber">10.4</span> +<li class="toclevel-2"><a href="#auditlog"><span class="tocnumber">10.3</span> <span class="toctext">auditlog</span></a></li> -<li class="toclevel-2"><a href="#block"><span class="tocnumber">10.5</span> +<li class="toclevel-2"><a href="#block"><span class="tocnumber">10.4</span> <span class="toctext">block</span></a></li> -<li class="toclevel-2"><a href="#capture"><span class="tocnumber">10.6</span> +<li class="toclevel-2"><a href="#capture"><span class="tocnumber">10.5</span> <span class="toctext">capture</span></a></li> -<li class="toclevel-2"><a href="#chain"><span class="tocnumber">10.7</span> +<li class="toclevel-2"><a href="#chain"><span class="tocnumber">10.6</span> <span class="toctext">chain</span></a></li> -<li class="toclevel-2"><a href="#ctl"><span class="tocnumber">10.8</span> +<li class="toclevel-2"><a href="#ctl"><span class="tocnumber">10.7</span> <span class="toctext">ctl</span></a></li> -<li class="toclevel-2"><a href="#deny"><span class="tocnumber">10.9</span> +<li class="toclevel-2"><a href="#deny"><span class="tocnumber">10.8</span> <span class="toctext">deny</span></a></li> -<li class="toclevel-2"><a href="#deprecatevar"><span class="tocnumber">10.10</span> +<li class="toclevel-2"><a href="#deprecatevar"><span class="tocnumber">10.9</span> <span class="toctext">deprecatevar</span></a></li> -<li class="toclevel-2"><a href="#drop"><span class="tocnumber">10.11</span> +<li class="toclevel-2"><a href="#drop"><span class="tocnumber">10.10</span> <span class="toctext">drop</span></a></li> -<li class="toclevel-2"><a href="#exec"><span class="tocnumber">10.12</span> +<li class="toclevel-2"><a href="#exec"><span class="tocnumber">10.11</span> <span class="toctext">exec</span></a></li> -<li class="toclevel-2"><a href="#expirevar"><span class="tocnumber">10.13</span> +<li class="toclevel-2"><a href="#expirevar"><span class="tocnumber">10.12</span> <span class="toctext">expirevar</span></a></li> -<li class="toclevel-2"><a href="#id"><span class="tocnumber">10.14</span> +<li class="toclevel-2"><a href="#id"><span class="tocnumber">10.13</span> <span class="toctext">id</span></a></li> -<li class="toclevel-2"><a href="#initcol"><span class="tocnumber">10.15</span> +<li class="toclevel-2"><a href="#initcol"><span class="tocnumber">10.14</span> <span class="toctext">initcol</span></a></li> -<li class="toclevel-2"><a href="#log"><span class="tocnumber">10.16</span> +<li class="toclevel-2"><a href="#log"><span class="tocnumber">10.15</span> <span class="toctext">log</span></a></li> -<li class="toclevel-2"><a href="#logdata"><span class="tocnumber">10.17</span> +<li class="toclevel-2"><a href="#logdata"><span class="tocnumber">10.16</span> <span class="toctext">logdata</span></a></li> -<li class="toclevel-2"><a href="#maturity"><span class="tocnumber">10.18</span> - <span class="toctext">maturity</span></a></li> -<li class="toclevel-2"><a href="#msg"><span class="tocnumber">10.19</span> +<li class="toclevel-2"><a href="#msg"><span class="tocnumber">10.17</span> <span class="toctext">msg</span></a></li> -<li class="toclevel-2"><a href="#multiMatch"><span class="tocnumber">10.20</span> +<li class="toclevel-2"><a href="#multiMatch"><span class="tocnumber">10.18</span> <span class="toctext">multiMatch</span></a></li> -<li class="toclevel-2"><a href="#noauditlog"><span class="tocnumber">10.21</span> +<li class="toclevel-2"><a href="#noauditlog"><span class="tocnumber">10.19</span> <span class="toctext">noauditlog</span></a></li> -<li class="toclevel-2"><a href="#nolog"><span class="tocnumber">10.22</span> +<li class="toclevel-2"><a href="#nolog"><span class="tocnumber">10.20</span> <span class="toctext">nolog</span></a></li> -<li class="toclevel-2"><a href="#pass"><span class="tocnumber">10.23</span> +<li class="toclevel-2"><a href="#pass"><span class="tocnumber">10.21</span> <span class="toctext">pass</span></a></li> -<li class="toclevel-2"><a href="#pause"><span class="tocnumber">10.24</span> +<li class="toclevel-2"><a href="#pause"><span class="tocnumber">10.22</span> <span class="toctext">pause</span></a></li> -<li class="toclevel-2"><a href="#phase"><span class="tocnumber">10.25</span> +<li class="toclevel-2"><a href="#phase"><span class="tocnumber">10.23</span> <span class="toctext">phase</span></a></li> -<li class="toclevel-2"><a href="#prepend"><span class="tocnumber">10.26</span> +<li class="toclevel-2"><a href="#prepend"><span class="tocnumber">10.24</span> <span class="toctext">prepend</span></a></li> -<li class="toclevel-2"><a href="#proxy"><span class="tocnumber">10.27</span> +<li class="toclevel-2"><a href="#proxy"><span class="tocnumber">10.25</span> <span class="toctext">proxy</span></a></li> -<li class="toclevel-2"><a href="#redirect"><span class="tocnumber">10.28</span> +<li class="toclevel-2"><a href="#redirect"><span class="tocnumber">10.26</span> <span class="toctext">redirect</span></a></li> -<li class="toclevel-2"><a href="#rev"><span class="tocnumber">10.29</span> +<li class="toclevel-2"><a href="#rev"><span class="tocnumber">10.27</span> <span class="toctext">rev</span></a></li> -<li class="toclevel-2"><a href="#sanitiseArg"><span class="tocnumber">10.30</span> +<li class="toclevel-2"><a href="#sanitiseArg"><span class="tocnumber">10.28</span> <span class="toctext">sanitiseArg</span></a></li> <li class="toclevel-2"><a href="#sanitiseMatched"><span -class="tocnumber">10.31</span> <span class="toctext">sanitiseMatched</span></a></li> +class="tocnumber">10.29</span> <span class="toctext">sanitiseMatched</span></a></li> <li class="toclevel-2"><a href="#sanitiseMatchedBytes"><span -class="tocnumber">10.32</span> <span class="toctext">sanitiseMatchedBytes</span></a></li> +class="tocnumber">10.30</span> <span class="toctext">sanitiseMatchedBytes</span></a></li> <li class="toclevel-2"><a href="#sanitiseRequestHeader"><span -class="tocnumber">10.33</span> <span class="toctext">sanitiseRequestHeader</span></a></li> +class="tocnumber">10.31</span> <span class="toctext">sanitiseRequestHeader</span></a></li> <li class="toclevel-2"><a href="#sanitiseResponseHeader"><span -class="tocnumber">10.34</span> <span class="toctext">sanitiseResponseHeader</span></a></li> -<li class="toclevel-2"><a href="#severity"><span class="tocnumber">10.35</span> +class="tocnumber">10.32</span> <span class="toctext">sanitiseResponseHeader</span></a></li> +<li class="toclevel-2"><a href="#severity"><span class="tocnumber">10.33</span> <span class="toctext">severity</span></a></li> -<li class="toclevel-2"><a href="#setuid"><span class="tocnumber">10.36</span> +<li class="toclevel-2"><a href="#setuid"><span class="tocnumber">10.34</span> <span class="toctext">setuid</span></a></li> -<li class="toclevel-2"><a href="#setrsc"><span class="tocnumber">10.37</span> - <span class="toctext">setrsc</span></a></li> -<li class="toclevel-2"><a href="#setsid"><span class="tocnumber">10.38</span> +<li class="toclevel-2"><a href="#setsid"><span class="tocnumber">10.35</span> <span class="toctext">setsid</span></a></li> -<li class="toclevel-2"><a href="#setenv"><span class="tocnumber">10.39</span> +<li class="toclevel-2"><a href="#setenv"><span class="tocnumber">10.36</span> <span class="toctext">setenv</span></a></li> -<li class="toclevel-2"><a href="#setvar"><span class="tocnumber">10.40</span> +<li class="toclevel-2"><a href="#setvar"><span class="tocnumber">10.37</span> <span class="toctext">setvar</span></a></li> -<li class="toclevel-2"><a href="#skip"><span class="tocnumber">10.41</span> +<li class="toclevel-2"><a href="#skip"><span class="tocnumber">10.38</span> <span class="toctext">skip</span></a></li> -<li class="toclevel-2"><a href="#skipAfter"><span class="tocnumber">10.42</span> +<li class="toclevel-2"><a href="#skipAfter"><span class="tocnumber">10.39</span> <span class="toctext">skipAfter</span></a></li> -<li class="toclevel-2"><a href="#status"><span class="tocnumber">10.43</span> +<li class="toclevel-2"><a href="#status"><span class="tocnumber">10.40</span> <span class="toctext">status</span></a></li> -<li class="toclevel-2"><a href="#t"><span class="tocnumber">10.44</span> +<li class="toclevel-2"><a href="#t"><span class="tocnumber">10.41</span> <span class="toctext">t</span></a></li> -<li class="toclevel-2"><a href="#tag"><span class="tocnumber">10.45</span> +<li class="toclevel-2"><a href="#tag"><span class="tocnumber">10.42</span> <span class="toctext">tag</span></a></li> -<li class="toclevel-2"><a href="#ver"><span class="tocnumber">10.46</span> - <span class="toctext">ver</span></a></li> -<li class="toclevel-2"><a href="#xmlns"><span class="tocnumber">10.47</span> +<li class="toclevel-2"><a href="#xmlns"><span class="tocnumber">10.43</span> <span class="toctext">xmlns</span></a></li> </ul> </li> @@ -759,67 +719,59 @@ <span class="toctext">beginsWith</span></a></li> <li class="toclevel-2"><a href="#contains"><span class="tocnumber">11.2</span> <span class="toctext">contains</span></a></li> -<li class="toclevel-2"><a href="#containsWord"><span class="tocnumber">11.3</span> - <span class="toctext">containsWord</span></a></li> -<li class="toclevel-2"><a href="#endsWith"><span class="tocnumber">11.4</span> +<li class="toclevel-2"><a href="#endsWith"><span class="tocnumber">11.3</span> <span class="toctext">endsWith</span></a></li> -<li class="toclevel-2"><a href="#eq"><span class="tocnumber">11.5</span> +<li class="toclevel-2"><a href="#eq"><span class="tocnumber">11.4</span> <span class="toctext">eq</span></a></li> -<li class="toclevel-2"><a href="#ge"><span class="tocnumber">11.6</span> +<li class="toclevel-2"><a href="#ge"><span class="tocnumber">11.5</span> <span class="toctext">ge</span></a></li> -<li class="toclevel-2"><a href="#geoLookup"><span class="tocnumber">11.7</span> +<li class="toclevel-2"><a href="#geoLookup"><span class="tocnumber">11.6</span> <span class="toctext">geoLookup</span></a></li> -<li class="toclevel-2"><a href="#gsbLookup"><span class="tocnumber">11.8</span> +<li class="toclevel-2"><a href="#gsbLookup"><span class="tocnumber">11.7</span> <span class="toctext">gsbLookup</span></a></li> -<li class="toclevel-2"><a href="#gt"><span class="tocnumber">11.9</span> +<li class="toclevel-2"><a href="#gt"><span class="tocnumber">11.8</span> <span class="toctext">gt</span></a></li> -<li class="toclevel-2"><a href="#inspectFile"><span class="tocnumber">11.10</span> +<li class="toclevel-2"><a href="#inspectFile"><span class="tocnumber">11.9</span> <span class="toctext">inspectFile</span></a></li> -<li class="toclevel-2"><a href="#ipMatch"><span class="tocnumber">11.11</span> +<li class="toclevel-2"><a href="#ipMatch"><span class="tocnumber">11.10</span> <span class="toctext">ipMatch</span></a></li> -<li class="toclevel-2"><a href="#ipMatchF"><span class="tocnumber">11.12</span> - <span class="toctext">ipMatchF</span></a></li> -<li class="toclevel-2"><a href="#ipMatchFromFile"><span -class="tocnumber">11.13</span> <span class="toctext">ipMatchFromFile</span></a></li> -<li class="toclevel-2"><a href="#le"><span class="tocnumber">11.14</span> +<li class="toclevel-2"><a href="#le"><span class="tocnumber">11.11</span> <span class="toctext">le</span></a></li> -<li class="toclevel-2"><a href="#lt"><span class="tocnumber">11.15</span> +<li class="toclevel-2"><a href="#lt"><span class="tocnumber">11.12</span> <span class="toctext">lt</span></a></li> -<li class="toclevel-2"><a href="#pm"><span class="tocnumber">11.16</span> +<li class="toclevel-2"><a href="#pm"><span class="tocnumber">11.13</span> <span class="toctext">pm</span></a></li> -<li class="toclevel-2"><a href="#pmf"><span class="tocnumber">11.17</span> +<li class="toclevel-2"><a href="#pmf"><span class="tocnumber">11.14</span> <span class="toctext">pmf</span></a></li> -<li class="toclevel-2"><a href="#pmFromFile"><span class="tocnumber">11.18</span> +<li class="toclevel-2"><a href="#pmFromFile"><span class="tocnumber">11.15</span> <span class="toctext">pmFromFile</span></a></li> -<li class="toclevel-2"><a href="#rbl"><span class="tocnumber">11.19</span> +<li class="toclevel-2"><a href="#rbl"><span class="tocnumber">11.16</span> <span class="toctext">rbl</span></a></li> -<li class="toclevel-2"><a href="#rsub"><span class="tocnumber">11.20</span> +<li class="toclevel-2"><a href="#rsub"><span class="tocnumber">11.17</span> <span class="toctext">rsub</span></a></li> -<li class="toclevel-2"><a href="#rx"><span class="tocnumber">11.21</span> +<li class="toclevel-2"><a href="#rx"><span class="tocnumber">11.18</span> <span class="toctext">rx</span></a></li> -<li class="toclevel-2"><a href="#streq"><span class="tocnumber">11.22</span> +<li class="toclevel-2"><a href="#streq"><span class="tocnumber">11.19</span> <span class="toctext">streq</span></a></li> -<li class="toclevel-2"><a href="#strmatch"><span class="tocnumber">11.23</span> +<li class="toclevel-2"><a href="#strmatch"><span class="tocnumber">11.20</span> <span class="toctext">strmatch</span></a></li> <li class="toclevel-2"><a href="#validateByteRange"><span -class="tocnumber">11.24</span> <span class="toctext">validateByteRange</span></a></li> -<li class="toclevel-2"><a href="#validateDTD"><span class="tocnumber">11.25</span> +class="tocnumber">11.21</span> <span class="toctext">validateByteRange</span></a></li> +<li class="toclevel-2"><a href="#validateDTD"><span class="tocnumber">11.22</span> <span class="toctext">validateDTD</span></a></li> -<li class="toclevel-2"><a href="#validateEncryption"><span -class="tocnumber">11.26</span> <span class="toctext">validateEncryption</span></a></li> -<li class="toclevel-2"><a href="#validateSchema"><span class="tocnumber">11.27</span> +<li class="toclevel-2"><a href="#validateSchema"><span class="tocnumber">11.23</span> <span class="toctext">validateSchema</span></a></li> <li class="toclevel-2"><a href="#validateUrlEncoding"><span -class="tocnumber">11.28</span> <span class="toctext">validateUrlEncoding</span></a></li> +class="tocnumber">11.24</span> <span class="toctext">validateUrlEncoding</span></a></li> <li class="toclevel-2"><a href="#validateUtf8Encoding"><span -class="tocnumber">11.29</span> <span class="toctext">validateUtf8Encoding</span></a></li> -<li class="toclevel-2"><a href="#verifyCC"><span class="tocnumber">11.30</span> +class="tocnumber">11.25</span> <span class="toctext">validateUtf8Encoding</span></a></li> +<li class="toclevel-2"><a href="#verifyCC"><span class="tocnumber">11.26</span> <span class="toctext">verifyCC</span></a></li> -<li class="toclevel-2"><a href="#verifyCPF"><span class="tocnumber">11.31</span> +<li class="toclevel-2"><a href="#verifyCPF"><span class="tocnumber">11.27</span> <span class="toctext">verifyCPF</span></a></li> -<li class="toclevel-2"><a href="#verifySSN"><span class="tocnumber">11.32</span> +<li class="toclevel-2"><a href="#verifySSN"><span class="tocnumber">11.28</span> <span class="toctext">verifySSN</span></a></li> -<li class="toclevel-2"><a href="#within"><span class="tocnumber">11.33</span> +<li class="toclevel-2"><a href="#within"><span class="tocnumber">11.29</span> <span class="toctext">within</span></a></li> </ul> </li> @@ -848,9 +800,9 @@ <a name="ModSecurity.C2.AE_Reference_Manual" id="ModSecurity.C2.AE_Reference_Manual"></a><h1> <span class="mw-headline"> ModSecurity® Reference Manual </span></h1> -<a name="Current_as_of_v2.5.13_v2.6_and_v2.7" -id="Current_as_of_v2.5.13_v2.6_and_v2.7"></a><h2> <span -class="mw-headline"> Current as of v2.5.13 v2.6 and v2.7 </span></h2> +<a name="Current_as_of_v2.5.13_and_v2.6" +id="Current_as_of_v2.5.13_and_v2.6"></a><h2> <span class="mw-headline"> +Current as of v2.5.13 and v2.6 </span></h2> <a name="Copyright_.C2.A9_2004-2011_Trustwave_Holdings.2C_Inc." id="Copyright_.C2.A9_2004-2011_Trustwave_Holdings.2C_Inc."></a><h3> <span class="mw-headline"> Copyright © 2004-2011 <a @@ -1243,18 +1195,6 @@ title="http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf" rel="nofollow">http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf</a> </dd></dl> -<dl><dd> Starting with ModSecurity 2.7.0 there are a few important -configuration options -</dd></dl> -<ol><li><b>--enable-pcre-jit</b> - Enables JIT support from pcre >= -8.20 that can improve regex performance. -</li><li><b>--enable-cache-lua</b> - Enables lua vm caching that can -improve lua script performance. Difference just appears if ModSecurity -must run more than one script per transaction. -</li><li><b>--enable-request-early</b> - On ModSecuricy 2.6 phase one -has been moved to phase 2 hook, if you want to play around it use this -option. -</li></ol> <a name="Configuration_Directives" id="Configuration_Directives"></a><h1> <span class="mw-headline"> Configuration Directives </span></h1> <p>The following section outlines all of the ModSecurity directives. @@ -1301,7 +1241,7 @@ for application/x-www-form- urlencoded content. </p><p><b>Syntax:</b> <code>SecArgumentSeparator character</code> </p><p><b>Default:</b> & -</p><p><b>Scope:</b> Main(< 2.7.0), Any(2.7.0) +</p><p><b>Scope:</b> Main </p><p><b>Version:</b> 2.0.0 </p><p>This directive is needed if a backend web application is using a nonstandard argument separator. Applications are sometimes (very rarely) @@ -1417,7 +1357,6 @@ log directories. </p><p><b>Syntax:</b> <code>SecAuditLogFileMode octal_mode|"default"</code> -</p><p><b>Default:</b> 0600 </p><p><b>Scope:</b> Any </p><p><b>Version:</b> 2.5.10 </p><p><b>Example Usage:</b> <code>SecAuditLogFileMode 00640</code> @@ -1728,7 +1667,7 @@ frontend compression enabled. </p><p><b>Syntax:</b> <code>SecDisableBackendCompression On|Off </code> </p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.6.0 +</p><p><b>Version:</b> Development trunk </p><p><b>Default:</b> Off </p><p>This directive is necessary in reverse proxy mode when the backend servers support response compression, but you wish to inspect @@ -1737,100 +1676,6 @@ directive is not necessary in embedded mode, because ModSecurity performs inspection before response compression takes place. </p> -<a name="SecEncryptionEngine" id="SecEncryptionEngine"></a><h2> <span -class="mw-headline"> SecEncryptionEngine </span></h2> -<p><b>Description:</b> Configures the encryption engine. -</p><p><b>Syntax:</b> <code>SecEncryptionEngine On|Off</code> -</p><p><b>Example Usage:</b> <code>SecEncryptionEngine On </code> -</p><p><b>Scope</b>: Any -</p><p><b>Version:</b> 2.7 -</p><p><b>Default:</b> Off -</p><p>The possible values are: -</p> -<ul><li><b>On</b>: Encryption engine can process the request/response -data. -</li><li><b>Off</b>: Encryption engine will not process any data. -</li></ul> -<dl><dt> Note </dt><dd> Users must enable stream output variables -and content injection. -</dd></dl> -<a name="SecEncryptionKey" id="SecEncryptionKey"></a><h2> <span -class="mw-headline"> SecEncryptionKey </span></h2> -<p><b>Description:</b> Define the key that will be used by HMAC. -</p><p><b>Syntax:</b> <code>SecEncryptionKey rand|TEXT -KeyOnly|SessionID|RemoteIP</code> -</p><p><b>Example Usage:</b> <code>SecEncryptionKey "this_is_my_key" -KeyOnly</code> -</p><p><b>Scope</b>: Any -</p><p><b>Version:</b> 2.7 -</p><p>ModSecurity encryption engine will append, if specified, the -user's session id or remote ip to the key before the MAC operation. If -the first parameter is "rand" then a random key will be generated and -used by the engine. -</p><p><br> -</p> -<a name="SecEncryptionParam" id="SecEncryptionParam"></a><h2> <span -class="mw-headline"> SecEncryptionParam </span></h2> -<p><b>Description:</b> Define the parameter name that will receive the -MAC hash. -</p><p><b>Syntax:</b> <code>SecEncryptionParam TEXT</code> -</p><p><b>Example Usage:</b> <code>SecEncryptionKey "hmac"</code> -</p><p><b>Scope</b>: Any -</p><p><b>Version:</b> 2.7 -</p><p>ModSecurity encryption engine will add a new parameter to -protected HTML elements containing the MAC hash. -</p> -<a name="SecEncryptionMethodRx" id="SecEncryptionMethodRx"></a><h2> <span - class="mw-headline"> SecEncryptionMethodRx </span></h2> -<p><b>Description:</b> Configures what kind of HTML data the encryption -engine should sign based on regular expression. -</p><p><b>Syntax:</b> <code>SecEncryptionMethodRx TYPE REGEX</code> -</p><p><b>Example Usage</b>: <code>SecEncryptionMethodRx HashHref -"product_info|list_product"</code> -</p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.7.0 -</p><p>As a initial support is possible to protect HREF, FRAME, IFRAME -and FORM ACTION html elements as well response Location header when http - redirect code are sent. -</p><p>The possible values for TYPE are: -</p> -<ul><li><b>HashHref</b>: Used to sign href= html elements -</li><li><b>HashFormAction</b>: Used to sign form action= html elements -</li><li><b>HashIframeSrc</b>: Used to sign iframe src= html elements -</li><li><b>HashframeSrc</b>: Used to sign frame src= html elements -</li><li><b>HashLocation</b>: Used to sign Location response header -</li></ul> -<dl><dt> Note </dt><dd> This directive is used to sign the elements - however user must use the @validateEncryption operator to enforce data -integrity. -</dd></dl> -<p><br> -</p> -<a name="SecEncryptionMethodPm" id="SecEncryptionMethodPm"></a><h2> <span - class="mw-headline"> SecEncryptionMethodPm </span></h2> -<p><b>Description:</b> Configures what kind of HTML data the encryption -engine should sign based on string search algoritm. -</p><p><b>Syntax:</b> <code>SecEncryptionMethodRx TYPE "string1 string2 -string3..."</code> -</p><p><b>Example Usage</b>: <code>SecEncryptionMethodRx HashHref -"product_info list_product"</code> -</p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.7.0 -</p><p>As a initial support is possible to protect HREF, FRAME, IFRAME -and FORM ACTION html elements as well response Location header when http - redirect code are sent. -</p><p>The possible values for TYPE are: -</p> -<ul><li><b>HashHref</b>: Used to sign href= html elements -</li><li><b>HashFormAction</b>: Used to sign form action= html elements -</li><li><b>HashIframeSrc</b>: Used to sign iframe src= html elements -</li><li><b>HashframeSrc</b>: Used to sign frame src= html elements -</li><li><b>HashLocation</b>: Used to sign Location response header -</li></ul> -<dl><dt> Note </dt><dd> This directive is used to sign the elements - however user must use the @validateEncryption operator to enforce data -integrity. -</dd></dl> <a name="SecGeoLookupDb" id="SecGeoLookupDb"></a><h2> <span class="mw-headline"> SecGeoLookupDb </span></h2> <p><b>Description</b>: Defines the path to the database that will be @@ -1860,11 +1705,9 @@ autonumber" title="http://code.google.com/apis/safebrowsing/" rel="nofollow">[3]</a>. </p> -<dl><dt> Note </dt><dd> Deprecated in 2.7.0 after Google dev team -decided to not allow the database download anymore. After registering -and obtaining a Safe Browsing API key, you can automatically download -the GSB using a tool like wget (where <i><b>KEY</b></i> is your own API -key): +<dl><dt> Note </dt><dd> After registering and obtaining a Safe +Browsing API key, you can automatically download the GSB using a tool +like wget (where <i><b>KEY</b></i> is your own API key): </dd></dl> <p><code>wget <a href="http://sb.google.com/safebrowsing/update?client=api&apikey=KEY&version=goog-malware-hash:1:-1" @@ -2081,15 +1924,6 @@ title="http://blog.spiderlabs.com/2010/11/advanced-topic-of-the-week-mitigating-slow-http-dos-attacks.html" rel="nofollow">http://blog.spiderlabs.com/2010/11/advanced-topic-of-the-week-mitigating-slow-http-dos-attacks.html</a> </p> -<a name="SecSensorId" id="SecSensorId"></a><h2> <span -class="mw-headline"> SecSensorId </span></h2> -<p><b>Description:</b> Define a sensor ID that will be present into log -part H. -</p><p><b>Syntax:</b> <code>SecSensorId TEXT </code> -</p><p><b>Example Usage</b>: <code>SecSensorId WAFSensor01 </code> -</p><p><b>Scope</b>: Main -</p><p><b>Version</b>: 2.7.0 -</p> <a name="SecWriteStateLimit" id="SecWriteStateLimit"></a><h2> <span class="mw-headline"> SecWriteStateLimit </span></h2> <p><b>Description:</b> Establishes a per-IP address limit of how many @@ -2348,16 +2182,6 @@ </li><li><b>DetectionOnly</b>: process rules but never executes any disruptive actions (block, deny, drop, allow, proxy and redirect) </li></ul> -<a name="SecRulePerfTime" id="SecRulePerfTime"></a><h2> <span -class="mw-headline"> SecRulePerfTime </span></h2> -<p><b>Description:</b> Set a performance threshold for rules. Rules that - spends too much time will be logged into audit log Part H in the format - id=usec. -</p><p><b>Syntax:</b> <code>SecRulePerfTime USECS </code> -</p><p><b>Example Usage:</b> <code>SecRulePerfTime 1000 </code> -</p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.7 -</p> <a name="SecRuleRemoveById" id="SecRuleRemoveById"></a><h2> <span class="mw-headline"> SecRuleRemoveById </span></h2> <p><b>Description:</b> Removes the matching rules from the current @@ -2561,7 +2385,7 @@ </p><p><b>Version:</b> 2.6 </p><p>This directive will append (or replace) variables to the current target list of the specified rule with the targets provided in the -second parameter. Starting with 2.7.0 this feature supports id range. +second parameter. </p><p><b>Explicitly Appending Targets</b> </p><p>This is useful for implementing exceptions where you want to externally update a target list to exclude inspection of specific @@ -2610,107 +2434,6 @@ </p> <pre>SecRule REQUEST_FILENAME "@streq /path/to/file.php" "phase:1,t:none,nolog,pass,ctl:ruleUpdateTargetById=958895;REQUEST_URI;REQUEST_FILENAME" </pre> -<dl><dt> Note </dt><dd> This ctl is deprecated and will be removed -from the code, since we cannot use it per-transaction. -</dd></dl> -<a name="SecRuleUpdateTargetByMsg" id="SecRuleUpdateTargetByMsg"></a><h2> - <span class="mw-headline"> SecRuleUpdateTargetByMsg </span></h2> -<p><b>Description:</b> Updates the target (variable) list of the -specified rule by rule message. -</p><p><b>Syntax:</b> <code>SecRuleUpdateTargetByMsg TEXT -TARGET1[,TARGET2,TARGET3] REPLACED_TARGET</code> -</p><p><b>Example Usage:</b> <code>SecRuleUpdateTargetByMsg "Cross-site -Scripting (XSS) Attack" "!ARGS:foo"</code> -</p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.7 -</p><p>This directive will append (or replace) variables to the current -target list of the specified rule with the targets provided in the -second parameter. -</p><p><b>Explicitly Appending Targets</b> -</p><p>This is useful for implementing exceptions where you want to -externally update a target list to exclude inspection of specific -variable(s). -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}" - -SecRuleUpdateTargetByMsg "System Command Injection" !ARGS:email -</pre> -<p>The effective resulting rule in the previous example will append the -target to the end of the variable list as follows: -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/*|!ARGS:email "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}"" -</pre> -<p><b>Explicitly Replacing Targets</b> -</p><p>You can also entirely replace the target list to something more -appropriate for your environment. For example, lets say you want to -inspect REQUEST_URI instead of REQUEST_FILENAME, you could do this: -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}" - -SecRuleUpdateTargetByMsg "System Command Injection" REQUEST_URI REQUEST_FILENAME -</pre> -<p>The effective resulting rule in the previous example will append the -target to the end of the variable list as follows: -</p> -<pre>SecRule REQUEST_URI|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}"" -</pre> -<a name="SecRuleUpdateTargetByTag" id="SecRuleUpdateTargetByTag"></a><h2> - <span class="mw-headline"> SecRuleUpdateTargetByTag </span></h2> -<p><b>Description:</b> Updates the target (variable) list of the -specified rule by rule tag. -</p><p><b>Syntax:</b> <code>SecRuleUpdateTargetByTag TEXT -TARGET1[,TARGET2,TARGET3] REPLACED_TARGET</code> -</p><p><b>Example Usage:</b> <code>SecRuleUpdateTargetByTag -"WEB_ATTACK/XSS" "!ARGS:foo"</code> -</p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.7 -</p><p>This directive will append (or replace) variables to the current -target list of the specified rule with the targets provided in the -second parameter. -</p><p><b>Explicitly Appending Targets</b> -</p><p>This is useful for implementing exceptions where you want to -externally update a target list to exclude inspection of specific -variable(s). -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}" - -SecRuleUpdateTargetByTag "WASCTC/WASC-31" !ARGS:email -</pre> -<p>The effective resulting rule in the previous example will append the -target to the end of the variable list as follows: -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/*|!ARGS:email "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}"" -</pre> -<p><b>Explicitly Replacing Targets</b> -</p><p>You can also entirely replace the target list to something more -appropriate for your environment. For example, lets say you want to -inspect REQUEST_URI instead of REQUEST_FILENAME, you could do this: -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}" - -SecRuleUpdateTargetByTag "WASCTC/WASC-31" REQUEST_URI REQUEST_FILENAME -</pre> -<p>The effective resulting rule in the previous example will append the -target to the end of the variable list as follows: -</p> -<pre>SecRule REQUEST_URI|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \ - "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=% -{tx.0}"" -</pre> <a name="SecServerSignature" id="SecServerSignature"></a><h2> <span class="mw-headline"> SecServerSignature </span></h2> <p><b>Description:</b> Instructs ModSecurity to change the data @@ -2891,17 +2614,6 @@ in conjunction with the Apache VirtualHost directives. Applications namespace information is also recorded in the audit logs (using the WebApp-Info header of the H part). -</p><p>This directive is used to set collections timeout. For example: -</p> -<pre>SecCollectionTimeout 500</pre> -<a name="SecCollectionTimeout" id="SecCollectionTimeout"></a><h2> <span -class="mw-headline"> SecCollectionTimeout </span></h2> -<p><b>Description:</b> Specifies the collections timeout. Default is -3600 seconds. -</p><p><b>Syntax:</b> <code>SecCollectionTimeout seconds</code> -</p><p><b>Default:</b> 3600 -</p><p><b>Scope:</b> Any -</p><p><b>Version:</b> 2.6.3 </p> <a name="Processing_Phases" id="Processing_Phases"></a><h1> <span class="mw-headline"> Processing Phases </span></h1> @@ -2917,7 +2629,7 @@ <p>Below is a diagram of the standard Apache Request Cycle. In the diagram, the 5 ModSecurity processing phases are shown. </p><p><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=File:Apache_request_cycle-modsecurity.jpg" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=File:Apache_request_cycle-modsecurity.jpg" class="image" title="Apache request cycle-modsecurity.jpg"><img alt="" src="Reference_Manual_files/600px-Apache_request_cycle-modsecurity.jpg" height="459" width="600" border="0"></a> @@ -3108,9 +2820,6 @@ <p>Contains the number of milliseconds elapsed since the beginning of the current transaction. Available starting with 2.6.0. </p> -<dl><dt> Note </dt><dd> Starting with ModSecurity 2.7.0 the time is - microseconds. -</dd></dl> <a name="ENV" id="ENV"></a><h2> <span class="mw-headline"> ENV </span></h2> <p>Collection that provides access to environment variables set by ModSecurity. Requires a single parameter to specify the name of the @@ -3385,12 +3094,6 @@ <p>Contains the time, in microseconds, spent processing phase 5. Available starting with 2.6. </p> -<a name="PERF_RULES" id="PERF_RULES"></a><h2> <span class="mw-headline"> - PERF_RULES </span></h2> -<p>Contains the time of rules, in microseconds. Available starting with -2.7. -</p><p><code>SecRule PERF_RULES "@gt 1000" "id:12345,phase:5"</code> -</p> <a name="PERF_SREAD" id="PERF_SREAD"></a><h2> <span class="mw-headline"> PERF_SREAD </span></h2> <p>Contains the time, in microseconds, spent reading from persistent @@ -3898,12 +3601,6 @@ # Is the current user the administrator? SecRule USERID "admin" </pre> -<a name="USERAGENT_IP" id="USERAGENT_IP"></a><h2> <span -class="mw-headline"> USERAGENT_IP </span></h2> -<p>This variable is created when running modsecurity with apache2.4 and -will contains the client ip address set by mod_remoteip in proxied -connections. -</p> <a name="WEBAPPID" id="WEBAPPID"></a><h2> <span class="mw-headline"> WEBAPPID </span></h2> <p>This variable contains the current application name, which is set in @@ -4025,11 +3722,6 @@ SecRule TX:1 ^(\w+): t:base64Decode,capture,chain SecRule TX:1 ^(admin|root|backup)$ </pre> -<a name="sqlHexDecode" id="sqlHexDecode"></a><h2> <span -class="mw-headline"> sqlHexDecode </span></h2> -<p>Decode sql hex data. Example (0x414243) will be decoded to (ABC). -Available as of 2.6.3 -</p> <a name="base64DecodeExt" id="base64DecodeExt"></a><h2> <span class="mw-headline"> base64DecodeExt </span></h2> <p>Decodes a Base64-encoded string. Unlike base64Decode, this version @@ -4270,7 +3962,7 @@ <dl><dt> Note </dt><dd> <b>Disruptive actions will NOT be executed if the SecRuleEngine is set to DetectionOnly</b>. If you are creating exception/whitelisting rules that use the allow action, you should also -add the ctl:ruleEngine=On action to execute the action. +add the ctl:ruleEngine=DetectionOnly action to execute the action. </dd></dl> <ul><li> <b>Non-disruptive action</b>s - Do something, but that something does not and cannot affect the rule processing flow. Setting a @@ -4287,20 +3979,6 @@ action holds the status that will be used for blocking (if it takes place). </li></ul> -<a name="accuracy" id="accuracy"></a><h2> <span class="mw-headline"> -accuracy </span></h2> -<p><b>Description:</b> Specifies the relative accuracy level of the rule - related to false positives/negatives. The value is a string based on a - numeric scale (1-9 where 9 is very strong and 1 has many false -positives). -</p><p><b>Action Group:</b> Meta-data -</p><p><b>Version:</b> 2.7 -</p><p><b>Example:</b> -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \ - "phase:2,ver:'CRS/2.2.4,accuracy:'9',maturity:'9',capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'% \ -{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}" -</pre> <a name="allow" id="allow"></a><h2> <span class="mw-headline"> allow </span></h2> <p><b>Description:</b> Stops rule processing on a successful match and allows the transaction to proceed. @@ -4496,13 +4174,7 @@ </li><li><b>ruleRemoveById</b> - since this action us triggered at run time, it should be specified <b>before</b> the rule in which it is disabling. -</li><li><b>ruleUpdateTargetById</b> - This is deprecated and will be -removed from the code. Use ruleRemoveTargetById for per-request -exceptions. -</li><li><b>ruleRemoveTargetById</b> -</li><li><b>ruleRemoveByMsg</b> -</li><li><b>encryptionEngine</b> -</li><li><b>encryptionEnforcement</b> +</li><li><b>ruleUpdateTargetById</b> </li></ol> <p>With the exception of the requestBodyProcessor and forceRequestBodyVariable settings, each configuration option corresponds @@ -4611,8 +4283,7 @@ </p> <a name="id" id="id"></a><h2> <span class="mw-headline"> id </span></h2> <p><b>Description</b>: Assigns a unique ID to the rule or chain in which - it appears. Starting with ModSecurity 2.7 this action is mandatory and -must be numeric. + it appears. </p><p><b>Action Group:</b> Meta-data </p><p><b>Example:</b> </p> @@ -4632,22 +4303,14 @@ href="http://projects.otaku42.de/wiki/Scally-Whack" class="external autonumber" title="http://projects.otaku42.de/wiki/Scally-Whack" rel="nofollow">[9]</a> -</li><li>430,000–439,999: reserved for rules published by Flameeyes <a -href="http://www.flameeyes.eu/projects/modsec" class="external -autonumber" title="http://www.flameeyes.eu/projects/modsec" -rel="nofollow">[10]</a> -</li><li>440.000-599,999: unused (available for reservation) -</li><li>600,000-699,999: reserved for use by Akamai <a -href="http://www.akamai.com/html/solutions/waf.html" class="external -autonumber" title="http://www.akamai.com/html/solutions/waf.html" -rel="nofollow">[11]</a> +</li><li>430,000–699,999: unused (available for reservation) </li><li>700,000–799,999: reserved for Ivan Ristic </li><li>900,000–999,999: reserved for the OWASP ModSecurity Core Rule Set <a href="http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project" class="external autonumber" title="http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project" - rel="nofollow">[12]</a> project + rel="nofollow">[10]</a> project </li><li>1,000,000-1,999,999: unused (available for reservation) </li><li>2,000,000-2,999,999: reserved for rules from Trustwave's SpiderLabs Research team @@ -4693,21 +4356,6 @@ as %{TX.0} or %{MATCHED_VAR}. The information is properly escaped for use with logging of binary data. </p> -<a name="maturity" id="maturity"></a><h2> <span class="mw-headline"> -maturity </span></h2> -<p><b>Description:</b> Specifies the relative maturity level of the rule - related to the length of time a rule has been public and the amount of -testing it has received. The value is a string based on a numeric scale - (1-9 where 9 is extensively tested and 1 is a brand new experimental -rule). -</p><p><b>Action Group:</b> Meta-data -</p><p><b>Version:</b> 2.7 -</p><p><b>Example:</b> -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \ - "phase:2,ver:'CRS/2.2.4,accuracy:'9',maturity:'9',capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'% \ -{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}" -</pre> <a name="msg" id="msg"></a><h2> <span class="mw-headline"> msg </span></h2> <p><b>Description:</b> Assigns a custom message to the rule or chain in which it appears. The message will be logged along with every alert. @@ -4786,8 +4434,7 @@ </pre> <a name="pause" id="pause"></a><h2> <span class="mw-headline"> pause </span></h2> <p><b>Description:</b> Pauses transaction processing for the specified -number of milliseconds. Starting with ModSecurity 2.7 this feature also -supports macro expansion. +number of milliseconds. </p><p><b>Action Group:</b> Non-disruptive </p><p><b>Example:</b> </p> @@ -4810,17 +4457,6 @@ <pre># Initialize IP address tracking in phase 1 SecAction phase:1,nolog,pass,initcol:IP=%{REMOTE_ADDR} </pre> -<p>Starting in ModSecurity version v2.7 there are aliases for some phase - numbers: -</p> -<ul><li><b>2 - request</b> -</li><li><b>4 - response</b> -</li><li><b>5 - logging</b> -</li></ul> -<p><b>Example:</b> -</p> -<pre>SecRule REQUEST_HEADERS:User-Agent "Test" "phase:request,log,deny" -</pre> <dl><dt> Warning </dt><dd> Keep in mind that if you specify the incorrect phase, the variable used in the rule may not yet be available. This could lead to a false negative situation where your variable and @@ -5027,17 +4663,6 @@ application namespaces (configured using SecWebAppId), and will use one if it is configured. </p> -<a name="setrsc" id="setrsc"></a><h2> <span class="mw-headline"> setrsc </span></h2> -<p><b>Description:</b> Special-purpose action that initializes the -RESOURCE collection using a key provided as parameter. -</p><p><b>Action Group:</b> Non-disruptive -</p><p><b>Example:</b> -</p> -<pre>SecAction "phase:1,pass,id:3,log,setrsc:'abcd1234'" -</pre> -<p>This action understands application namespaces (configured using -SecWebAppId), and will use one if it is configured. -</p> <a name="setsid" id="setsid"></a><h2> <span class="mw-headline"> setsid </span></h2> <p><b>Description:</b> Special-purpose action that initializes the SESSION collection using the session token provided as parameter. @@ -5184,16 +4809,6 @@ slashes to create a hierarchy of categories (as in the example). Since ModSecurity 2.6.0 tag supports macro expansion. </p> -<a name="ver" id="ver"></a><h2> <span class="mw-headline"> ver </span></h2> -<p><b>Description:</b> Specifies the rule set version. -</p><p><b>Action Group:</b> Meta-data -</p><p><b>Version:</b> 2.7 -</p><p><b>Example:</b> -</p> -<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \ - "phase:2,ver:'CRS/2.2.4,capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'% \ -{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}" -</pre> <a name="xmlns" id="xmlns"></a><h2> <span class="mw-headline"> xmlns </span></h2> <p><b>Description:</b> Configures an XML namespace, which will be used in the execution of XPath expressions. @@ -5229,24 +4844,6 @@ <pre># Detect ".php" anywhere in the request line SecRule REQUEST_LINE "@contains .php" </pre> -<a name="containsWord" id="containsWord"></a><h2> <span -class="mw-headline"> containsWord </span></h2> -<p><b>Description:</b> Returns true if the parameter string (with word -boundaries) is found anywhere in the input. Macro expansion is performed - on the parameter string before comparison. -</p><p><b>Example:</b> -</p> -<pre># Detect "select" anywhere in ARGS -SecRule ARGS "@containsWord select" -</pre> -<p>Would match on - <br> --1 union <b>select</b> -BENCHMARK(2142500,MD5(CHAR(115,113,108,109,97,112))) FROM wp_users WHERE - ID=1 and (ascii(substr(user_login,1,1))&0x01=0) from wp_users where - ID=1-- -</p><p>But not on - <br> -Your site has a wide <b>select</b>ion of computers. -</p> <a name="endsWith" id="endsWith"></a><h2> <span class="mw-headline"> endsWith </span></h2> <p><b>Description:</b> Returns true if the parameter string is found at @@ -5349,7 +4946,7 @@ href="http://mod-security.svn.sourceforge.net/viewvc/mod-security/crs/trunk/util/" class="external autonumber" title="http://mod-security.svn.sourceforge.net/viewvc/mod-security/crs/trunk/util/" - rel="nofollow">[13]</a> that allows the file approval mechanism to + rel="nofollow">[11]</a> that allows the file approval mechanism to integrate with the ClamAV virus scanner. This is especially handy to prevent viruses and exploits from entering the web server through file upload. @@ -5447,31 +5044,6 @@ </p> <pre>SecRule REMOTE_ADDR "@ipMatch 192.168.1.100,192.168.1.50,10.10.50.0/24" </pre> -<a name="ipMatchF" id="ipMatchF"></a><h2> <span class="mw-headline"> -ipMatchF </span></h2> -<p>short alias for ipMatchFromFile -</p> -<a name="ipMatchFromFile" id="ipMatchFromFile"></a><h2> <span -class="mw-headline"> ipMatchFromFile </span></h2> -<p><b>Description:</b> Performs a fast ipv4 or ipv6 match of REMOTE_ADDR - variable, loading data from a file. Can handle the following formats: -</p> -<ul><li>Full IPv4 Address - 192.168.1.100 -</li><li>Network Block/CIDR Address - 192.168.1.0/24 -</li><li>Full IPv6 Address - 2001:db8:85a3:8d3:1319:8a2e:370:7348 -</li><li>Network Block/CIDR Address - -2001:db8:85a3:8d3:1319:8a2e:370:0/24 -</li></ul> -<p><b>Examples:</b> -</p> -<pre>SecRule REMOTE_ADDR "@ipMatch ips.txt" -</pre> -<p>The file ips.txt may contain: -</p> -<pre>192.168.0.1 -172.16.0.0/16 -10.0.0.0/8 -</pre> <a name="le" id="le"></a><h2> <span class="mw-headline"> le </span></h2> <p><b>Description:</b> Performs numerical comparison and returns true if the input value is less than or equal to the operator parameter. Macro @@ -5598,9 +5170,7 @@ <a name="rsub" id="rsub"></a><h2> <span class="mw-headline"> rsub </span></h2> <p><b>Description</b>: Performs regular expression data substitution when applied to either the STREAM_INPUT_BODY or STREAM_OUTPUT_BODY -variables. This operator also supports macro expansion. Starting with -ModSecurity 2.7.0 this operator supports the syntax |hex| allowing users - to use special chars like \n \r +variables. This operator also supports macro expansion. </p><p><b>Syntax:</b> <code>@rsub s/regex/str/[id]</code> </p><p><b>Examples:</b> Removing HTML Comments from response bodies: @@ -5614,7 +5184,7 @@ </dd></dl> <p>Regular expressions are handled by the PCRE library <a href="http://www.pcre.org/" class="external autonumber" -title="http://www.pcre.org" rel="nofollow">[14]</a>. ModSecurity +title="http://www.pcre.org" rel="nofollow">[12]</a>. ModSecurity compiles its regular expressions with the following settings: </p> <ol><li>The entire input is treated as a single line, even when there @@ -5652,7 +5222,7 @@ </pre> <p>Regular expressions are handled by the PCRE library <a href="http://www.pcre.org/" class="external autonumber" -title="http://www.pcre.org" rel="nofollow">[15]</a>. ModSecurity +title="http://www.pcre.org" rel="nofollow">[13]</a>. ModSecurity compiles its regular expressions with the following settings: </p> <ol><li>The entire input is treated as a single line, even when there @@ -5749,15 +5319,6 @@ # Validate XML payload against DTD SecRule XML "@validateDTD /path/to/xml.dtd" "phase:2,deny,msg:'Failed DTD validation'" </pre> -<a name="validateEncryption" id="validateEncryption"></a><h2> <span -class="mw-headline"> validateEncryption </span></h2> -<p><b>Description:</b> Validates REQUEST_URI that contains data -protected by the encryption engine. -</p><p><b>Example:</b> -</p> -<pre># Validates requested URI that matches a regular expression. -SecRule REQUEST_URI "@validateEncryption "product_info|product_list" "phase:1,deny,id:123456" -</pre> <a name="validateSchema" id="validateSchema"></a><h2> <span class="mw-headline"> validateSchema </span></h2> <p><b>Description:</b> Validates the XML DOM tree against the supplied @@ -6233,16 +5794,16 @@ <!-- NewPP limit report -Preprocessor node count: 793/1000000 +Preprocessor node count: 718/1000000 Post-expand include size: 0/2097152 bytes Template argument size: 0/2097152 bytes Expensive parser function count: 0/100 --> -<!-- Saved in parser cache with key p_mod-security_mediawiki:pcache:idhash:12-0!1!0!!en!2!printable=1 and timestamp 20120723175510 --> +<!-- Saved in parser cache with key p_mod-security_mediawiki:pcache:idhash:12-0!1!0!!en!2!edit=0!printable=1 and timestamp 20110930150653 --> <div class="printfooter"> Retrieved from "<a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual">https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual</a>"</div> +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual">http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual</a>"</div> <!-- end content --> <div class="visualClear"></div> </div> @@ -6255,30 +5816,18 @@ <ul> <li id="ca-nstab-main" class="selected"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual" title="View the content page [alt-shift-c]" accesskey="c">Page</a></li> <li id="ca-talk" class="new"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Talk:Reference_Manual&action=edit&redlink=1" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Talk:Reference_Manual&action=edit&redlink=1" title="Discussion about the content page [alt-shift-t]" accesskey="t">Discussion</a></li> - <li id="ca-edit"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit" - title="You can edit this page. -Please use the preview button before saving [alt-shift-e]" accesskey="e">Edit</a></li> + <li id="ca-viewsource"><a +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit" + title="This page is protected. +You can view its source [alt-shift-e]" accesskey="e">View source</a></li> <li id="ca-history"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=history" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=history" title="Past revisions of this page [alt-shift-h]" accesskey="h">History</a></li> - <li id="ca-delete"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=delete" - title="Delete this page [alt-shift-d]" accesskey="d">Delete</a></li> - <li id="ca-move"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:MovePage/Reference_Manual" - title="Move this page [alt-shift-m]" accesskey="m">Move</a></li> - <li id="ca-protect"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=protect" - title="Protect this page [alt-shift-=]" accesskey="=">Protect</a></li> - <li id="ca-watch"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=watch" - title="Add this page to your watchlist [alt-shift-w]" accesskey="w">Watch</a></li> </ul> </div> </div> @@ -6288,24 +5837,6 @@ <table style="height: 4px;" rules="none" border="0" cellpadding="0" cellspacing="0"></table> <ul> - <li id="pt-userpage"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=User:Brenosilva" - title="Your user page [alt-shift-.]" accesskey="." class="new">Brenosilva</a></li> - <li id="pt-mytalk"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=User_talk:Brenosilva" - title="Your talk page [alt-shift-n]" accesskey="n" class="new">My talk</a></li> - <li id="pt-preferences"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Preferences" - title="Your preferences">My preferences</a></li> - <li id="pt-watchlist"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Watchlist" - title="The list of pages you are monitoring for changes [alt-shift-l]" -accesskey="l">My watchlist</a></li> - <li id="pt-mycontris"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Contributions/Brenosilva" - title="List of your contributions [alt-shift-y]" accesskey="y">My -contributions</a></li> - <li id="pt-logout"></li> </ul> </div> </div> @@ -6313,7 +5844,7 @@ <a style="background-image: url("/apps/mediawiki/mod-security/nfs/project/m/mo/mod-security/7/70/MediaWikiSidebarLogo.png");" -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page" title="Visit the main page [alt-shift-z]" accesskey="z"></a> </div> <script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script> @@ -6322,24 +5853,24 @@ <div class="pBody"> <ul> <li id="n-mainpage-description"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page">Main +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page">Main Page</a></li> <li id="n-portal"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Community_Portal" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Community_Portal" title="About the project, what you can do, where to find things">Community portal</a></li> <li id="n-currentevents"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Current_events" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Current_events" title="Find background information on current events">Current events</a></li> <li id="n-recentchanges"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges" title="The list of recent changes in the wiki [alt-shift-r]" accesskey="r">Recent changes</a></li> <li id="n-randompage"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Random" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Random" title="Load a random page [alt-shift-x]" accesskey="x">Random page</a></li> <li id="n-help"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Help:Contents" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Help:Contents" title="The place to find out">Help</a></li> </ul> </div> @@ -6364,25 +5895,22 @@ <div class="pBody"> <ul> <li id="t-whatlinkshere"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:WhatLinksHere/Reference_Manual" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:WhatLinksHere/Reference_Manual" title="List of all wiki pages that link here [alt-shift-j]" accesskey="j">What links here</a></li> <li id="t-recentchangeslinked"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChangesLinked/Reference_Manual" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChangesLinked/Reference_Manual" title="Recent changes in pages linked from this page [alt-shift-k]" accesskey="k">Related changes</a></li> -<li id="t-upload"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Upload" - title="Upload files [alt-shift-u]" accesskey="u">Upload file</a></li> <li id="t-specialpages"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:SpecialPages" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:SpecialPages" title="List of all special pages [alt-shift-q]" accesskey="q">Special pages</a></li> <li id="t-print"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&printable=yes&printable=yes" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&printable=yes&printable=yes" rel="alternate" title="Printable version of this page [alt-shift-p]" accesskey="p">Printable version</a></li> <li id="t-permalink"><a -href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&oldid=507" +href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&oldid=441" title="Permanent link to this revision of the page">Permanent link</a></li> </ul> </div> @@ -6394,15 +5922,15 @@ src="Reference_Manual_files/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki"></a></div> <ul id="f-list"> - <li id="lastmod"> This page was last modified on 23 July 2012, at -17:54.</li> - <li id="viewcount">This page has been accessed 142,275 times.</li> + <li id="lastmod"> This page was last modified on 30 September 2011, + at 15:04.</li> + <li id="viewcount">This page has been accessed 55,206 times.</li> </ul> </div> </div> <script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script> -<!-- Served in 1.261 secs. --> +<!-- Served in 1.178 secs. --> <script type="text/javascript"> | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/mlogc/mlogc-batch-load.pl.in ^ |
@@ -92,7 +92,7 @@ next; }; if ($sect eq 'A') { - if ($line =~ m%^(\[[^:]+:\d+:\d+:\d+ [^\]]+\]) (\S+) (\S+) (\d+) (\S+) (\d+)%) { + if ($line =~ m%^(\[[-\d/: a-zA-Z]{27}\]) (\S+) (\S+) (\d+) (\S+) (\d+)%) { $data{logtime} = $1; $data{uniqueid} = $2; $data{remote_addr} = $3; | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/mlogc/mlogc.c ^ |
@@ -421,13 +421,10 @@ { char linebuf[4100]; int line_count = -1; - int line_size = 0; - apr_status_t rc = 0; - char *p = NULL; for(;;) { - memset(linebuf, 0, 4100); - rc = apr_file_gets(linebuf, 4096, fd); + apr_status_t rc = apr_file_gets(linebuf, 4096, fd); + char *p; if (rc == APR_EOF) break; if (rc != APR_SUCCESS) { @@ -443,16 +440,14 @@ } p = &linebuf[0]; - line_size = strlen(p); /* Remove the \n from the end of the line. */ - while(*p != '\0' && line_size > 0) { + while(*p != '\0') { if (*p == '\n') { *p = '\0'; break; } p++; - line_size--; } if (linebuf[0] == '#') { /* Ignore comments. */ | ||
[+] | Changed | modsecurity-apache_2.6.2.tar.bz2/tests/tfn/hexDecode.t ^ |
@@ -21,7 +21,7 @@ type => "tfn", name => "hexDecode", input => "546573740043617365", - output => "Test\0Case", + output => "Test00Case", ret => 1, }, @@ -31,20 +31,20 @@ type => "tfn", name => "hexDecode", input => "01234567890a0z01234567890a", - output => "\x01#Eg\x89\x0a#\x01#Eg\x89\x0a", + output => "01#Eg890a0z01#Eg890a", ret => 1, }, { type => "tfn", name => "hexDecode", input => "01234567890az", - output => "\x01#Eg\x89\x0a", + output => "01#Eg890az", ret => 1, }, { type => "tfn", name => "hexDecode", input => "01234567890a0", - output => "\x01#Eg\x89\x0a", + output => "01#Eg890a0", ret => 1, }, | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files ^ |
-(directory) | ||
Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/600px-Apache_request_cycle-modsecurity.jpg ^ | |
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/ajax.js ^ |
@@ -1,167 +0,0 @@ -// remote scripting library -// (c) copyright 2005 modernmethod, inc -var sajax_debug_mode = false; -var sajax_request_type = "GET"; - -/** -* if sajax_debug_mode is true, this function outputs given the message into -* the element with id = sajax_debug; if no such element exists in the document, -* it is injected. -*/ -function sajax_debug(text) { - if (!sajax_debug_mode) return false; - - var e= document.getElementById('sajax_debug'); - - if (!e) { - e= document.createElement("p"); - e.className= 'sajax_debug'; - e.id= 'sajax_debug'; - - var b= document.getElementsByTagName("body")[0]; - - if (b.firstChild) b.insertBefore(e, b.firstChild); - else b.appendChild(e); - } - - var m= document.createElement("div"); - m.appendChild( document.createTextNode( text ) ); - - e.appendChild( m ); - - return true; -} - -/** -* compatibility wrapper for creating a new XMLHttpRequest object. -*/ -function sajax_init_object() { - sajax_debug("sajax_init_object() called..") - var A; - try { - // Try the new style before ActiveX so we don't - // unnecessarily trigger warnings in IE 7 when - // set to prompt about ActiveX usage - A = new XMLHttpRequest(); - } catch (e) { - try { - A=new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { - try { - A=new ActiveXObject("Microsoft.XMLHTTP"); - } catch (oc) { - A=null; - } - } - } - if (!A) - sajax_debug("Could not create connection object."); - - return A; -} - -/** -* Perform an ajax call to mediawiki. Calls are handeled by AjaxDispatcher.php -* func_name - the name of the function to call. Must be registered in $wgAjaxExportList -* args - an array of arguments to that function -* target - the target that will handle the result of the call. If this is a function, -* if will be called with the XMLHttpRequest as a parameter; if it's an input -* element, its value will be set to the resultText; if it's another type of -* element, its innerHTML will be set to the resultText. -* -* Example: -* sajax_do_call('doFoo', [1, 2, 3], document.getElementById("showFoo")); -* -* This will call the doFoo function via MediaWiki's AjaxDispatcher, with -* (1, 2, 3) as the parameter list, and will show the result in the element -* with id = showFoo -*/ -function sajax_do_call(func_name, args, target) { - var i, x, n; - var uri; - var post_data; - uri = wgServer + - ((wgScript == null) ? (wgScriptPath + "/index.php") : wgScript) + - "?action=ajax"; - if (sajax_request_type == "GET") { - if (uri.indexOf("?") == -1) - uri = uri + "?rs=" + encodeURIComponent(func_name); - else - uri = uri + "&rs=" + encodeURIComponent(func_name); - for (i = 0; i < args.length; i++) - uri = uri + "&rsargs[]=" + encodeURIComponent(args[i]); - //uri = uri + "&rsrnd=" + new Date().getTime(); - post_data = null; - } else { - post_data = "rs=" + encodeURIComponent(func_name); - for (i = 0; i < args.length; i++) - post_data = post_data + "&rsargs[]=" + encodeURIComponent(args[i]); - } - x = sajax_init_object(); - if (!x) { - alert("AJAX not supported"); - return false; - } - - try { - x.open(sajax_request_type, uri, true); - } catch (e) { - if (window.location.hostname == "localhost") { - alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing."); - } - throw e; - } - if (sajax_request_type == "POST") { - x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1"); - x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - } - x.setRequestHeader("Pragma", "cache=yes"); - x.setRequestHeader("Cache-Control", "no-transform"); - x.onreadystatechange = function() { - if (x.readyState != 4) - return; - - sajax_debug("received (" + x.status + " " + x.statusText + ") " + x.responseText); - - //if (x.status != 200) - // alert("Error: " + x.status + " " + x.statusText + ": " + x.responseText); - //else - - if ( typeof( target ) == 'function' ) { - target( x ); - } - else if ( typeof( target ) == 'object' ) { - if ( target.tagName == 'INPUT' ) { - if (x.status == 200) target.value= x.responseText; - //else alert("Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")"); - } - else { - if (x.status == 200) target.innerHTML = x.responseText; - else target.innerHTML= "<div class='error'>Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")</div>"; - } - } - else { - alert("bad target for sajax_do_call: not a function or object: " + target); - } - - return; - } - - sajax_debug(func_name + " uri = " + uri + " / post = " + post_data); - x.send(post_data); - sajax_debug(func_name + " waiting.."); - delete x; - - return true; -} - -/** - * @return boolean whether the browser supports XMLHttpRequest - */ -function wfSupportsAjax() { - var request = sajax_init_object(); - var supportsAjax = request ? true : false; - delete request; - return supportsAjax; -} - | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/commonPrint.css ^ |
@@ -1,267 +0,0 @@ -/* -** MediaWiki Print style sheet for CSS2-capable browsers. -** Copyright Gabriel Wicke, http://www.aulinx.de/ -** -** Derived from the plone (http://plone.org/) styles -** Copyright Alexander Limi -*/ - -/* Thanks to A List Apart (http://alistapart.com/) for useful extras */ -a.stub, -a.new{ color:#ba0000; text-decoration:none; } - -#toc { - /*border:1px solid #2f6fab;*/ - border:1px solid #aaaaaa; - background-color:#f9f9f9; - padding:5px; -} -.tocindent { - margin-left: 2em; -} -.tocline { - margin-bottom: 0px; -} - -/* images */ -div.floatright { - float: right; - clear: right; - margin: 0; - position:relative; - border: 0.5em solid White; - border-width: 0.5em 0 0.8em 1.4em; -} -div.floatright p { font-style: italic;} -div.floatleft { - float: left; - margin: 0.3em 0.5em 0.5em 0; - position:relative; - border: 0.5em solid White; - border-width: 0.5em 1.4em 0.8em 0; -} -div.floatleft p { font-style: italic; } -/* thumbnails */ -div.thumb { - margin-bottom: 0.5em; - border-style: solid; border-color: White; - width: auto; - overflow: hidden; -} -div.thumb div { - border:1px solid #cccccc; - padding: 3px !important; - background-color:#f9f9f9; - font-size: 94%; - text-align: center; -} -div.thumb div a img { - border:1px solid #cccccc; -} -div.thumb div div.thumbcaption { - border: none; - padding: 0.3em 0 0.1em 0; -} -div.magnify { display: none; } -div.tright { - float: right; - clear: right; - border-width: 0.5em 0 0.8em 1.4em; -} -div.tleft { - float: left; - margin-right:0.5em; - border-width: 0.5em 1.4em 0.8em 0; -} -img.thumbborder { - border: 1px solid #dddddd; -} - -/* table standards */ -table.rimage { - float:right; - width:1pt; - position:relative; - margin-left:1em; - margin-bottom:1em; - text-align:center; -} - -body { - background: White; - /*font-size: 11pt !important;*/ - color: Black; - margin: 0; - padding: 0; -} - -.noprint, -div#jump-to-nav, -div.top, -div#column-one, -#colophon, -.editsection, -.toctoggle, -.tochidden, -div#f-poweredbyico, -div#f-copyrightico, -li#viewcount, -li#about, -li#disclaimer, -li#privacy { - /* Hides all the elements irrelevant for printing */ - display: none; -} - -ul { - list-style-type: square; -} - -#content { - background: none; - border: none ! important; - padding: 0 ! important; - margin: 0 ! important; -} -#footer { - background : white; - color : black; - border-top: 1px solid black; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: bold; -} - -p, .documentDescription { - margin: 1em 0 ! important; - line-height: 1.2em; -} - -.tocindent p { - margin: 0 0 0 0 ! important; -} - -pre { - border: 1pt dashed black; - white-space: pre; - font-size: 8pt; - overflow: auto; - padding: 1em 0; - background : white; - color : black; -} - -table.listing, -table.listing td { - border: 1pt solid black; - border-collapse: collapse; -} - -a { - color: Black !important; - background: none !important; - padding: 0 !important; -} - -a:link, a:visited { - color: #520; - background: transparent; - text-decoration: underline; -} - -#content a.external.text:after, #content a.external.autonumber:after { - /* Expand URLs for printing */ - content: " (" attr(href) ") "; -} - -#globalWrapper { - width: 100% !important; - min-width: 0 !important; -} - -#content { - background : white; - color : black; -} - -#column-content { - margin: 0 !important; -} - -#column-content #content { - padding: 1em; - margin: 0 !important; -} -/* MSIE/Win doesn't understand 'inherit' */ -a, a.external, a.new, a.stub { - color: black ! important; - text-decoration: none ! important; -} - -/* Continue ... */ -a, a.external, a.new, a.stub { - color: inherit ! important; - text-decoration: inherit ! important; -} - -img { border: none; } -img.tex { vertical-align: middle; } -span.texhtml { font-family: serif; } - -#siteNotice { display: none; } - -table.gallery { - border: 1px solid #cccccc; - margin: 2px; - padding: 2px; - background-color:#ffffff; -} - -table.gallery tr { - vertical-align:top; -} - -div.gallerybox { - border: 1px solid #cccccc; - margin: 2px; - background-color:#f9f9f9; - width: 150px; -} - -div.gallerybox div.thumb { - text-align: center; - border: 1px solid #cccccc; - margin: 2px; -} - -div.gallerytext { - font-size: 94%; - padding: 2px 4px; -} - -/* -** Diff rendering -*/ -table.diff { background:white; } -td.diff-otitle { background:#ffffff; } -td.diff-ntitle { background:#ffffff; } -td.diff-addedline { - background:#ccffcc; - font-size: smaller; - border: solid 2px black; -} -td.diff-deletedline { - background:#ffffaa; - font-size: smaller; - border: dotted 2px black; -} -td.diff-context { - background:#eeeeee; - font-size: smaller; -} -.diffchange { - color: silver; - font-weight: bold; - text-decoration: underline; -} | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index.css ^ |
@@ -1 +0,0 @@ -/* CSS placed here will affect the print output */ \ No newline at end of file | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index.php ^ |
@@ -1,8 +0,0 @@ -/* generated javascript */ -var skin = 'sourceforge'; -var stylepath = '/apps/mediawiki/mod-security/skins'; - -/* MediaWiki:Common.js */ -/* Any JavaScript here will be loaded for all users on every page load. */ - -/* MediaWiki:Sourceforge.js */ | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index_002.css ^ |
@@ -1,2 +0,0 @@ -/* generated user stylesheet */ -a.new, #quickbar a.new { color: #CC2200; } | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index_003.css ^ |
@@ -1 +0,0 @@ -/* CSS placed here will be applied to all skins */ \ No newline at end of file | ||
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index_004.css ^ |
@@ -1 +0,0 @@ -/* Empty */ \ No newline at end of file | ||
Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/poweredby_mediawiki_88x31.png ^ | |
[+] | Deleted | modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/wikibits.js ^ |
@@ -1,1000 +0,0 @@ -// MediaWiki JavaScript support functions - -var clientPC = navigator.userAgent.toLowerCase(); // Get client info -var is_gecko = /gecko/.test( clientPC ) && - !/khtml|spoofer|netscape\/7\.0/.test(clientPC); -var webkit_match = clientPC.match(/applewebkit\/(\d+)/); -if (webkit_match) { - var is_safari = clientPC.indexOf('applewebkit') != -1 && - clientPC.indexOf('spoofer') == -1; - var is_safari_win = is_safari && clientPC.indexOf('windows') != -1; - var webkit_version = parseInt(webkit_match[1]); -} -var is_khtml = navigator.vendor == 'KDE' || - ( document.childNodes && !document.all && !navigator.taintEnabled ); -// For accesskeys; note that FF3+ is included here! -var is_ff2 = /firefox\/[2-9]|minefield\/3/.test( clientPC ); -var is_ff2_ = /firefox\/2/.test( clientPC ); -// These aren't used here, but some custom scripts rely on them -var is_ff2_win = is_ff2 && clientPC.indexOf('windows') != -1; -var is_ff2_x11 = is_ff2 && clientPC.indexOf('x11') != -1; -if (clientPC.indexOf('opera') != -1) { - var is_opera = true; - var is_opera_preseven = window.opera && !document.childNodes; - var is_opera_seven = window.opera && document.childNodes; - var is_opera_95 = /opera\/(9.[5-9]|[1-9][0-9])/.test( clientPC ); -} - -// Global external objects used by this script. -/*extern ta, stylepath, skin */ - -// add any onload functions in this hook (please don't hard-code any events in the xhtml source) -var doneOnloadHook; - -if (!window.onloadFuncts) { - var onloadFuncts = []; -} - -function addOnloadHook(hookFunct) { - // Allows add-on scripts to add onload functions - if(!doneOnloadHook) { - onloadFuncts[onloadFuncts.length] = hookFunct; - } else { - hookFunct(); // bug in MSIE script loading - } -} - -function hookEvent(hookName, hookFunct) { - addHandler(window, hookName, hookFunct); -} - -function importScript(page) { - var uri = wgScript + '?title=' + - encodeURIComponent(page.replace(/ /g,'_')).replace('%2F','/').replace('%3A',':') + - '&action=raw&ctype=text/javascript'; - return importScriptURI(uri); -} - -var loadedScripts = {}; // included-scripts tracker -function importScriptURI(url) { - if (loadedScripts[url]) { - return null; - } - loadedScripts[url] = true; - var s = document.createElement('script'); - s.setAttribute('src',url); - s.setAttribute('type','text/javascript'); - document.getElementsByTagName('head')[0].appendChild(s); - return s; -} - -function importStylesheet(page) { - return importStylesheetURI(wgScript + '?action=raw&ctype=text/css&title=' + encodeURIComponent(page.replace(/ /g,'_'))); -} - -function importStylesheetURI(url) { - return document.createStyleSheet ? document.createStyleSheet(url) : appendCSS('@import "' + url + '";'); -} - -function appendCSS(text) { - var s = document.createElement('style'); - s.type = 'text/css'; - s.rel = 'stylesheet'; - if (s.styleSheet) s.styleSheet.cssText = text //IE - else s.appendChild(document.createTextNode(text + '')) //Safari sometimes borks on null - document.getElementsByTagName('head')[0].appendChild(s); - return s; -} - -// special stylesheet links -if (typeof stylepath != 'undefined' && typeof skin != 'undefined') { - if (is_opera_preseven) { - importStylesheetURI(stylepath+'/'+skin+'/Opera6Fixes.css'); - } else if (is_opera_seven && !is_opera_95) { - importStylesheetURI(stylepath+'/'+skin+'/Opera7Fixes.css'); - } else if (is_opera_95) { - importStylesheetURI(stylepath+'/'+skin+'/Opera9Fixes.css'); - } else if (is_khtml) { - importStylesheetURI(stylepath+'/'+skin+'/KHTMLFixes.css'); - } else if (is_ff2_) { - importStylesheetURI(stylepath+'/'+skin+'/FF2Fixes.css'); - } -} - -if (wgBreakFrames) { - // Un-trap us from framesets - if (window.top != window) { - window.top.location = window.location; - } -} - -function showTocToggle() { - if (document.createTextNode) { - // Uses DOM calls to avoid document.write + XHTML issues - - var linkHolder = document.getElementById('toctitle'); - if (!linkHolder) { - return; - } - - var outerSpan = document.createElement('span'); - outerSpan.className = 'toctoggle'; - - var toggleLink = document.createElement('a'); - toggleLink.id = 'togglelink'; - toggleLink.className = 'internal'; - toggleLink.href = 'javascript:toggleToc()'; - toggleLink.appendChild(document.createTextNode(tocHideText)); - - outerSpan.appendChild(document.createTextNode('[')); - outerSpan.appendChild(toggleLink); - outerSpan.appendChild(document.createTextNode(']')); - - linkHolder.appendChild(document.createTextNode(' ')); - linkHolder.appendChild(outerSpan); - - var cookiePos = document.cookie.indexOf("hidetoc="); - if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1) { - toggleToc(); - } - } -} - -function changeText(el, newText) { - // Safari work around - if (el.innerText) { - el.innerText = newText; - } else if (el.firstChild && el.firstChild.nodeValue) { - el.firstChild.nodeValue = newText; - } -} - -function toggleToc() { - var toc = document.getElementById('toc').getElementsByTagName('ul')[0]; - var toggleLink = document.getElementById('togglelink'); - - if (toc && toggleLink && toc.style.display == 'none') { - changeText(toggleLink, tocHideText); - toc.style.display = 'block'; - document.cookie = "hidetoc=0"; - } else { - changeText(toggleLink, tocShowText); - toc.style.display = 'none'; - document.cookie = "hidetoc=1"; - } -} - -var mwEditButtons = []; -var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js - -function escapeQuotes(text) { - var re = new RegExp("'","g"); - text = text.replace(re,"\\'"); - re = new RegExp("\\n","g"); - text = text.replace(re,"\\n"); - return escapeQuotesHTML(text); -} - -function escapeQuotesHTML(text) { - var re = new RegExp('&',"g"); - text = text.replace(re,"&"); - re = new RegExp('"',"g"); - text = text.replace(re,"""); - re = new RegExp('<',"g"); - text = text.replace(re,"<"); - re = new RegExp('>',"g"); - text = text.replace(re,">"); - return text; -} - - -/** - * Set the accesskey prefix based on browser detection. - */ -var tooltipAccessKeyPrefix = 'alt-'; -if (is_opera) { - tooltipAccessKeyPrefix = 'shift-esc-'; -} else if (!is_safari_win && is_safari && webkit_version > 526) { - tooltipAccessKeyPrefix = 'ctrl-alt-'; -} else if (!is_safari_win && (is_safari - || clientPC.indexOf('mac') != -1 - || clientPC.indexOf('konqueror') != -1 )) { - tooltipAccessKeyPrefix = 'ctrl-'; -} else if (is_ff2) { - tooltipAccessKeyPrefix = 'alt-shift-'; -} -var tooltipAccessKeyRegexp = /\[(ctrl-)?(alt-)?(shift-)?(esc-)?(.)\]$/; - -/** - * Add the appropriate prefix to the accesskey shown in the tooltip. - * If the nodeList parameter is given, only those nodes are updated; - * otherwise, all the nodes that will probably have accesskeys by - * default are updated. - * - * @param Array nodeList -- list of elements to update - */ -function updateTooltipAccessKeys( nodeList ) { - if ( !nodeList ) { - // skins without a "column-one" element don't seem to have links with accesskeys either - var columnOne = document.getElementById("column-one"); - if ( columnOne ) - updateTooltipAccessKeys( columnOne.getElementsByTagName("a") ); - // these are rare enough that no such optimization is needed - updateTooltipAccessKeys( document.getElementsByTagName("input") ); - updateTooltipAccessKeys( document.getElementsByTagName("label") ); - return; - } - - for ( var i = 0; i < nodeList.length; i++ ) { - var element = nodeList[i]; - var tip = element.getAttribute("title"); - if ( tip && tooltipAccessKeyRegexp.exec(tip) ) { - tip = tip.replace(tooltipAccessKeyRegexp, - "["+tooltipAccessKeyPrefix+"$5]"); - element.setAttribute("title", tip ); - } - } -} - -/** - * Add a link to one of the portlet menus on the page, including: - * - * p-cactions: Content actions (shown as tabs above the main content in Monobook) - * p-personal: Personal tools (shown at the top right of the page in Monobook) - * p-navigation: Navigation - * p-tb: Toolbox - * - * This function exists for the convenience of custom JS authors. All - * but the first three parameters are optional, though providing at - * least an id and a tooltip is recommended. - * - * By default the new link will be added to the end of the list. To - * add the link before a given existing item, pass the DOM node of - * that item (easily obtained with document.getElementById()) as the - * nextnode parameter; to add the link _after_ an existing item, pass - * the node's nextSibling instead. - * - * @param String portlet -- id of the target portlet ("p-cactions", "p-personal", "p-navigation" or "p-tb") - * @param String href -- link URL - * @param String text -- link text (will be automatically lowercased by CSS for p-cactions in Monobook) - * @param String id -- id of the new item, should be unique and preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-") - * @param String tooltip -- text to show when hovering over the link, without accesskey suffix - * @param String accesskey -- accesskey to activate this link (one character, try to avoid conflicts) - * @param Node nextnode -- the DOM node before which the new item should be added, should be another item in the same list - * - * @return Node -- the DOM node of the new item (an LI element) or null - */ -function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode) { - var node = document.getElementById(portlet); - if ( !node ) return null; - node = node.getElementsByTagName( "ul" )[0]; - if ( !node ) return null; - - var link = document.createElement( "a" ); - link.appendChild( document.createTextNode( text ) ); - link.href = href; - - var item = document.createElement( "li" ); - item.appendChild( link ); - if ( id ) item.id = id; - - if ( accesskey ) { - link.setAttribute( "accesskey", accesskey ); - tooltip += " ["+accesskey+"]"; - } - if ( tooltip ) { - link.setAttribute( "title", tooltip ); - } - if ( accesskey && tooltip ) { - updateTooltipAccessKeys( new Array( link ) ); - } - - if ( nextnode && nextnode.parentNode == node ) - node.insertBefore( item, nextnode ); - else - node.appendChild( item ); // IE compatibility (?) - - return item; -} - -function getInnerText(el) { - if (typeof el == "string") return el; - if (typeof el == "undefined") { return el }; - if (el.textContent) return el.textContent; // not needed but it is faster - if (el.innerText) return el.innerText; // IE doesn't have textContent - var str = ""; - - var cs = el.childNodes; - var l = cs.length; - for (var i = 0; i < l; i++) { - switch (cs[i].nodeType) { - case 1: //ELEMENT_NODE - str += ts_getInnerText(cs[i]); - break; - case 3: //TEXT_NODE - str += cs[i].nodeValue; - break; - } - } - return str; -} - - -/** - * Set up accesskeys/tooltips from the deprecated ta array. If doId - * is specified, only set up for that id. Note that this function is - * deprecated and will not be supported indefinitely -- use - * updateTooltipAccessKey() instead. - * - * @param mixed doId string or null - */ -function akeytt( doId ) { - // A lot of user scripts (and some of the code below) break if - // ta isn't defined, so we make sure it is. Explictly using - // window.ta avoids a "ta is not defined" error. - if (!window.ta) window.ta = new Array; - - // Make a local, possibly restricted, copy to avoid clobbering - // the original. - var ta; - if ( doId ) { - ta = [doId]; - } else { - ta = window.ta; - } - - // Now deal with evil deprecated ta - var watchCheckboxExists = document.getElementById( 'wpWatchthis' ) ? true : false; - for (var id in ta) { - var n = document.getElementById(id); - if (n) { - var a = null; - var ak = ''; - // Are we putting accesskey in it - if (ta[id][0].length > 0) { - // Is this object a object? If not assume it's the next child. - - if (n.nodeName.toLowerCase() == "a") { - a = n; - } else { - a = n.childNodes[0]; - } - // Don't add an accesskey for the watch tab if the watch - // checkbox is also available. - if (a && ((id != 'ca-watch' && id != 'ca-unwatch') || !watchCheckboxExists)) { - a.accessKey = ta[id][0]; - ak = ' ['+tooltipAccessKeyPrefix+ta[id][0]+']'; - } - } else { - // We don't care what type the object is when assigning tooltip - a = n; - ak = ''; - } - - if (a) { - a.title = ta[id][1]+ak; - } - } - } -} - -var checkboxes; -var lastCheckbox; - -function setupCheckboxShiftClick() { - checkboxes = []; - lastCheckbox = null; - var inputs = document.getElementsByTagName('input'); - addCheckboxClickHandlers(inputs); -} - -function addCheckboxClickHandlers(inputs, start) { - if ( !start) start = 0; - - var finish = start + 250; - if ( finish > inputs.length ) - finish = inputs.length; - - for ( var i = start; i < finish; i++ ) { - var cb = inputs[i]; - if ( !cb.type || cb.type.toLowerCase() != 'checkbox' ) - continue; - var end = checkboxes.length; - checkboxes[end] = cb; - cb.index = end; - cb.onclick = checkboxClickHandler; - } - - if ( finish < inputs.length ) { - setTimeout( function () { - addCheckboxClickHandlers(inputs, finish); - }, 200 ); - } -} - -function checkboxClickHandler(e) { - if (typeof e == 'undefined') { - e = window.event; - } - if ( !e.shiftKey || lastCheckbox === null ) { - lastCheckbox = this.index; - return true; - } - var endState = this.checked; - var start, finish; - if ( this.index < lastCheckbox ) { - start = this.index + 1; - finish = lastCheckbox; - } else { - start = lastCheckbox; - finish = this.index - 1; - } - for (var i = start; i <= finish; ++i ) { - checkboxes[i].checked = endState; - } - lastCheckbox = this.index; - return true; -} - -function toggle_element_activation(ida,idb) { - if (!document.getElementById) { - return; - } - document.getElementById(ida).disabled=true; - document.getElementById(idb).disabled=false; -} - -function toggle_element_check(ida,idb) { - if (!document.getElementById) { - return; - } - document.getElementById(ida).checked=true; - document.getElementById(idb).checked=false; -} - -/* - Written by Jonathan Snook, http://www.snook.ca/jonathan - Add-ons by Robert Nyman, http://www.robertnyman.com - Author says "The credit comment is all it takes, no license. Go crazy with it!:-)" - From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/ -*/ -function getElementsByClassName(oElm, strTagName, oClassNames){ - var arrReturnElements = new Array(); - if ( typeof( oElm.getElementsByClassName ) == "function" ) { - /* Use a native implementation where possible FF3, Saf3.2, Opera 9.5 */ - var arrNativeReturn = oElm.getElementsByClassName( oClassNames ); - if ( strTagName == "*" ) - return arrNativeReturn; - for ( var h=0; h < arrNativeReturn.length; h++ ) { - if( arrNativeReturn[h].tagName.toLowerCase() == strTagName.toLowerCase() ) - arrReturnElements[arrReturnElements.length] = arrNativeReturn[h]; - } - return arrReturnElements; - } - var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName); - var arrRegExpClassNames = new Array(); - if(typeof oClassNames == "object"){ - for(var i=0; i<oClassNames.length; i++){ - arrRegExpClassNames[arrRegExpClassNames.length] = - new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"); - } - } - else{ - arrRegExpClassNames[arrRegExpClassNames.length] = - new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"); - } - var oElement; - var bMatchesAll; - for(var j=0; j<arrElements.length; j++){ - oElement = arrElements[j]; - bMatchesAll = true; - for(var k=0; k<arrRegExpClassNames.length; k++){ - if(!arrRegExpClassNames[k].test(oElement.className)){ - bMatchesAll = false; - break; - } - } - if(bMatchesAll){ - arrReturnElements[arrReturnElements.length] = oElement; - } - } - return (arrReturnElements) -} - -function redirectToFragment(fragment) { - var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/); - if (match) { - var webKitVersion = parseInt(match[1]); - if (webKitVersion < 420) { - // Released Safari w/ WebKit 418.9.1 messes up horribly - // Nightlies of 420+ are ok - return; - } - } - if (is_gecko) { - // Mozilla needs to wait until after load, otherwise the window doesn't scroll - addOnloadHook(function () { - if (window.location.hash == "") - window.location.hash = fragment; - }); - } else { - if (window.location.hash == "") - window.location.hash = fragment; - } -} - -/* - * Table sorting script based on one (c) 1997-2006 Stuart Langridge and Joost - * de Valk: - * http://www.joostdevalk.nl/code/sortable-table/ - * http://www.kryogenix.org/code/browser/sorttable/ - * - * @todo don't break on colspans/rowspans (bug 8028) - * @todo language-specific digit grouping/decimals (bug 8063) - * @todo support all accepted date formats (bug 8226) - */ - -var ts_image_path = stylepath+"/common/images/"; -var ts_image_up = "sort_up.gif"; -var ts_image_down = "sort_down.gif"; -var ts_image_none = "sort_none.gif"; -var ts_europeandate = wgContentLanguage != "en"; // The non-American-inclined can change to "true" -var ts_alternate_row_colors = false; -var ts_number_transform_table = null; -var ts_number_regex = null; - -function sortables_init() { - var idnum = 0; - // Find all tables with class sortable and make them sortable - var tables = getElementsByClassName(document, "table", "sortable"); - for (var ti = 0; ti < tables.length ; ti++) { - if (!tables[ti].id) { - tables[ti].setAttribute('id','sortable_table_id_'+idnum); - ++idnum; - } - ts_makeSortable(tables[ti]); - } -} - -function ts_makeSortable(table) { - var firstRow; - if (table.rows && table.rows.length > 0) { - if (table.tHead && table.tHead.rows.length > 0) { - firstRow = table.tHead.rows[table.tHead.rows.length-1]; - } else { - firstRow = table.rows[0]; - } - } - if (!firstRow) return; - - // We have a first row: assume it's the header, and make its contents clickable links - for (var i = 0; i < firstRow.cells.length; i++) { - var cell = firstRow.cells[i]; - if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) { - cell.innerHTML += ' ' - + '<a href="#" class="sortheader" ' - + 'onclick="ts_resortTable(this);return false;">' - + '<span class="sortarrow">' - + '<img src="' - + ts_image_path - + ts_image_none - + '" alt="↓"/></span></a>'; - } - } - if (ts_alternate_row_colors) { - ts_alternate(table); - } -} - -function ts_getInnerText(el) { - return getInnerText( el ); -} - -function ts_resortTable(lnk) { - // get the span - var span = lnk.getElementsByTagName('span')[0]; - - var td = lnk.parentNode; - var tr = td.parentNode; - var column = td.cellIndex; - - var table = tr.parentNode; - while (table && !(table.tagName && table.tagName.toLowerCase() == 'table')) - table = table.parentNode; - if (!table) return; - - if (table.rows.length <= 1) return; - - // Generate the number transform table if it's not done already - if (ts_number_transform_table == null) { - ts_initTransformTable(); - } - - // Work out a type for the column - // Skip the first row if that's where the headings are - var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1); - - var itm = ""; - for (var i = rowStart; i < table.rows.length; i++) { - if (table.rows[i].cells.length > column) { - itm = ts_getInnerText(table.rows[i].cells[column]); - itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, ""); - if (itm != "") break; - } - } - - // TODO: bug 8226, localised date formats - var sortfn = ts_sort_generic; - var preprocessor = ts_toLowerCase; - if (/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/.test(itm)) { - preprocessor = ts_dateToSortKey; - } else if (/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/.test(itm)) { - preprocessor = ts_dateToSortKey; - } else if (/^\d\d[\/.-]\d\d[\/.-]\d\d$/.test(itm)) { - preprocessor = ts_dateToSortKey; - // pound dollar euro yen currency cents - } else if (/(^[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/.test(itm)) { - preprocessor = ts_currencyToSortKey; - } else if (ts_number_regex.test(itm)) { - preprocessor = ts_parseFloat; - } - - var reverse = (span.getAttribute("sortdir") == 'down'); - - var newRows = new Array(); - var staticRows = new Array(); - for (var j = rowStart; j < table.rows.length; j++) { - var row = table.rows[j]; - if((" "+row.className+" ").indexOf(" unsortable ") < 0) { - var keyText = ts_getInnerText(row.cells[column]); - var oldIndex = (reverse ? -j : j); - var preprocessed = preprocessor( keyText ); - - newRows[newRows.length] = new Array(row, preprocessed, oldIndex); - } else staticRows[staticRows.length] = new Array(row, false, j-rowStart); - } - - newRows.sort(sortfn); - - var arrowHTML; - if (reverse) { - arrowHTML = '<img src="'+ ts_image_path + ts_image_down + '" alt="↓"/>'; - newRows.reverse(); - span.setAttribute('sortdir','up'); - } else { - arrowHTML = '<img src="'+ ts_image_path + ts_image_up + '" alt="↑"/>'; - span.setAttribute('sortdir','down'); - } - - for (var i = 0; i < staticRows.length; i++) { - var row = staticRows[i]; - newRows.splice(row[2], 0, row); - } - - // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones - // don't do sortbottom rows - for (var i = 0; i < newRows.length; i++) { - if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1) - table.tBodies[0].appendChild(newRows[i][0]); - } - // do sortbottom rows only - for (var i = 0; i < newRows.length; i++) { - if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1) - table.tBodies[0].appendChild(newRows[i][0]); - } - - // Delete any other arrows there may be showing - var spans = getElementsByClassName(tr, "span", "sortarrow"); - for (var i = 0; i < spans.length; i++) { - spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="↓"/>'; - } - span.innerHTML = arrowHTML; - - if (ts_alternate_row_colors) { - ts_alternate(table); - } -} - -function ts_initTransformTable() { - if ( typeof wgSeparatorTransformTable == "undefined" - || ( wgSeparatorTransformTable[0] == '' && wgDigitTransformTable[2] == '' ) ) - { - digitClass = "[0-9,.]"; - ts_number_transform_table = false; - } else { - ts_number_transform_table = {}; - // Unpack the transform table - // Separators - ascii = wgSeparatorTransformTable[0].split("\t"); - localised = wgSeparatorTransformTable[1].split("\t"); - for ( var i = 0; i < ascii.length; i++ ) { - ts_number_transform_table[localised[i]] = ascii[i]; - } - // Digits - ascii = wgDigitTransformTable[0].split("\t"); - localised = wgDigitTransformTable[1].split("\t"); - for ( var i = 0; i < ascii.length; i++ ) { - ts_number_transform_table[localised[i]] = ascii[i]; - } - - // Construct regex for number identification - digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '\\.']; - maxDigitLength = 1; - for ( var digit in ts_number_transform_table ) { - // Escape regex metacharacters - digits.push( - digit.replace( /[\\\\$\*\+\?\.\(\)\|\{\}\[\]\-]/, - function( s ) { return '\\' + s; } ) - ); - if (digit.length > maxDigitLength) { - maxDigitLength = digit.length; - } - } - if ( maxDigitLength > 1 ) { - digitClass = '[' + digits.join( '', digits ) + ']'; - } else { - digitClass = '(' + digits.join( '|', digits ) + ')'; - } - } - - // We allow a trailing percent sign, which we just strip. This works fine - // if percents and regular numbers aren't being mixed. - ts_number_regex = new RegExp( - "^(" + - "[+-]?[0-9][0-9,]*(\\.[0-9,]*)?(E[+-]?[0-9][0-9,]*)?" + // Fortran-style scientific - "|" + - "[+-]?" + digitClass + "+%?" + // Generic localised - ")$", "i" - ); -} - -function ts_toLowerCase( s ) { - return s.toLowerCase(); -} - -function ts_dateToSortKey(date) { - // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX - if (date.length == 11) { - switch (date.substr(3,3).toLowerCase()) { - case "jan": var month = "01"; break; - case "feb": var month = "02"; break; - case "mar": var month = "03"; break; - case "apr": var month = "04"; break; - case "may": var month = "05"; break; - case "jun": var month = "06"; break; - case "jul": var month = "07"; break; - case "aug": var month = "08"; break; - case "sep": var month = "09"; break; - case "oct": var month = "10"; break; - case "nov": var month = "11"; break; - case "dec": var month = "12"; break; - // default: var month = "00"; - } - return date.substr(7,4)+month+date.substr(0,2); - } else if (date.length == 10) { - if (ts_europeandate == false) { - return date.substr(6,4)+date.substr(0,2)+date.substr(3,2); - } else { - return date.substr(6,4)+date.substr(3,2)+date.substr(0,2); - } - } else if (date.length == 8) { - yr = date.substr(6,2); - if (parseInt(yr) < 50) { - yr = '20'+yr; - } else { - yr = '19'+yr; - } - if (ts_europeandate == true) { - return yr+date.substr(3,2)+date.substr(0,2); - } else { - return yr+date.substr(0,2)+date.substr(3,2); - } - } - return "00000000"; -} - -function ts_parseFloat( s ) { - if ( !s ) { - return 0; - } - if (ts_number_transform_table != false) { - var newNum = '', c; - - for ( var p = 0; p < s.length; p++ ) { - c = s.charAt( p ); - if (c in ts_number_transform_table) { - newNum += ts_number_transform_table[c]; - } else { - newNum += c; - } - } - s = newNum; - } - - num = parseFloat(s.replace(/,/g, "")); - return (isNaN(num) ? 0 : num); -} - -function ts_currencyToSortKey( s ) { - return ts_parseFloat(s.replace(/[^0-9.,]/g,'')); -} - -function ts_sort_generic(a, b) { - return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]; -} - -function ts_alternate(table) { - // Take object table and get all it's tbodies. - var tableBodies = table.getElementsByTagName("tbody"); - // Loop through these tbodies - for (var i = 0; i < tableBodies.length; i++) { - // Take the tbody, and get all it's rows - var tableRows = tableBodies[i].getElementsByTagName("tr"); - // Loop through these rows - // Start at 1 because we want to leave the heading row untouched - for (var j = 0; j < tableRows.length; j++) { - // Check if j is even, and apply classes for both possible results - var oldClasses = tableRows[j].className.split(" "); - var newClassName = ""; - for (var k = 0; k < oldClasses.length; k++) { - if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd") - newClassName += oldClasses[k] + " "; - } - tableRows[j].className = newClassName + (j % 2 == 0 ? "even" : "odd"); - } - } -} - -/* - * End of table sorting code - */ - - -/** - * Add a cute little box at the top of the screen to inform the user of - * something, replacing any preexisting message. - * - * @param String -or- Dom Object message HTML to be put inside the right div - * @param String className Used in adding a class; should be different for each - * call to allow CSS/JS to hide different boxes. null = no class used. - * @return Boolean True on success, false on failure - */ -function jsMsg( message, className ) { - if ( !document.getElementById ) { - return false; - } - // We special-case skin structures provided by the software. Skins that - // choose to abandon or significantly modify our formatting can just define - // an mw-js-message div to start with. - var messageDiv = document.getElementById( 'mw-js-message' ); - if ( !messageDiv ) { - messageDiv = document.createElement( 'div' ); - if ( document.getElementById( 'column-content' ) - && document.getElementById( 'content' ) ) { - // MonoBook, presumably - document.getElementById( 'content' ).insertBefore( - messageDiv, - document.getElementById( 'content' ).firstChild - ); - } else if ( document.getElementById('content') - && document.getElementById( 'article' ) ) { - // Non-Monobook but still recognizable (old-style) - document.getElementById( 'article').insertBefore( - messageDiv, - document.getElementById( 'article' ).firstChild - ); - } else { - return false; - } - } - - messageDiv.setAttribute( 'id', 'mw-js-message' ); - messageDiv.style.display = 'block'; - if( className ) { - messageDiv.setAttribute( 'class', 'mw-js-message-'+className ); - } - - if (typeof message === 'object') { - while (messageDiv.hasChildNodes()) // Remove old content - messageDiv.removeChild(messageDiv.firstChild); - messageDiv.appendChild (message); // Append new content - } - else { - messageDiv.innerHTML = message; - } - return true; -} - -/** - * Inject a cute little progress spinner after the specified element - * - * @param element Element to inject after - * @param id Identifier string (for use with removeSpinner(), below) - */ -function injectSpinner( element, id ) { - var spinner = document.createElement( "img" ); - spinner.id = "mw-spinner-" + id; - spinner.src = stylepath + "/common/images/spinner.gif"; - spinner.alt = spinner.title = "..."; - if( element.nextSibling ) { - element.parentNode.insertBefore( spinner, element.nextSibling ); - } else { - element.parentNode.appendChild( spinner ); - } -} - -/** - * Remove a progress spinner added with injectSpinner() - * - * @param id Identifier string - */ -function removeSpinner( id ) { - var spinner = document.getElementById( "mw-spinner-" + id ); - if( spinner ) { - spinner.parentNode.removeChild( spinner ); - } -} - -function runOnloadHook() { - // don't run anything below this for non-dom browsers - if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName)) { - return; - } - - // set this before running any hooks, since any errors below - // might cause the function to terminate prematurely - doneOnloadHook = true; - - updateTooltipAccessKeys( null ); - akeytt( null ); - setupCheckboxShiftClick(); - sortables_init(); - - // Run any added-on functions - for (var i = 0; i < onloadFuncts.length; i++) { - onloadFuncts[i](); - } -} - -/** - * Add an event handler to an element - * - * @param Element element Element to add handler to - * @param String attach Event to attach to - * @param callable handler Event handler callback - */ -function addHandler( element, attach, handler ) { - if( window.addEventListener ) { - element.addEventListener( attach, handler, false ); - } else if( window.attachEvent ) { - element.attachEvent( 'on' + attach, handler ); - } -} - -/** - * Add a click event handler to an element - * - * @param Element element Element to add handler to - * @param callable handler Event handler callback - */ -function addClickHandler( element, handler ) { - addHandler( element, 'click', handler ); -} - -/** - * Removes an event handler from an element - * - * @param Element element Element to remove handler from - * @param String remove Event to remove - * @param callable handler Event handler callback to remove - */ -function removeHandler( element, remove, handler ) { - if( window.removeEventListener ) { - element.removeEventListener( remove, handler, false ); - } else if( window.detachEvent ) { - element.detachEvent( 'on' + remove, handler ); - } -} -//note: all skins should call runOnloadHook() at the end of html output, -// so the below should be redundant. It's there just in case. -hookEvent("load", runOnloadHook); | ||
Deleted | modsecurity-apache_2.7.4.tar.bz2 ^ | |
Deleted | modsecurity-apache_2.7.5.tar.bz2 ^ | |
Deleted | modsecurity-apache_2.7.7.tar.bz2 ^ | |
[+] | Changed | zzz_asl_custom_exclude.conf ^ |
@@ -4,21 +4,3 @@ SecRuleRemoveById 350147 SecRuleRemoveById 350148 SecRuleRemoveById 340162 -SecRuleRemoveById 391213 -SecRuleRemoveById 340152 - -# experimental -SecRuleRemoveById 340202 -SecRuleRemoveById 340201 -SecRuleRemoveById 340204 -SecRuleRemoveById 340205 -SecRuleRemoveById 340206 -SecRuleRemoveById 340207 -SecRuleRemoveById 340208 -SecRuleRemoveById 340209 -SecRuleRemoveById 345400 -SecRuleRemoveById 345401 -SecRuleRemoveById 345402 -SecRuleRemoveById 345403 -SecRuleRemoveById 345404 - |