Chris@13: attributes->get(self::SANITIZED, FALSE)) { Chris@13: // Process query string parameters. Chris@13: $get_sanitized_keys = []; Chris@13: $request->query->replace(static::stripDangerousValues($request->query->all(), $whitelist, $get_sanitized_keys)); Chris@13: if ($log_sanitized_keys && !empty($get_sanitized_keys)) { Chris@13: trigger_error(sprintf('Potentially unsafe keys removed from query string parameters (GET): %s', implode(', ', $get_sanitized_keys))); Chris@13: } Chris@13: Chris@13: // Request body parameters. Chris@13: $post_sanitized_keys = []; Chris@13: $request->request->replace(static::stripDangerousValues($request->request->all(), $whitelist, $post_sanitized_keys)); Chris@13: if ($log_sanitized_keys && !empty($post_sanitized_keys)) { Chris@13: trigger_error(sprintf('Potentially unsafe keys removed from request body parameters (POST): %s', implode(', ', $post_sanitized_keys))); Chris@13: } Chris@13: Chris@13: // Cookie parameters. Chris@13: $cookie_sanitized_keys = []; Chris@13: $request->cookies->replace(static::stripDangerousValues($request->cookies->all(), $whitelist, $cookie_sanitized_keys)); Chris@13: if ($log_sanitized_keys && !empty($cookie_sanitized_keys)) { Chris@13: trigger_error(sprintf('Potentially unsafe keys removed from cookie parameters: %s', implode(', ', $cookie_sanitized_keys))); Chris@13: } Chris@13: Chris@13: if (!empty($get_sanitized_keys) || !empty($post_sanitized_keys) || !empty($cookie_sanitized_keys)) { Chris@13: $request->overrideGlobals(); Chris@13: } Chris@13: $request->attributes->set(self::SANITIZED, TRUE); Chris@13: } Chris@13: return $request; Chris@13: } Chris@13: Chris@13: /** Chris@13: * Strips dangerous keys from $input. Chris@13: * Chris@13: * @param mixed $input Chris@13: * The input to sanitize. Chris@13: * @param string[] $whitelist Chris@13: * An array of keys to whitelist as safe. Chris@13: * @param string[] $sanitized_keys Chris@13: * An array of keys that have been removed. Chris@13: * Chris@13: * @return mixed Chris@13: * The sanitized input. Chris@13: */ Chris@13: protected static function stripDangerousValues($input, array $whitelist, array &$sanitized_keys) { Chris@13: if (is_array($input)) { Chris@13: foreach ($input as $key => $value) { Chris@13: if ($key !== '' && $key[0] === '#' && !in_array($key, $whitelist, TRUE)) { Chris@13: unset($input[$key]); Chris@13: $sanitized_keys[] = $key; Chris@13: } Chris@13: else { Chris@13: $input[$key] = static::stripDangerousValues($input[$key], $whitelist, $sanitized_keys); Chris@13: } Chris@13: } Chris@13: } Chris@13: return $input; Chris@13: } Chris@13: Chris@13: }