From 2eaabf06fc5a62104ecb597830b2852d71b0a111 Mon Sep 17 00:00:00 2001 From: Darek Slusarczyk Date: Mon, 11 Feb 2019 17:16:49 +0100 Subject: security fix - by default 'local infile' is disabled: - set default for mysqli.allow_local_infile=0 - explicitly disable PDO::MYSQL_ATTR_LOCAL_INFILE in case of lack of driver options - add getAttribute support for PDO::MYSQL_ATTR_LOCAL_INFILE - update existing tests where needed - add new tests [checking default value and setting on] the 'local infile' in ext/mysqli and ext/pdo_mysql --- ext/mysqli/mysqli.c | 4 ++-- ext/mysqli/tests/061.phpt | 2 ++ ext/mysqli/tests/bug36745.phpt | 2 ++ ext/mysqli/tests/bug53503.phpt | 2 ++ ext/mysqli/tests/bug68077.phpt | 3 +++ ext/mysqli/tests/mysqli_constants.phpt | 2 ++ ext/mysqli/tests/mysqli_get_client_stats.phpt | 1 + ext/mysqli/tests/mysqli_info.phpt | 2 ++ .../tests/mysqli_local_infile_default_off.phpt | 26 ++++++++++++++++++++ ext/mysqli/tests/mysqli_local_infile_set_on.phpt | 28 ++++++++++++++++++++++ ext/mysqli/tests/mysqli_real_connect.phpt | 2 ++ ext/mysqli/tests/mysqli_real_connect_pconn.phpt | 1 + 12 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 ext/mysqli/tests/mysqli_local_infile_default_off.phpt create mode 100644 ext/mysqli/tests/mysqli_local_infile_set_on.phpt (limited to 'ext/mysqli') diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 8f3446952e..fff095f081 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -524,7 +524,7 @@ PHP_INI_BEGIN() STD_PHP_INI_ENTRY("mysqli.default_socket", NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_socket, zend_mysqli_globals, mysqli_globals) #endif STD_PHP_INI_BOOLEAN("mysqli.reconnect", "0", PHP_INI_SYSTEM, OnUpdateLong, reconnect, zend_mysqli_globals, mysqli_globals) - STD_PHP_INI_BOOLEAN("mysqli.allow_local_infile", "1", PHP_INI_SYSTEM, OnUpdateLong, allow_local_infile, zend_mysqli_globals, mysqli_globals) + STD_PHP_INI_BOOLEAN("mysqli.allow_local_infile", "0", PHP_INI_SYSTEM, OnUpdateLong, allow_local_infile, zend_mysqli_globals, mysqli_globals) PHP_INI_END() /* }}} */ @@ -549,7 +549,7 @@ static PHP_GINIT_FUNCTION(mysqli) mysqli_globals->reconnect = 0; mysqli_globals->report_mode = 0; mysqli_globals->report_ht = 0; - mysqli_globals->allow_local_infile = 1; + mysqli_globals->allow_local_infile = 0; #ifdef HAVE_EMBEDDED_MYSQLI mysqli_globals->embedded = 1; #else diff --git a/ext/mysqli/tests/061.phpt b/ext/mysqli/tests/061.phpt index 5817d8230d..be2028b66e 100644 --- a/ext/mysqli/tests/061.phpt +++ b/ext/mysqli/tests/061.phpt @@ -17,6 +17,8 @@ if ($msg = check_local_infile_support($link, $engine)) mysqli_close($link); ?> +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- --INI-- +mysqli.allow_local_infile=1 +mysqli.allow_persistent=1 +mysqli.max_persistent=1 open_basedir= --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--FILE-- + +--EXPECTF-- +server: %s +connector: 0 +done! diff --git a/ext/mysqli/tests/mysqli_local_infile_set_on.phpt b/ext/mysqli/tests/mysqli_local_infile_set_on.phpt new file mode 100644 index 0000000000..172d6dcb9b --- /dev/null +++ b/ext/mysqli/tests/mysqli_local_infile_set_on.phpt @@ -0,0 +1,28 @@ +--TEST-- +enable local infile +--SKIPIF-- + +--INI-- +mysqli.allow_local_infile=1 +--FILE-- + +--EXPECTF-- +server: %s +connector: 1 +done! diff --git a/ext/mysqli/tests/mysqli_real_connect.phpt b/ext/mysqli/tests/mysqli_real_connect.phpt index 5477ea1745..be0a10b0bf 100644 --- a/ext/mysqli/tests/mysqli_real_connect.phpt +++ b/ext/mysqli/tests/mysqli_real_connect.phpt @@ -6,6 +6,8 @@ require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('skipifconnectfailure.inc'); ?> +--INI-- +mysqli.allow_local_infile=1 --FILE-- --INI-- +mysqli.allow_local_infile=1 mysqli.allow_persistent=1 mysqli.max_persistent=10 --FILE-- -- cgit v1.2.1