handle duplicate slashes in case of reverse proxy configuration

remotes/origin/stable6
Thomas Müller 12 years ago
parent de2b444030
commit a0a665ea45
  1. 5
      lib/private/request.php
  2. 20
      tests/lib/request.php

@ -136,7 +136,10 @@ class OC_Request {
* @returns string Path info or false when not found
*/
public static function getRawPathInfo() {
$path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
$requestUri = $_SERVER['REQUEST_URI'];
// remove too many leading slashes - can be caused by reverse proxy configuration
$requestUri = '/' . ltrim($requestUri, '/');
$path_info = substr($requestUri, strlen($_SERVER['SCRIPT_NAME']));
// Remove the query string from REQUEST_URI
if ($pos = strpos($path_info, '?')) {
$path_info = substr($path_info, 0, $pos);

@ -23,4 +23,24 @@ class Test_Request extends PHPUnit_Framework_TestCase {
$scriptName = OC_Request::scriptName();
$this->assertEquals('/domain.tld/ownCloud/tests/lib/request.php', $scriptName);
}
/**
* @dataProvider rawPathInfoProvider
* @param $expected
* @param $requestUri
* @param $scriptName
*/
public function testRawPathInfo($expected, $requestUri, $scriptName) {
$_SERVER['REQUEST_URI'] = $requestUri;
$_SERVER['SCRIPT_NAME'] = $scriptName;
$rawPathInfo = OC_Request::getRawPathInfo();
$this->assertEquals($expected, $rawPathInfo);
}
function rawPathInfoProvider() {
return array(
array('/core/ajax/translations.php', '/index.php/core/ajax/translations.php', '/index.php'),
array('/core/ajax/translations.php', '//index.php/core/ajax/translations.php', '/index.php'),
);
}
}

Loading…
Cancel
Save