You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Michael Wallner adfa6209e6 - output handler buffers are always binary, thanks Johannes 19 years ago
TSRM typo 19 years ago
Zend ChangeLog update 19 years ago
build MFB:- Updated bundled shtool to 2.0.6 and added "platform" command in it. 19 years ago
ext check GMP version and skip the test if it's <= 4.2.1 19 years ago
main removed unused highlight.bg ini option 19 years ago
netware Bump year. 19 years ago
regex MFB: Fixed potential use of un-initialized var 20 years ago
sapi - Fix function signature 19 years ago
scripts Use PHP_SETUP_ICU in self-contained extensions 19 years ago
tests - output handler buffers are always binary, thanks Johannes 19 years ago
win32 Fixed bug #41192 (Per Directory Values only work for one key) 19 years ago
.gdbinit - Show whether a zval is a reference in printzv user command 19 years ago
CODING_STANDARDS \# Damn ! 20 years ago
CREDITS Let's pretend this is up-to-date now 24 years ago
ChangeLog ChangeLog update 19 years ago
ChangeLog.1999.gz * separated and compressed changelogs from 1999 and 2000 25 years ago
ChangeLog.2000.gz * separated and compressed changelogs from 1999 and 2000 25 years ago
ChangeLog.2001.gz * archive the 2001 changelog 24 years ago
ChangeLog.2002.gz rotate changelog 23 years ago
ChangeLog.2003.gz - Compress 2003 changelog 22 years ago
ChangeLog.2004.gz - Compressed 2004 Changelog 21 years ago
ChangeLog.2005.gz 2005 -> 2006 20 years ago
EXTENSIONS update ext/gmp status and maintainers 19 years ago
INSTALL Rename php5 module to php6. Remove version number from 19 years ago
LICENSE 2005 -> 2006 20 years ago
Makefile.frag - Silence unnecessary output 21 years ago
Makefile.gcov MFB 19 years ago
Makefile.global we don't ship libmysql anymore, so there is no need for this message 19 years ago
NEWS [DOC] add gmp_testbit() function 19 years ago
README.CVS-RULES - Update 20 years ago
README.EXTENSIONS * zend_module_entry change: apino, debug and zts are moved first, 25 years ago
README.EXT_SKEL ok, re-adding this mostly un-maintained awk/sed/sh nightmare for now ... 23 years ago
README.NEW-OUTPUT-API - revise output handler alias API 20 years ago
README.PARAMETER_PARSING_API Update 19 years ago
README.PEAR - if questions, rtfm 21 years ago
README.PHP4-TO-PHP5-THIN-CHANGES new incompatibilities. maybe someone from the doc group will update the 22 years ago
README.QNX PHP 4.0 27 years ago
README.SELF-CONTAINED-EXTENSIONS Improve the wording in this paragraph. 24 years ago
README.STREAMS Added notes about locking functions. 23 years ago
README.SUBMITTING_PATCH Typos found by Petras Kudaras. 22 years ago
README.TESTING typo 22 years ago
README.TESTING2 many new enhancements to run-tests that allow for testing cgi and other 23 years ago
README.UNICODE Update with rewrites by me and Evan G. 19 years ago
README.UNICODE-UPGRADES - Nicer version 19 years ago
README.UNIX-BUILD-SYSTEM Update documentation for PHP 5. 23 years ago
README.UPDATING_TO_PHP6 typo 20 years ago
README.WIN32-BUILD-SYSTEM Now that it has matured somewhat, don't discourage questions about it 22 years ago
README.Zeus - Change from PHP5 -> PHP 5 22 years ago
README.input_filter - Fix docs 20 years ago
TODO *** empty log message *** 21 years ago
TODO-5.1 Update TODO. 21 years ago
TODO-PHP5 Remove finished tasks 22 years ago
acconfig.h.in Wipe out acconfig.h.in and rewrite some checks to use PHP_ARG_ENABLE. 26 years ago
acinclude.m4 - Update version in error message as well 19 years ago
buildconf - Remove unused lines 20 years ago
buildconf.bat Add new (optional!) win32 build infrastructure. 22 years ago
config.guess MFB51: Update bundled libtool to version 1.5.20 20 years ago
config.sub MFB51: Update bundled libtool to version 1.5.20 20 years ago
configure.in - Add glob stream wrapper 19 years ago
cvsclean Renaming cvsclean target; IRIX make seems to ignore .PHONY 22 years ago
cvsclean.bat "Real" cvsclean, works as the unix version does 22 years ago
footer consistent with the used style 23 years ago
genfiles More files to have #line directives stripped for release 21 years ago
header bump year and license version 20 years ago
ltmain.sh MFB51: Update bundled libtool to version 1.5.20 20 years ago
makedist Download pear phar file when making a distribution package 20 years ago
makerpm Rename php5 module to php6. Remove version number from 19 years ago
php.gif change these in HEAD too 20 years ago
php.ini-dist removed unused highlight.bg ini option 19 years ago
php.ini-recommended removed unused highlight.bg ini option 19 years ago
php5.spec.in - Renamed all *php4* files to *php5*, changed all php4/PHP4 to php5/PHP5 22 years ago
run-tests.php make USE_ZEND_ALLOC env var available in SKIPIF section 19 years ago
server-tests-config.php - Fix filename 21 years ago
server-tests.php So long safe_mode mode. 20 years ago
snapshot Integration of -ng changes. Changes: 26 years ago
stamp-h.in # Fix ColorResolve bogosity 27 years ago
stub.c Add newline. Recent GCC snapshots segfault, if the input file is completely 26 years ago
unicode-gotchas.txt Add note about md5(). 20 years ago
unicode-issues.txt Unicode support. 21 years ago
unicode-progress.txt - Update unicode progress on SPL, looks like nearly done, actually all is 19 years ago
unicode-todo.txt *** empty log message *** 19 years ago

README.input_filter

Input Filter Support in PHP 5
-----------------------------

XSS (Cross Site Scripting) hacks are becoming more and more prevalent,
and can be quite difficult to prevent. Whenever you accept user data
and somehow display this data back to users, you are likely vulnerable
to XSS hacks.

The Input Filter support in PHP 5 is aimed at providing the framework
through which a company-wide or site-wide security policy can be
enforced. It is implemented as a SAPI hook and is called from the
treat_data and post handler functions. To implement your own security
policy you will need to write a standard PHP extension.

A simple implementation might look like the following. This stores the
original raw user data and adds a my_get_raw() function while the normal
$_POST, $_GET and $_COOKIE arrays are only populated with stripped
data. In this simple example all I am doing is calling strip_tags() on
the data. If register_globals is turned on, the default globals that
are created will be stripped ($foo) while a $RAW_foo is created with the
original user input.

ZEND_BEGIN_MODULE_GLOBALS(my_input_filter)
zval *post_array;
zval *get_array;
zval *cookie_array;
ZEND_END_MODULE_GLOBALS(my_input_filter)

#ifdef ZTS
#define IF_G(v) TSRMG(my_input_filter_globals_id, zend_my_input_filter_globals *, v)
#else
#define IF_G(v) (my_input_filter_globals.v)
#endif

ZEND_DECLARE_MODULE_GLOBALS(my_input_filter)

zend_function_entry my_input_filter_functions[] = {
PHP_FE(my_get_raw, NULL)
{NULL, NULL, NULL}
};

zend_module_entry my_input_filter_module_entry = {
STANDARD_MODULE_HEADER,
"my_input_filter",
my_input_filter_functions,
PHP_MINIT(my_input_filter),
PHP_MSHUTDOWN(my_input_filter),
NULL,
PHP_RSHUTDOWN(my_input_filter),
PHP_MINFO(my_input_filter),
"0.1",
STANDARD_MODULE_PROPERTIES
};

PHP_MINIT_FUNCTION(my_input_filter)
{
ZEND_INIT_MODULE_GLOBALS(my_input_filter, php_my_input_filter_init_globals, NULL);

REGISTER_LONG_CONSTANT("POST", PARSE_POST, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("GET", PARSE_GET, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("COOKIE", PARSE_COOKIE, CONST_CS | CONST_PERSISTENT);

sapi_register_input_filter(my_sapi_input_filter);
return SUCCESS;
}

PHP_RSHUTDOWN_FUNCTION(my_input_filter)
{
if(IF_G(get_array)) {
zval_ptr_dtor(&IF_G(get_array));
IF_G(get_array) = NULL;
}
if(IF_G(post_array)) {
zval_ptr_dtor(&IF_G(post_array));
IF_G(post_array) = NULL;
}
if(IF_G(cookie_array)) {
zval_ptr_dtor(&IF_G(cookie_array));
IF_G(cookie_array) = NULL;
}
return SUCCESS;
}

PHP_MINFO_FUNCTION(my_input_filter)
{
php_info_print_table_start();
php_info_print_table_row( 2, "My Input Filter Support", "enabled" );
php_info_print_table_row( 2, "Revision", "$Revision$");
php_info_print_table_end();
}

/* The filter handler. If you return 1 from it, then PHP also registers the
* (modified) variable. Returning 0 prevents PHP from registering the variable;
* you can use this if your filter already registers the variable under a
* different name, or if you just don't want the variable registered at all. */
SAPI_INPUT_FILTER_FUNC(my_sapi_input_filter)
{
zval new_var;
zval *array_ptr = NULL;
char *raw_var;
int var_len;

assert(*val != NULL);

switch(arg) {
case PARSE_GET:
if(!IF_G(get_array)) {
ALLOC_ZVAL(array_ptr);
array_init(array_ptr);
INIT_PZVAL(array_ptr);
}
IF_G(get_array) = array_ptr;
break;
case PARSE_POST:
if(!IF_G(post_array)) {
ALLOC_ZVAL(array_ptr);
array_init(array_ptr);
INIT_PZVAL(array_ptr);
}
IF_G(post_array) = array_ptr;
break;
case PARSE_COOKIE:
if(!IF_G(cookie_array)) {
ALLOC_ZVAL(array_ptr);
array_init(array_ptr);
INIT_PZVAL(array_ptr);
}
IF_G(cookie_array) = array_ptr;
break;
}
Z_STRLEN(new_var) = val_len;
Z_STRVAL(new_var) = estrndup(*val, val_len);
Z_TYPE(new_var) = IS_STRING;

var_len = strlen(var);
raw_var = emalloc(var_len+5); /* RAW_ and a \0 */
strcpy(raw_var, "RAW_");
strlcat(raw_var,var,var_len+5);

php_register_variable_ex(raw_var, &new_var, array_ptr TSRMLS_DC);

php_strip_tags(*val, val_len, NULL, NULL, 0);

*new_val_len = strlen(*val);
return 1;
}

PHP_FUNCTION(my_get_raw)
{
long arg;
char *var;
int var_len;
zval **tmp;
zval *array_ptr = NULL;
HashTable *hash_ptr;
char *raw_var;

if(zend_parse_parameters(2 TSRMLS_CC, "ls", &arg, &var, &var_len) == FAILURE) {
return;
}

switch(arg) {
case PARSE_GET:
array_ptr = IF_G(get_array);
break;
case PARSE_POST:
array_ptr = IF_G(post_array);
break;
case PARSE_COOKIE:
array_ptr = IF_G(post_array);
break;
}

if(!array_ptr) RETURN_FALSE;

/*
* I'm changing the variable name here because when running with register_globals on,
* the variable will end up in the global symbol table
*/
raw_var = emalloc(var_len+5); /* RAW_ and a \0 */
strcpy(raw_var, "RAW_");
strlcat(raw_var,var,var_len+5);
hash_ptr = HASH_OF(array_ptr);

if(zend_hash_find(hash_ptr, raw_var, var_len+5, (void **)&tmp) == SUCCESS) {
*return_value = **tmp;
zval_copy_ctor(return_value);
} else {
RETVAL_FALSE;
}
efree(raw_var);
}