From 1b0a789ab9fc25d25193af943c485cb973c321b3 Mon Sep 17 00:00:00 2001 From: SVN Migration Date: Wed, 5 Jul 2006 10:12:43 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'PHP_5_2'. --- ext/filter/docs/filter.txt | 331 +++++++++++ ext/filter/docs/input_get_args.php | 41 ++ ext/filter/filter.c | 878 +++++++++++++++++++++++++++++ ext/filter/filter_private.h | 90 +++ ext/filter/logical_filters.c | 842 +++++++++++++++++++++++++++ ext/filter/package.xml | 98 ++++ ext/filter/package2.xml | 127 +++++ ext/filter/php_filter.h | 106 ++++ ext/filter/tests/010.phpt | 60 ++ ext/filter/tests/013.phpt | 72 +++ ext/filter/tests/015.phpt | 72 +++ ext/filter/tests/016.phpt | 32 ++ ext/filter/tests/017.phpt | 24 + ext/filter/tests/018.phpt | 50 ++ ext/filter/tests/019.phpt | 20 + ext/filter/tests/030.phpt | 35 ++ ext/filter/tests/031.phpt | 54 ++ ext/filter/tests/032.phpt | 55 ++ ext/filter/tests/033.phpt | 25 + ext/filter/tests/033_run.php | 23 + ext/filter/tests/bug7586.phpt | 53 ++ ext/filter/tests/bug7715.phpt | 27 + ext/filter/tests/bug7733.phpt | 27 + sapi/apache2filter/config.w32 | 35 ++ 24 files changed, 3177 insertions(+) create mode 100644 ext/filter/docs/filter.txt create mode 100644 ext/filter/docs/input_get_args.php create mode 100644 ext/filter/filter.c create mode 100644 ext/filter/filter_private.h create mode 100644 ext/filter/logical_filters.c create mode 100644 ext/filter/package.xml create mode 100644 ext/filter/package2.xml create mode 100644 ext/filter/php_filter.h create mode 100644 ext/filter/tests/010.phpt create mode 100644 ext/filter/tests/013.phpt create mode 100644 ext/filter/tests/015.phpt create mode 100644 ext/filter/tests/016.phpt create mode 100644 ext/filter/tests/017.phpt create mode 100644 ext/filter/tests/018.phpt create mode 100644 ext/filter/tests/019.phpt create mode 100644 ext/filter/tests/030.phpt create mode 100644 ext/filter/tests/031.phpt create mode 100644 ext/filter/tests/032.phpt create mode 100644 ext/filter/tests/033.phpt create mode 100644 ext/filter/tests/033_run.php create mode 100644 ext/filter/tests/bug7586.phpt create mode 100644 ext/filter/tests/bug7715.phpt create mode 100644 ext/filter/tests/bug7733.phpt create mode 100755 sapi/apache2filter/config.w32 diff --git a/ext/filter/docs/filter.txt b/ext/filter/docs/filter.txt new file mode 100644 index 0000000000..48aae0c8d5 --- /dev/null +++ b/ext/filter/docs/filter.txt @@ -0,0 +1,331 @@ +Input Filter Extension +~~~~~~~~~~~~~~~~~~~~~~ + +Introduction +============ +We all know that you should always check input variables, but PHP does not +offer really good functionality for doing this in a safe way. The Input Filter +extension is meant to address this issue by implementing a set of filters and +mechanisms that users can use to safely access their input data. + + +Change Log +========== +2005-10-27 + * Updated filter_data prototype + * Added filter constants + * Fixed minor problems + * Changes by David Tulloh + +2005-10-05 + * Changed "input_filter.paranoid_admin_default_filter" to + "filter.default". + * Updated API prototypes to reflect implementation. + * Added 'on' and 'off' to the boolean filter. + * Removed min_range and max_range flags from the float filter. + * Added validate_url, validate_email and validate_ip filters. + * Updated allows flags for all filters. + +2005-08-15 + * Unmade *source* a bitmask, it doesn't make sense to do. + * Changed return value of filters which got invalid data from 'false' to + 'null. + * Failed filters do not throw an E_NOTICE any longer. + * Added a magic_quotes sanitizing filter. + + +General Considerations +====================== +* If the filter's expected input data mask does not match the provided data + for logical filters the filter function returns "false". If the data was + not found, "null" is returned. +* Character filters always return a string. +* With the input filter extension enabled, and the + input_filter.paranoid_admin_default_filter is set to something != 'raw', + then all entries in the affected super globals will be passed through the + configured filter. The 'callback' filter can not be used here, as that + requieres a PHP script to be running already. +* As the input filter acts on input data before the magic quotes function + mangles data, all access through the filter() function will not have any + quotes or slashes added - it will be the pure data as send by the browser. +* All flags mentioned here should be prepended with `FILTER_FLAG_` when used + with PHP. + + +API +=== +mixed *input_get* (int *source*, string *name*, [, int *filter* [, mixed *filter_options*, [ string *characterset* ] ]); + Returns the filtered variable *$name* from source *$source*. It uses the + filter as specified in *$filter* with a constant, and additional options + to the filter through *$filter_options*. + +mixed *input_get_args* (array *definitions*, int *source*, [, array *data*]); + Returns an array with all filtered variables defined in 'definition'. + The keys are used as the name of the argument. The value can be either + an integer (flags) or an array of options. This array can contain + the 'filter' type, the 'flags', the 'otptions' or the 'charset' + +bool *input_has_variable (int *source*, string *name*); + Returns *true* if the variable with the name *name* exists in *source*, or + *false* otherwise. + +array *input_filters_list* (); + Returns a list with all supported filter names. + +mixed *filter_data* (mixed *variable*, int *filter* [, mixed *filter_options*, [ string *characterset* ] ]); + Filters the user supplied variable *$variable* in the same manner as + *input_get*. + +*$source*: + +* INPUT_POST 0 +* INPUT_GET 1 +* INPUT_COOKIE 2 +* INPUT_ENV 4 +* INPUT_SERVER 5 (not implemented yet) +* INPUT_SESSION 6 (not implemented yet) + + +General flags +============= + +* FILTER_FLAG_SCALAR +* FILTER_FLAG_ARRAY + +These two constants define whether to allow arrays in the source values. The +default value is SCALAR for input_get_args and ARRAY for the other functions +(< 0.9.5). These constants also insure that the function returns the correct +type, if you ask for an array, you will get an array even if the source is +only one value. However, if you ask for a scalar and the source is an array, +the result will be FALSE (invalid). + + +Logical Filters +=============== + +These filters check whether passed data was valid, and do never mangle input +variables, but ofcourse they can deny the whole input variable getting to the +application by returning false. + +The constants should be prepended by `FILTER_VALIDATE_` when used with php. + +================ ========== =========== ================================================== +Name Constant Return Type Description +================ ========== =========== ================================================== +int INT integer Returns the input variable as an integer + + $filter_options - an array with the optional + elements: + + * min_range: Minimal number that is allowed + (inclusive) + * max_range: Maximum number that is allowed + (inclusive) + * flags: A bitmask supporting the following flags: + + - ALLOW_OCTAL: allow octal numbers with the format + 0nn as input too. + - ALLOW_HEX: allow hexadecimal numbers with the + format 0xnn or 0Xnn too. + +boolean BOOLEAN boolean Returns *true* for '1', 'on' and 'true' and *false* + for '0', 'off' and 'false' + +float FLOAT float Returns the input variable as a floating point value + +validate_regexp REGEXP string Matches the input value as a string against the + regular expression. If there is a match then the + string is returned, otherwise the filter returns + *null*. + Remarks: Only available if pcre has been compiled + into PHP. + +validate_url URL string Validates an URL's format. + + $filter_options - an bitmask that supports the + following flags: + + * SCHEME_REQUIRED: The 'schema' part of the URL + needs to in the passed URL. + * HOST_REQUIRED: The 'host' part of the URL + needs to in the passed URL. + * PATH_REQUIRED: The 'path' part of the URL + needs to in the passed URL. + * QUERY_REQUIRED: The 'query' part of the URL + needs to in the passed URL. + +validate_email EMAIL string Validates the passed string against a reasonably + good regular expression for validating an email + address. + +validate_ip IP string Validates a string representing an IP address. + + $filter_options - an bitmask that supports the + following flags: + + * IPV4: Allows IPv4 addresses. + * IPV6: Allows IPv6 addresses. + * NO_RES_RANGE: Disallows addresses in reversed + ranges (IPv4 only) + * NO_PRIV_RANGE: Disallows addresses in private + ranges (IPv4 only) +================ ========== =========== ================================================== + + +Sanitizing Filters +================== + +These filters remove data, or change data depending on the filter, and the +set rules for this specific filter. Instead of taking an *options* array, they +use this parameter for flags for the specific filter. + +The constants should be prepended by `FILTER_SANITIZE_` when used with php. + +============= ================ =========== ===================================================== +Name Constant Return Type Description +============= ================ =========== ===================================================== +string STRING string Returns the input variable as a string after it has + been stripped of XML/HTML tags and other evil things + that can cause XSS problems. + + $filter_options - an bitmask that supports the + following flags: + + * NO_ENCODE_QUOTES: Prevents single and double + quotes from being encoded as numerical HTML + entities. + * STRIP_LOW: excludes all characters < 0x20 from the + allowed character list + * STRIP_HIGH: excludes all characters >= 0x80 from + the allowed character list + * ENCODE_LOW: allows characters < 0x20 but encodes + them as numerical HTML entities + * ENCODE_HIGH: allows characters >= 0x80 but encodes + them as numerical HTML entities + * ENCODE_AMP: encodes & as & + + The flags STRIP_LOW and ENCODE_LOW are mutual + exclusive, and so are STRIP_HIGH and ENCODE_HIGH. In + the case they clash, the characters will be + stripped. + +stripped STRIPPED string Alias for 'string'. + +encoded ENCODED string Encodes all characters outside the range + "a-zA-Z0-9-._" as URL encoded values. + + $filter_options - an bitmask that supports the + following flags: + + * STRIP_LOW: excludes all characters < 0x20 from the + allowed character list + * STRIP_HIGH: excludes all characters >= 0x80 from + the allowed character list + * ENCODE_LOW: allows characters < 0x20 but encodes + them as numerical HTML entities + * ENCODE_HIGH: allows characters >= 0x80 but encodes + them as numerical HTML entities + +special_chars SPECIAL_CHARS string Encodes the 'special' characters ' " < > &, \0 and + everything below 0x20 as numerical HTML entities. + + $filter_options - an bitmask that supports the + following flags: + + * STRIP_LOW: excludes all characters < 0x20 from the + allowed character list. If this is not set, then + those characters are encoded as numerical HTML + entities + * STRIP_HIGH: excludes all characters >= 0x80 from + the allowed character list + * ENCODE_HIGH: allows characters >= 0x80 but encodes + them as numerical HTML entities + +unsafe_raw UNSAFE_RAW string Returns the input variable as a string without + XML/HTML being stripped from the input value. + + $filter_options - an bitmask that supports the + following flags: + + * STRIP_LOW: excludes all characters < 0x20 from the + allowed character list + * STRIP_HIGH: excludes all characters >= 0x80 from + the allowed character list + * ENCODE_LOW: allows characters < 0x20 but encodes + them as numerical HTML entities + * ENCODE_HIGH: allows characters >= 0x80 but encodes + them as numerical HTML entities + * ENCODE_AMP: encodes & as & + + The flags STRIP_LOW and ENCODE_LOW are mutual + exclusive, and so are STRIP_HIGH and ENCODE_HIGH. In + the case they clash, the characters will be + stripped. + +email EMAIL string Removes all characters that can not be part of a + correctly formed e-mail address (exception are + comments in the email address) (a-z A-Z 0-9 " ! # $ + % & ' * + - / = ? ^ _ ` { | } ~ @ . [ ]). This + filter does `not` validate if the e-mail address has + the correct format, use the validate_email filter + for that. + +url URL string Removes all characters that can not be part of a + correctly formed URI. (a-z A-Z 0-9 $ - _ . + ! * ' ( + ) , { } | \ ^ ~ [ ] ` < > # % " ; / ? : @ & =) This + filter does `not` validate if a URI has the correct + format, use the validate_url filter for that. + +number_int NUMBER_INT int Removes all characters that are [^0-9+-]. + +number_float NUMBER_FLOAT float Removes all characters that are [^0-9+-]. + + $filter_options - an bitmask that supports the + following flags: + + * ALLOW_FRACTION: adds "." to the characters that + are not stripped. + * ALLOW_THOUSAND: adds "," to the characters that + are not stripped. + * ALLOW_SCIENTIFIC: adds "eE" to the characters that + are not stripped. + +magic_quotes MAGIC_QUOTES string BC filter for people who like magic quotes. +============= ================ =========== ===================================================== + + +Callback Filter +=============== + +This filter will callback to the specified callback function as specified with +the *filter_options* parameter. All variants of callback functions are +supported: + +* function with *'functionname'* +* static method with *array('classname', 'methodname')* +* dynamic method with *array(&$this, 'methodname')* + +The constants should be prepended by `FILTER_` when used with php. + +============= =========== =========== ===================================================== +Name Constant Return Type Description +============= =========== =========== ===================================================== +callback CALLBACK mixed Calls the callback function/method with the input + variable's value by reference which can do filtering + and modifying of the input value. If the callback + function returns "false" then the input value is + supposed to be incorrect and the returned value will + be 'false' (and an E_NOTICE will be raised). +============= =========== =========== ===================================================== + +The callback function's prototype is: + +boolean callback(&$value, $characterset); + With *$value* being a reference to the input variable and *$characterset* + containing the same value as this parameter's value in the call to + *input_get()* or *input_get_array()*. If the *$characterset* parameter was + not passed, it defaults to *'null'*. + +Version: $Id$ +.. vim: et syn=rst tw=78 + diff --git a/ext/filter/docs/input_get_args.php b/ext/filter/docs/input_get_args.php new file mode 100644 index 0000000000..b580524489 --- /dev/null +++ b/ext/filter/docs/input_get_args.php @@ -0,0 +1,41 @@ + 'product id