Skip to content

Commit

Permalink
Backport of fixes from SA-CORE-2018-002 (#116)
Browse files Browse the repository at this point in the history
  • Loading branch information
dsnopek authored and pwolanin committed Mar 28, 2018
1 parent fc43e72 commit 2d234e1
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
55 changes: 55 additions & 0 deletions includes/bootstrap.inc
Original file line number Diff line number Diff line change
Expand Up @@ -1483,6 +1483,7 @@ function _drupal_bootstrap($phase) {
timer_start('page');
// Initialize the configuration
conf_init();
_drupal_bootstrap_sanitize_request();
break;

case DRUPAL_BOOTSTRAP_EARLY_PAGE_CACHE:
Expand Down Expand Up @@ -2207,3 +2208,57 @@ function filter_xss_bad_protocol($string, $decode = TRUE) {
} while ($before != $string);
return check_plain($string);
}

/**
* Sanitizes unsafe keys from the request.
*/
function _drupal_bootstrap_sanitize_request() {
global $conf;
static $sanitized;

if (!$sanitized) {
// Ensure the whitelist array exists.
if (!isset($conf['sanitize_input_whitelist']) || !is_array($conf['sanitize_input_whitelist'])) {
$conf['sanitize_input_whitelist'] = array();
}

$sanitized_keys = _drupal_bootstrap_sanitize_input($_GET, $conf['sanitize_input_whitelist']);
$sanitized_keys = array_merge($sanitized_keys, _drupal_bootstrap_sanitize_input($_POST, $conf['sanitize_input_whitelist']));
$sanitized_keys = array_merge($sanitized_keys, _drupal_bootstrap_sanitize_input($_REQUEST, $conf['sanitize_input_whitelist']));
$sanitized_keys = array_merge($sanitized_keys, _drupal_bootstrap_sanitize_input($_COOKIE, $conf['sanitize_input_whitelist']));
$sanitized_keys = array_unique($sanitized_keys);

if (count($sanitized_keys) && !empty($conf['sanitize_input_logging'])) {
trigger_error(check_plain(sprintf('Potentially unsafe keys removed from request parameters: %s', implode(', ', $sanitized_keys)), E_USER_WARNING));
}

$sanitized = TRUE;
}
}

/**
* Sanitizes unsafe keys from user input.
*
* @param mixed $input
* Input to sanitize.
* @param array $whitelist
* Whitelist of values.
* @return array
*/
function _drupal_bootstrap_sanitize_input(&$input, $whitelist = array()) {
$sanitized_keys = array();

if (is_array($input)) {
foreach ($input as $key => $value) {
if ($key !== '' && $key[0] === '#' && !in_array($key, $whitelist, TRUE)) {
unset($input[$key]);
$sanitized_keys[] = $key;
}
elseif (is_array($input[$key])) {
$sanitized_keys = array_merge($sanitized_keys, _drupal_bootstrap_sanitize_input($input[$key], $whitelist));
}
}
}

return $sanitized_keys;
}
2 changes: 1 addition & 1 deletion modules/system/system.module
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/**
* The current system version.
*/
define('VERSION', '6.39');
define('VERSION', '6.40');

/**
* Core API compatibility.
Expand Down

0 comments on commit 2d234e1

Please sign in to comment.